]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink_delinearize: fix decoding of concat data element
authorFlorian Westphal <fw@strlen.de>
Mon, 12 Dec 2022 10:04:34 +0000 (11:04 +0100)
committerFlorian Westphal <fw@strlen.de>
Mon, 12 Dec 2022 15:50:00 +0000 (16:50 +0100)
Its possible to use update as follows:

 meta l4proto tcp update @pinned { ip saddr . ct original proto-src : ip daddr . ct original proto-dst }

... but when listing, only the first element of the concatenation is
shown.

Check if the element size is too small and parse subsequent registers as
well.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/netlink_delinearize.c

index 0b6cf10722949f3233c0dde4bbfeda33b753dcbc..fe3246b2e3e9782b476c5cc1d6e7f95efd876cc8 100644 (file)
@@ -1660,6 +1660,14 @@ static void netlink_parse_dynset(struct netlink_parse_ctx *ctx,
        if (nftnl_expr_is_set(nle, NFTNL_EXPR_DYNSET_SREG_DATA)) {
                sreg_data = netlink_parse_register(nle, NFTNL_EXPR_DYNSET_SREG_DATA);
                expr_data = netlink_get_register(ctx, loc, sreg_data);
+
+               if (expr_data->len < set->data->len) {
+                       expr_free(expr_data);
+                       expr_data = netlink_parse_concat_expr(ctx, loc, sreg_data, set->data->len);
+                       if (expr_data == NULL)
+                               netlink_error(ctx, loc,
+                                             "Could not parse dynset map data expressions");
+               }
        }
 
        if (expr_data != NULL) {