Skip to content

Commit 871c97c

Browse files
committed
Bound JSON prefix-bits to address-family maximum
1 parent 7ef618d commit 871c97c

1 file changed

Lines changed: 12 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,

0 commit comments

Comments
 (0)