2021-04-27 11:31:09

by Florent Revest

[permalink] [raw]
Subject: [PATCH bpf-next] bpf: Lock bpf_trace_printk's tmp buf before it is written to

bpf_trace_printk uses a shared static buffer to hold strings before they
are printed. A recent refactoring moved the locking of that buffer after
it gets filled by mistake.

Fixes: d9c9e4db186a ("bpf: Factorize bpf_trace_printk and bpf_seq_printf")
Reported-by: Rasmus Villemoes <[email protected]>
Signed-off-by: Florent Revest <[email protected]>
---
kernel/trace/bpf_trace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2a8bcdc927c7..0e67d12a8f40 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -391,13 +391,13 @@ BPF_CALL_5(bpf_trace_printk, char *, fmt, u32, fmt_size, u64, arg1,
if (ret < 0)
return ret;

+ raw_spin_lock_irqsave(&trace_printk_lock, flags);
ret = snprintf(buf, sizeof(buf), fmt, BPF_CAST_FMT_ARG(0, args, mod),
BPF_CAST_FMT_ARG(1, args, mod), BPF_CAST_FMT_ARG(2, args, mod));
/* snprintf() will not append null for zero-length strings */
if (ret == 0)
buf[0] = '\0';

- raw_spin_lock_irqsave(&trace_printk_lock, flags);
trace_bpf_trace_printk(buf);
raw_spin_unlock_irqrestore(&trace_printk_lock, flags);

--
2.31.1.498.g6c1eba8ee3d-goog


2021-04-27 15:10:40

by Alexei Starovoitov

[permalink] [raw]
Subject: Re: [PATCH bpf-next] bpf: Lock bpf_trace_printk's tmp buf before it is written to

On Tue, Apr 27, 2021 at 4:30 AM Florent Revest <[email protected]> wrote:
>
> bpf_trace_printk uses a shared static buffer to hold strings before they
> are printed. A recent refactoring moved the locking of that buffer after
> it gets filled by mistake.
>
> Fixes: d9c9e4db186a ("bpf: Factorize bpf_trace_printk and bpf_seq_printf")
> Reported-by: Rasmus Villemoes <[email protected]>
> Signed-off-by: Florent Revest <[email protected]>

Applied.

Pls send v2 of bstr_printf series as soon as possible. Thanks!

2021-04-27 15:32:25

by Alexei Starovoitov

[permalink] [raw]
Subject: Re: [PATCH bpf-next] bpf: Lock bpf_trace_printk's tmp buf before it is written to

On Tue, Apr 27, 2021 at 8:20 AM Florent Revest <[email protected]> wrote:
>
> On Tue, Apr 27, 2021 at 5:08 PM Alexei Starovoitov
> <[email protected]> wrote:
> >
> > On Tue, Apr 27, 2021 at 4:30 AM Florent Revest <[email protected]> wrote:
> > >
> > > bpf_trace_printk uses a shared static buffer to hold strings before they
> > > are printed. A recent refactoring moved the locking of that buffer after
> > > it gets filled by mistake.
> > >
> > > Fixes: d9c9e4db186a ("bpf: Factorize bpf_trace_printk and bpf_seq_printf")
> > > Reported-by: Rasmus Villemoes <[email protected]>
> > > Signed-off-by: Florent Revest <[email protected]>
> >
> > Applied.
>
> Thanks!
>
> > Pls send v2 of bstr_printf series as soon as possible. Thanks!
>
> Sure, I just assumed there would be more reviews on v1. The feedback
> I'll address is only about the commit description wording but I can
> send a v2 today.

Yes. Please.

2021-04-27 15:32:25

by Florent Revest

[permalink] [raw]
Subject: Re: [PATCH bpf-next] bpf: Lock bpf_trace_printk's tmp buf before it is written to

On Tue, Apr 27, 2021 at 5:08 PM Alexei Starovoitov
<[email protected]> wrote:
>
> On Tue, Apr 27, 2021 at 4:30 AM Florent Revest <[email protected]> wrote:
> >
> > bpf_trace_printk uses a shared static buffer to hold strings before they
> > are printed. A recent refactoring moved the locking of that buffer after
> > it gets filled by mistake.
> >
> > Fixes: d9c9e4db186a ("bpf: Factorize bpf_trace_printk and bpf_seq_printf")
> > Reported-by: Rasmus Villemoes <[email protected]>
> > Signed-off-by: Florent Revest <[email protected]>
>
> Applied.

Thanks!

> Pls send v2 of bstr_printf series as soon as possible. Thanks!

Sure, I just assumed there would be more reviews on v1. The feedback
I'll address is only about the commit description wording but I can
send a v2 today.