Message ID | 20250318081648.122523-1-bjorn@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [bpf-next] selftests/bpf: Sanitize pointer prior fclose() | expand |
On Tue, Mar 18, 2025 at 09:16:47AM +0100, Björn Töpel wrote: > From: Björn Töpel <bjorn@rivosinc.com> > > There are scenarios where env.{sub,}test_state->stdout_saved, can be > NULL, e.g. sometimes when the watchdog timeout kicks in, or if the > open_memstream syscall is not available. > > Avoid crashing test_progs by adding an explicit NULL check prior the > fclose() call. > > Signed-off-by: Björn Töpel <bjorn@rivosinc.com> Acked-by: Jiri Olsa <jolsa@kernel.org> jirka > --- > tools/testing/selftests/bpf/test_progs.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c > index d4ec9586b98c..309d9d4a8ace 100644 > --- a/tools/testing/selftests/bpf/test_progs.c > +++ b/tools/testing/selftests/bpf/test_progs.c > @@ -103,12 +103,14 @@ static void stdio_restore(void) > pthread_mutex_lock(&stdout_lock); > > if (env.subtest_state) { > - fclose(env.subtest_state->stdout_saved); > + if (env.subtest_state->stdout_saved) > + fclose(env.subtest_state->stdout_saved); > env.subtest_state->stdout_saved = NULL; nit, setting to NULL could be inside the condition > stdout = env.test_state->stdout_saved; > stderr = env.test_state->stdout_saved; > } else { > - fclose(env.test_state->stdout_saved); > + if (env.test_state->stdout_saved) > + fclose(env.test_state->stdout_saved); > env.test_state->stdout_saved = NULL; > stdout = env.stdout_saved; > stderr = env.stderr_saved; > > base-commit: f3f8649585a445414521a6d5b76f41b51205086d > -- > 2.45.2 > >
diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index d4ec9586b98c..309d9d4a8ace 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -103,12 +103,14 @@ static void stdio_restore(void) pthread_mutex_lock(&stdout_lock); if (env.subtest_state) { - fclose(env.subtest_state->stdout_saved); + if (env.subtest_state->stdout_saved) + fclose(env.subtest_state->stdout_saved); env.subtest_state->stdout_saved = NULL; stdout = env.test_state->stdout_saved; stderr = env.test_state->stdout_saved; } else { - fclose(env.test_state->stdout_saved); + if (env.test_state->stdout_saved) + fclose(env.test_state->stdout_saved); env.test_state->stdout_saved = NULL; stdout = env.stdout_saved; stderr = env.stderr_saved;