From 443503f53530c3829e7805018b3f7b55e6dcd3c4 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 30 Nov 2021 00:50:53 +0100 Subject: exthdr: fix type number saved in udata This should store the index of the protocol template, but &x[i] - &x[0] is always i, so remove the divide. Also add test case. Fixes: 01fbc1574b9e ("exthdr: add parse and build userdata interface") Signed-off-by: Florian Westphal Acked-by: Phil Sutter --- src/exthdr.c | 4 +--- tests/shell/testcases/sets/dumps/typeof_sets_0.nft | 5 +++++ tests/shell/testcases/sets/typeof_sets_0 | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/exthdr.c b/src/exthdr.c index 22a08b0c..00d338f0 100644 --- a/src/exthdr.c +++ b/src/exthdr.c @@ -165,9 +165,7 @@ static struct expr *exthdr_expr_parse_udata(const struct nftnl_udata *attr) static unsigned int expr_exthdr_type(const struct exthdr_desc *desc, const struct proto_hdr_template *tmpl) { - unsigned int offset = (unsigned int)(tmpl - &desc->templates[0]); - - return offset / sizeof(*tmpl); + return (unsigned int)(tmpl - &desc->templates[0]); } static int exthdr_expr_build_udata(struct nftnl_udata_buf *udbuf, diff --git a/tests/shell/testcases/sets/dumps/typeof_sets_0.nft b/tests/shell/testcases/sets/dumps/typeof_sets_0.nft index 565369fb..06d891e6 100644 --- a/tests/shell/testcases/sets/dumps/typeof_sets_0.nft +++ b/tests/shell/testcases/sets/dumps/typeof_sets_0.nft @@ -14,6 +14,11 @@ table inet t { elements = { 2, 3, 103 } } + set s4 { + typeof frag frag-off + elements = { 1, 1024 } + } + chain c1 { osf name @s1 accept } diff --git a/tests/shell/testcases/sets/typeof_sets_0 b/tests/shell/testcases/sets/typeof_sets_0 index 9b2712e5..a6ff8ca7 100755 --- a/tests/shell/testcases/sets/typeof_sets_0 +++ b/tests/shell/testcases/sets/typeof_sets_0 @@ -20,6 +20,11 @@ EXPECTED="table inet t { elements = { 2, 3, 103 } } + set s4 { + typeof frag frag-off + elements = { 1, 1024 } + } + chain c1 { osf name @s1 accept } -- cgit v1.2.3