bpf: fix link info netfilter flags to populate defrag flag
Subsystems (6)
PATCH 1/2 bpf: fix link info netfilter flags to populate defrag flag
This patch correctly populates the bpf_link_info.netfilter.flags field when user passes the BPF_F_NETFILTER_IP_DEFRAG flag.
--- net/netfilter/nf_bpf_link.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/netfilter/nf_bpf_link.c +2 -1
@@ -150,11 +150,12 @@ static int bpf_nf_link_fill_link_info(const struct bpf_link *link, struct bpf_link_info *info) { struct bpf_nf_link *nf_link = container_of(link, struct bpf_nf_link, link); +const struct nf_defrag_hook *hook = nf_link->defrag_hook; info->netfilter.pf = nf_link->hook_ops.pf; info->netfilter.hooknum = nf_link->hook_ops.hooknum; info->netfilter.priority = nf_link->hook_ops.priority; - info->netfilter.flags =0 ; + info->netfilter.flags = hook ?BPF_F_NETFILTER_IP_DEFRAG :0 ;return 0 ; }
Signature · 1 line
2.43.0
PATCH 2/2 selftests/bpf: add asserts for netfilter link info
Add assertions/tests to verify bpf_link_info fields for netfilter link are correctly populated.
--- .../bpf/prog_tests/netfilter_link_attach.c | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-)
tools/testing/selftests/bpf/prog_tests/netfilter_link_attach.c +38 -2
@@ -26,10 +26,43 @@ static const struct nf_link_test nf_hook_link_tests[] = { { .pf = NFPROTO_INET, .priority = 1, .name = "invalid-inet-not-supported", }, - { .pf = NFPROTO_IPV4, .priority = -10000, .expect_success = true, .name = "attach ipv4", }, - { .pf = NFPROTO_IPV6, .priority = 10001, .expect_success = true, .name = "attach ipv6", }, + { + .pf = NFPROTO_IPV4, + .hooknum = NF_INET_POST_ROUTING, + .priority = -10000, + .flags = 0, + .expect_success = true, + .name = "attach ipv4", + }, + { + .pf = NFPROTO_IPV6, + .hooknum = NF_INET_FORWARD, + .priority = 10001, + .flags = BPF_F_NETFILTER_IP_DEFRAG, + .expect_success = true, + .name = "attach ipv6", + }, }; +static void verify_netfilter_link_info(struct bpf_link *link, const struct nf_link_test nf_expected) +{ + struct bpf_link_info info; + __u32 len = sizeof(info); + int err, fd; + + memset(&info, 0, len); + + fd = bpf_link__fd(link); + err = bpf_link_get_info_by_fd(fd, &info, &len); + ASSERT_OK(err, "get_link_info"); + + ASSERT_EQ(info.type, BPF_LINK_TYPE_NETFILTER, "info link type"); + ASSERT_EQ(info.netfilter.pf, nf_expected.pf, "info nf protocol family"); + ASSERT_EQ(info.netfilter.hooknum, nf_expected.hooknum, "info nf hooknum"); + ASSERT_EQ(info.netfilter.priority, nf_expected.priority, "info nf priority"); + ASSERT_EQ(info.netfilter.flags, nf_expected.flags, "info nf flags"); +} + void test_netfilter_link_attach(void) { struct test_netfilter_link_attach *skel;
@@ -63,6 +96,7 @@ void test_netfilter_link_attach(void)if (!ASSERT_OK_PTR (link,"program attach successful" ))continue ; +verify_netfilter_link_info (link, nf_hook_link_tests[i]); link2 =bpf_program__attach_netfilter (prog, &opts);ASSERT_ERR_PTR (link2,"attach program with same pf/hook/priority" );
@@ -73,6 +107,8 @@ void test_netfilter_link_attach(void) link2 =bpf_program__attach_netfilter (prog, &opts);if (!ASSERT_OK_PTR (link2,"program reattach successful" ))continue ; +verify_netfilter_link_info (link2, nf_hook_link_tests[i]); +if (!ASSERT_OK (bpf_link__destroy (link2),"link destroy" ))break ; }else {
Signature · 1 line
2.43.0
Quoted 2 lines · Tyrone Wu
This patch correctly populates the
bpf_link_info.netfilter.flagsfield when user passes theBPF_F_NETFILTER_IP_DEFRAGflag.
Indeed, thanks for fixing this.
Patch and testcase look good, but one nit:
Quoted 1 line
Fixes 84601d6ee68a ("bpf: add bpf_link support for BPF_NETFILTER programs")
BPF_F_NETFILTER_IP_DEFRAG flag was added in91721c2d02d3 ("netfilter: bpf: Support BPF_F_NETFILTER_IP_DEFRAG in netfilter link"), that was a bit later than the initial support.
Other than that,
Daniel Borkmann
maintainerQuoted 7 lines · Florian Westphal
Quoted 2 lines · Tyrone Wu
This patch correctly populates the
bpf_link_info.netfilter.flagsfield when user passes theBPF_F_NETFILTER_IP_DEFRAGflag.Indeed, thanks for fixing this.
Patch and testcase look good, but one nit:
Quoted 7 lines
Quoted 1 line
Fixes 84601d6ee68a ("bpf: add bpf_link support for BPF_NETFILTER programs")
BPF_F_NETFILTER_IP_DEFRAGflag was added in91721c2d02d3("netfilter: bpf: SupportBPF_F_NETFILTER_IP_DEFRAGin netfilter link"), that was a bit later than the initial support.Other than that,
Acked-by Florian Westphal <[email protected]>
Thanks Florian & Tyrone, fixed up Fixes tag while applying.
This series was applied to bpf/bpf.git (master) by Daniel Borkmann <[email protected]>:
Hello:
This series was applied to bpf/bpf.git (master)
by Daniel Borkmann <[email protected]>:
Quoted 8 lines · On Fri, 11 Oct 2024 19:32:51 +0000 you wrote:
This patch correctly populates the
bpf_link_info.netfilter.flagsfield when user passes theBPF_F_NETFILTER_IP_DEFRAGflag.Fixes 84601d6ee68a ("bpf: add bpf_link support for BPF_NETFILTER programs")Signed-off-by Tyrone Wu <[email protected]>--- net/netfilter/nf_bpf_link.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Here is the summary with links:
- [bpf,v1,1/2] bpf: fix link info netfilter flags to populate defrag flag
https://git.kernel.org/bpf/bpf/c/92f3715e1eba - [bpf,v1,2/2] selftests/bpf: add asserts for netfilter link info https://git.kernel.org/bpf/bpf/c/2aa587fd6659
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html