Skip to content

Commit 0d8c507

Browse files
committed
Bound JSON prefix-bits and validate eventconfig flags
1 parent af32ab6 commit 0d8c507

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/json/load_config.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -876,6 +876,8 @@ static wolfsentry_errcode_t handle_route_endpoint_clause(struct wolfsentry_json_
876876
}
877877
#endif
878878
else if (! strcmp(jps->cur_keyname, "prefix-bits")) {
879+
wolfsentry_addr_bits_t max_bits;
880+
wolfsentry_errcode_t ret;
879881
if (sa->sa_family == WOLFSENTRY_AF_UNSPEC)
880882
WOLFSENTRY_ERROR_RETURN(CONFIG_OUT_OF_SEQUENCE);
881883
#ifdef WOLFSENTRY_ADDR_BITMASK_MATCHING
@@ -888,7 +890,16 @@ static wolfsentry_errcode_t handle_route_endpoint_clause(struct wolfsentry_json_
888890
WOLFSENTRY_ERROR_RETURN(CONFIG_MISPLACED_KEY);
889891
}
890892
#endif
891-
WOLFSENTRY_ERROR_RERETURN(convert_uint16(type, data, data_size, &sa->addr_len));
893+
ret = convert_uint16(type, data, data_size, &sa->addr_len);
894+
WOLFSENTRY_RERETURN_IF_ERROR(ret);
895+
ret = wolfsentry_addr_family_max_addr_bits(
896+
JPS_WOLFSENTRY_CONTEXT_ARGS_OUT,
897+
sa->sa_family,
898+
&max_bits);
899+
WOLFSENTRY_RERETURN_IF_ERROR(ret);
900+
if (sa->addr_len > max_bits)
901+
WOLFSENTRY_ERROR_RETURN(NUMERIC_ARG_TOO_BIG);
902+
WOLFSENTRY_RETURN_OK;
892903
}
893904
else if (! strcmp(jps->cur_keyname, "interface")) {
894905
WOLFSENTRY_CLEAR_BITS(jps->o_u_c.route.flags,

src/wolfsentry_util.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3606,8 +3606,14 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_eventconfig_check(
36063606
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
36073607
if (config->derogatory_threshold_for_penaltybox > MAX_UINT_OF(instance_of_field(struct wolfsentry_route, meta.derogatory_count)))
36083608
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
3609+
if (config->route_flags_to_add_on_insert & WOLFSENTRY_ROUTE_FLAG_PENALTYBOXED)
3610+
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
3611+
if (config->route_flags_to_clear_on_insert & WOLFSENTRY_ROUTE_FLAG_PENALTYBOXED)
3612+
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
36093613
ret = wolfsentry_route_check_flags_sensical(config->route_flags_to_add_on_insert);
36103614
WOLFSENTRY_RERETURN_IF_ERROR(ret);
3615+
ret = wolfsentry_route_check_flags_sensical(config->route_flags_to_clear_on_insert);
3616+
WOLFSENTRY_RERETURN_IF_ERROR(ret);
36113617

36123618
if (config->route_private_data_size == 0) {
36133619
if (config->route_private_data_alignment != 0)

0 commit comments

Comments
 (0)