* [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill
@ 2026-04-09 2:37 Jiayuan Chen
2026-04-09 6:24 ` Daniel Borkmann
2026-04-09 20:30 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Jiayuan Chen @ 2026-04-09 2:37 UTC (permalink / raw)
To: bpf
Cc: Jiayuan Chen, Yinhao Hu, Kaiyan Mei, Dongliang Mu,
Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Kumar Kartikeya Dwivedi,
Song Liu, Yonghong Song, Jiri Olsa, Jakub Kicinski, linux-kernel
When querying info for an offloaded BPF map or program,
bpf_map_offload_info_fill_ns() and bpf_prog_offload_info_fill_ns()
obtain the network namespace with get_net(dev_net(offmap->netdev)).
However, the associated netdev's netns may be racing with teardown
during netns destruction. If the netns refcount has already reached 0,
get_net() performs a refcount_t increment on 0, triggering:
refcount_t: addition on 0; use-after-free.
Although rtnl_lock and bpf_devs_lock ensure the netdev pointer remains
valid, they cannot prevent the netns refcount from reaching zero.
Fix this by using maybe_get_net() instead of get_net(). maybe_get_net()
uses refcount_inc_not_zero() and returns NULL if the refcount is already
zero, which causes ns_get_path_cb() to fail and the caller to return
-ENOENT -- the correct behavior when the netns is being destroyed.
Fixes: 675fc275a3a2d ("bpf: offload: report device information for offloaded programs")
Fixes: 52775b33bb507 ("bpf: offload: report device information about offloaded maps")
Reported-by: Yinhao Hu <dddddd@hust.edu.cn>
Reported-by: Kaiyan Mei <M202472210@hust.edu.cn>
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
Closes: https://lore.kernel.org/bpf/f0aa3678-79c9-47ae-9e8c-02a3d1df160a@hust.edu.cn/
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
---
v1 -> v2: fix the commit message and simplify to ternary.
v1: https://lore.kernel.org/bpf/20260408104732.259683-1-jiayuan.chen@linux.dev/
---
kernel/bpf/offload.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c
index 0ad97d643bf49..0d6f5569588c3 100644
--- a/kernel/bpf/offload.c
+++ b/kernel/bpf/offload.c
@@ -435,9 +435,8 @@ static struct ns_common *bpf_prog_offload_info_fill_ns(void *private_data)
if (aux->offload) {
args->info->ifindex = aux->offload->netdev->ifindex;
- net = dev_net(aux->offload->netdev);
- get_net(net);
- ns = &net->ns;
+ net = maybe_get_net(dev_net(aux->offload->netdev));
+ ns = net ? &net->ns : NULL;
} else {
args->info->ifindex = 0;
ns = NULL;
@@ -647,9 +646,8 @@ static struct ns_common *bpf_map_offload_info_fill_ns(void *private_data)
if (args->offmap->netdev) {
args->info->ifindex = args->offmap->netdev->ifindex;
- net = dev_net(args->offmap->netdev);
- get_net(net);
- ns = &net->ns;
+ net = maybe_get_net(dev_net(args->offmap->netdev));
+ ns = net ? &net->ns : NULL;
} else {
args->info->ifindex = 0;
ns = NULL;
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill
2026-04-09 2:37 [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill Jiayuan Chen
@ 2026-04-09 6:24 ` Daniel Borkmann
2026-04-09 20:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Daniel Borkmann @ 2026-04-09 6:24 UTC (permalink / raw)
To: Jiayuan Chen, bpf
Cc: Yinhao Hu, Kaiyan Mei, Dongliang Mu, Alexei Starovoitov,
Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman,
Kumar Kartikeya Dwivedi, Song Liu, Yonghong Song, Jiri Olsa,
Jakub Kicinski, linux-kernel
On 4/9/26 4:37 AM, Jiayuan Chen wrote:
> When querying info for an offloaded BPF map or program,
> bpf_map_offload_info_fill_ns() and bpf_prog_offload_info_fill_ns()
> obtain the network namespace with get_net(dev_net(offmap->netdev)).
> However, the associated netdev's netns may be racing with teardown
> during netns destruction. If the netns refcount has already reached 0,
> get_net() performs a refcount_t increment on 0, triggering:
>
> refcount_t: addition on 0; use-after-free.
>
> Although rtnl_lock and bpf_devs_lock ensure the netdev pointer remains
> valid, they cannot prevent the netns refcount from reaching zero.
>
> Fix this by using maybe_get_net() instead of get_net(). maybe_get_net()
> uses refcount_inc_not_zero() and returns NULL if the refcount is already
> zero, which causes ns_get_path_cb() to fail and the caller to return
> -ENOENT -- the correct behavior when the netns is being destroyed.
>
> Fixes: 675fc275a3a2d ("bpf: offload: report device information for offloaded programs")
> Fixes: 52775b33bb507 ("bpf: offload: report device information about offloaded maps")
> Reported-by: Yinhao Hu <dddddd@hust.edu.cn>
> Reported-by: Kaiyan Mei <M202472210@hust.edu.cn>
> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
> Closes: https://lore.kernel.org/bpf/f0aa3678-79c9-47ae-9e8c-02a3d1df160a@hust.edu.cn/
> Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
> ---
> v1 -> v2: fix the commit message and simplify to ternary.
> v1: https://lore.kernel.org/bpf/20260408104732.259683-1-jiayuan.chen@linux.dev/
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
(should go into bpf-next)
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill
2026-04-09 2:37 [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill Jiayuan Chen
2026-04-09 6:24 ` Daniel Borkmann
@ 2026-04-09 20:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-04-09 20:30 UTC (permalink / raw)
To: Jiayuan Chen
Cc: bpf, dddddd, M202472210, dzm91, ast, daniel, andrii, martin.lau,
eddyz87, memxor, song, yonghong.song, jolsa, kuba, linux-kernel
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:
On Thu, 9 Apr 2026 10:37:32 +0800 you wrote:
> When querying info for an offloaded BPF map or program,
> bpf_map_offload_info_fill_ns() and bpf_prog_offload_info_fill_ns()
> obtain the network namespace with get_net(dev_net(offmap->netdev)).
> However, the associated netdev's netns may be racing with teardown
> during netns destruction. If the netns refcount has already reached 0,
> get_net() performs a refcount_t increment on 0, triggering:
>
> [...]
Here is the summary with links:
- [bpf,v2] bpf: Fix use-after-free in offloaded map/prog info fill
https://git.kernel.org/bpf/bpf-next/c/a0c584fc1805
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-09 20:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09 2:37 [PATCH bpf v2] bpf: Fix use-after-free in offloaded map/prog info fill Jiayuan Chen
2026-04-09 6:24 ` Daniel Borkmann
2026-04-09 20:30 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox