* [PATCH bpf-next] bpf: cleanup aux->used_maps after jit
@ 2025-11-24 15:15 Anton Protopopov
2025-11-24 15:30 ` bot+bpf-ci
2025-11-24 17:50 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 6+ messages in thread
From: Anton Protopopov @ 2025-11-24 15:15 UTC (permalink / raw)
To: bpf; +Cc: Anton Protopopov, Alexei Starovoitov
In commit b4ce5923e780 ("bpf, x86: add new map type: instructions array")
env->used_map was copied to func[i]->aux->used_maps before jitting.
Clear these fields out after jitting such that pointer to freed memory
(env->used_maps is freed later) are not kept in a live data structure.
The reason why the copies were initially added is explained in
https://lore.kernel.org/bpf/20251105090410.1250500-1-a.s.protopopov@gmail.com
Suggested-by: Alexei Starovoitov <ast@kernel.org>
Fixes: b4ce5923e780 ("bpf, x86: add new map type: instructions array")
Signed-off-by: Anton Protopopov <a.s.protopopov@gmail.com>
---
kernel/bpf/verifier.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 2e170be647bd..766695491bc5 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -22266,6 +22266,15 @@ static int jit_subprogs(struct bpf_verifier_env *env)
cond_resched();
}
+ /*
+ * Cleanup func[i]->aux fields which aren't required
+ * or can become invalid in future
+ */
+ for (i = 0; i < env->subprog_cnt; i++) {
+ func[i]->aux->used_maps = NULL;
+ func[i]->aux->used_map_cnt = 0;
+ }
+
/* finally lock prog and jit images for all functions and
* populate kallsysm. Begin at the first subprogram, since
* bpf_prog_load will add the kallsyms for the main program.
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH bpf-next] bpf: cleanup aux->used_maps after jit 2025-11-24 15:15 [PATCH bpf-next] bpf: cleanup aux->used_maps after jit Anton Protopopov @ 2025-11-24 15:30 ` bot+bpf-ci 2025-11-24 15:56 ` Chris Mason 2025-11-24 17:50 ` patchwork-bot+netdevbpf 1 sibling, 1 reply; 6+ messages in thread From: bot+bpf-ci @ 2025-11-24 15:30 UTC (permalink / raw) To: a.s.protopopov, bpf Cc: a.s.protopopov, ast, ast, andrii, daniel, martin.lau, eddyz87, yonghong.song, clm, ihor.solodrai [-- Attachment #1: Type: text/plain, Size: 1308 bytes --] > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 2e170be64..766695491 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -22266,6 +22266,15 @@ static int jit_subprogs(struct bpf_verifier_env *env) > cond_resched(); > } > > + /* > + * Cleanup func[i]->aux fields which aren't required > + * or can become invalid in future > + */ > + for (i = 0; i < env->subprog_cnt; i++) { > + func[i]->aux->used_maps = NULL; > + func[i]->aux->used_map_cnt = 0; > + } > + The patch correctly fixes the use-after-free issue. However, this isn't a bug, but should this have a Cc: stable@vger.kernel.org tag? The bug being fixed affects released kernels where bpf_prog_free_deferred() will call bpf_free_used_maps() on the dangling func[i]->aux->used_maps pointer, potentially causing kfree() to be called on already-freed or invalid memory. > /* finally lock prog and jit images for all functions and > * populate kallsysm. Begin at the first subprogram, since > * bpf_prog_load will add the kallsyms for the main program. --- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/19639286497 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf: cleanup aux->used_maps after jit 2025-11-24 15:30 ` bot+bpf-ci @ 2025-11-24 15:56 ` Chris Mason 2025-11-24 16:55 ` Alexei Starovoitov 0 siblings, 1 reply; 6+ messages in thread From: Chris Mason @ 2025-11-24 15:56 UTC (permalink / raw) To: bot+bpf-ci, a.s.protopopov, bpf Cc: ast, andrii, daniel, martin.lau, eddyz87, yonghong.song, ihor.solodrai On 11/24/25 10:30 AM, bot+bpf-ci@kernel.org wrote: >> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c >> index 2e170be64..766695491 100644 >> --- a/kernel/bpf/verifier.c >> +++ b/kernel/bpf/verifier.c >> @@ -22266,6 +22266,15 @@ static int jit_subprogs(struct bpf_verifier_env *env) >> cond_resched(); >> } >> >> + /* >> + * Cleanup func[i]->aux fields which aren't required >> + * or can become invalid in future >> + */ >> + for (i = 0; i < env->subprog_cnt; i++) { >> + func[i]->aux->used_maps = NULL; >> + func[i]->aux->used_map_cnt = 0; >> + } >> + > > The patch correctly fixes the use-after-free issue. However, this isn't a > bug, but should this have a Cc: stable@vger.kernel.org tag? The bug being > fixed affects released kernels where bpf_prog_free_deferred() will call > bpf_free_used_maps() on the dangling func[i]->aux->used_maps pointer, > potentially causing kfree() to be called on already-freed or invalid memory. I took a pull request for the review prompts this morning that adds Fixes: suggestions and verification. If Alexei or others here would rather have this disabled for the BPF reviews, I'll make them default to off. -chris ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf: cleanup aux->used_maps after jit 2025-11-24 15:56 ` Chris Mason @ 2025-11-24 16:55 ` Alexei Starovoitov 2025-11-24 17:40 ` Chris Mason 0 siblings, 1 reply; 6+ messages in thread From: Alexei Starovoitov @ 2025-11-24 16:55 UTC (permalink / raw) To: Chris Mason Cc: bot+bpf-ci, Anton Protopopov, bpf, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, Martin KaFai Lau, Eduard, Yonghong Song, Ihor Solodrai On Mon, Nov 24, 2025 at 7:56 AM Chris Mason <clm@meta.com> wrote: > > On 11/24/25 10:30 AM, bot+bpf-ci@kernel.org wrote: > >> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > >> index 2e170be64..766695491 100644 > >> --- a/kernel/bpf/verifier.c > >> +++ b/kernel/bpf/verifier.c > >> @@ -22266,6 +22266,15 @@ static int jit_subprogs(struct bpf_verifier_env *env) > >> cond_resched(); > >> } > >> > >> + /* > >> + * Cleanup func[i]->aux fields which aren't required > >> + * or can become invalid in future > >> + */ > >> + for (i = 0; i < env->subprog_cnt; i++) { > >> + func[i]->aux->used_maps = NULL; > >> + func[i]->aux->used_map_cnt = 0; > >> + } > >> + > > > > The patch correctly fixes the use-after-free issue. However, this isn't a > > bug, but should this have a Cc: stable@vger.kernel.org tag? The bug being > > fixed affects released kernels where bpf_prog_free_deferred() will call > > bpf_free_used_maps() on the dangling func[i]->aux->used_maps pointer, > > potentially causing kfree() to be called on already-freed or invalid memory. > > I took a pull request for the review prompts this morning that adds > Fixes: suggestions and verification. If Alexei or others here would > rather have this disabled for the BPF reviews, I'll make them default to > off. Disable it pls. In this case Fixes tag point to a commit in bpf-next, so nothing to backport and, in general, we pretty much never do "cc: stable" unless it's a critical fix. I believe Greg and Sasha don't rely on cc: stable much. Automation will figure things out based on Fixes tag. cc: stable is an additional signal, but not mandatory, and we prefer to avoid extra lines in the commit log when they are not necessary. Fixes tag is a different story. We definitely want it for fixes and related changes even when they're not necessarily a fix. But a generic AI comment "should there be a Fixes tag?" will not be useful. If it can say "Should there be Fixes: sha ("bpf: ..")" that would be nice. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf: cleanup aux->used_maps after jit 2025-11-24 16:55 ` Alexei Starovoitov @ 2025-11-24 17:40 ` Chris Mason 0 siblings, 0 replies; 6+ messages in thread From: Chris Mason @ 2025-11-24 17:40 UTC (permalink / raw) To: Alexei Starovoitov Cc: bot+bpf-ci, Anton Protopopov, bpf, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, Martin KaFai Lau, Eduard, Yonghong Song, Ihor Solodrai On 11/24/25 11:55 AM, Alexei Starovoitov wrote: > On Mon, Nov 24, 2025 at 7:56 AM Chris Mason <clm@meta.com> wrote: >> >> On 11/24/25 10:30 AM, bot+bpf-ci@kernel.org wrote: >>>> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c >>>> index 2e170be64..766695491 100644 >>>> --- a/kernel/bpf/verifier.c >>>> +++ b/kernel/bpf/verifier.c >>>> @@ -22266,6 +22266,15 @@ static int jit_subprogs(struct bpf_verifier_env *env) >>>> cond_resched(); >>>> } >>>> >>>> + /* >>>> + * Cleanup func[i]->aux fields which aren't required >>>> + * or can become invalid in future >>>> + */ >>>> + for (i = 0; i < env->subprog_cnt; i++) { >>>> + func[i]->aux->used_maps = NULL; >>>> + func[i]->aux->used_map_cnt = 0; >>>> + } >>>> + >>> >>> The patch correctly fixes the use-after-free issue. However, this isn't a >>> bug, but should this have a Cc: stable@vger.kernel.org tag? The bug being >>> fixed affects released kernels where bpf_prog_free_deferred() will call >>> bpf_free_used_maps() on the dangling func[i]->aux->used_maps pointer, >>> potentially causing kfree() to be called on already-freed or invalid memory. >> >> I took a pull request for the review prompts this morning that adds >> Fixes: suggestions and verification. If Alexei or others here would >> rather have this disabled for the BPF reviews, I'll make them default to >> off. > > Disable it pls. > In this case Fixes tag point to a commit in bpf-next, > so nothing to backport and, in general, we pretty much > never do "cc: stable" unless it's a critical fix. > I believe Greg and Sasha don't rely on cc: stable much. > Automation will figure things out based on Fixes tag. > cc: stable is an additional signal, but not mandatory, > and we prefer to avoid extra lines in the commit log when they > are not necessary. > > Fixes tag is a different story. We definitely want it for fixes > and related changes even when they're not necessarily a fix. > But a generic AI comment "should there be a Fixes tag?" will not > be useful. If it can say "Should there be Fixes: sha ("bpf: ..")" > that would be nice. Agreed, it shouldn't be hard for AI to suggest the Fixes: tag and the commit being fixed. I'll work on this. I've disabled the Fixes: prompt by default, looks like one more review got in before I turned it off. -chris ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf: cleanup aux->used_maps after jit 2025-11-24 15:15 [PATCH bpf-next] bpf: cleanup aux->used_maps after jit Anton Protopopov 2025-11-24 15:30 ` bot+bpf-ci @ 2025-11-24 17:50 ` patchwork-bot+netdevbpf 1 sibling, 0 replies; 6+ messages in thread From: patchwork-bot+netdevbpf @ 2025-11-24 17:50 UTC (permalink / raw) To: Anton Protopopov; +Cc: bpf, ast Hello: This patch was applied to bpf/bpf-next.git (master) by Alexei Starovoitov <ast@kernel.org>: On Mon, 24 Nov 2025 15:15:15 +0000 you wrote: > In commit b4ce5923e780 ("bpf, x86: add new map type: instructions array") > env->used_map was copied to func[i]->aux->used_maps before jitting. > Clear these fields out after jitting such that pointer to freed memory > (env->used_maps is freed later) are not kept in a live data structure. > > The reason why the copies were initially added is explained in > https://lore.kernel.org/bpf/20251105090410.1250500-1-a.s.protopopov@gmail.com > > [...] Here is the summary with links: - [bpf-next] bpf: cleanup aux->used_maps after jit https://git.kernel.org/bpf/bpf-next/c/fad804002ef3 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] 6+ messages in thread
end of thread, other threads:[~2025-11-24 17:50 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-24 15:15 [PATCH bpf-next] bpf: cleanup aux->used_maps after jit Anton Protopopov 2025-11-24 15:30 ` bot+bpf-ci 2025-11-24 15:56 ` Chris Mason 2025-11-24 16:55 ` Alexei Starovoitov 2025-11-24 17:40 ` Chris Mason 2025-11-24 17:50 ` 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