Blame SOURCES/0022-netlink_delinearize-fix-decoding-of-concat-data-elem.patch

1d03cd
From b34a2b24c107a63183726333388e7946a36f2ea1 Mon Sep 17 00:00:00 2001
1d03cd
From: Phil Sutter <psutter@redhat.com>
1d03cd
Date: Fri, 17 Feb 2023 17:52:16 +0100
1d03cd
Subject: [PATCH] netlink_delinearize: fix decoding of concat data element
1d03cd
1d03cd
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094894
1d03cd
Upstream Status: nftables commit db59a5c1204c9
1d03cd
1d03cd
commit db59a5c1204c9246a82a115a8761f15809578479
1d03cd
Author: Florian Westphal <fw@strlen.de>
1d03cd
Date:   Mon Dec 12 11:04:34 2022 +0100
1d03cd
1d03cd
    netlink_delinearize: fix decoding of concat data element
1d03cd
1d03cd
    Its possible to use update as follows:
1d03cd
1d03cd
     meta l4proto tcp update @pinned { ip saddr . ct original proto-src : ip daddr . ct original proto-dst }
1d03cd
1d03cd
    ... but when listing, only the first element of the concatenation is
1d03cd
    shown.
1d03cd
1d03cd
    Check if the element size is too small and parse subsequent registers as
1d03cd
    well.
1d03cd
1d03cd
    Signed-off-by: Florian Westphal <fw@strlen.de>
1d03cd
1d03cd
Signed-off-by: Phil Sutter <psutter@redhat.com>
1d03cd
---
1d03cd
 src/netlink_delinearize.c | 8 ++++++++
1d03cd
 1 file changed, 8 insertions(+)
1d03cd
1d03cd
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
1d03cd
index 1d47c74..e9e0845 100644
1d03cd
--- a/src/netlink_delinearize.c
1d03cd
+++ b/src/netlink_delinearize.c
1d03cd
@@ -1659,6 +1659,14 @@ static void netlink_parse_dynset(struct netlink_parse_ctx *ctx,
1d03cd
 	if (nftnl_expr_is_set(nle, NFTNL_EXPR_DYNSET_SREG_DATA)) {
1d03cd
 		sreg_data = netlink_parse_register(nle, NFTNL_EXPR_DYNSET_SREG_DATA);
1d03cd
 		expr_data = netlink_get_register(ctx, loc, sreg_data);
1d03cd
+
1d03cd
+		if (expr_data->len < set->data->len) {
1d03cd
+			expr_free(expr_data);
1d03cd
+			expr_data = netlink_parse_concat_expr(ctx, loc, sreg_data, set->data->len);
1d03cd
+			if (expr_data == NULL)
1d03cd
+				netlink_error(ctx, loc,
1d03cd
+					      "Could not parse dynset map data expressions");
1d03cd
+		}
1d03cd
 	}
1d03cd
 
1d03cd
 	if (expr_data != NULL) {
1d03cd
-- 
1d03cd
2.39.2
1d03cd