Message ID | 20211108083840.4627-6-laoar.shao@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | task comm cleanups | expand |
Context | Check | Description |
---|---|---|
bpf/vmtest-bpf | success | VM_Test |
bpf/vmtest-bpf-PR | success | PR summary |
bpf/vmtest-bpf-next | success | VM_Test |
bpf/vmtest-bpf-next-PR | success | PR summary |
netdev/tree_selection | success | Not a local patch, async |
On Mon, Nov 8, 2021 at 12:39 AM Yafang Shao <laoar.shao@gmail.com> wrote: > > bpf_probe_read_kernel_str() will add a nul terminator to the dst, then > we don't care about if the dst size is big enough. This patch also > replaces the hard-coded 16 with TASK_COMM_LEN to make it adopt to task > comm size change. > > Signed-off-by: Yafang Shao <laoar.shao@gmail.com> > Reviewed-by: Kees Cook <keescook@chromium.org> > Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> > Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com> > Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com> > Cc: Michal Miroslaw <mirq-linux@rere.qmqm.pl> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Matthew Wilcox <willy@infradead.org> > Cc: David Hildenbrand <david@redhat.com> > Cc: Al Viro <viro@zeniv.linux.org.uk> > Cc: Kees Cook <keescook@chromium.org> > Cc: Petr Mladek <pmladek@suse.com> > --- LGTM. Acked-by: Andrii Nakryiko <andrii@kernel.org> > samples/bpf/offwaketime_kern.c | 4 ++-- > samples/bpf/test_overhead_kprobe_kern.c | 11 ++++++----- > samples/bpf/test_overhead_tp_kern.c | 5 +++-- > 3 files changed, 11 insertions(+), 9 deletions(-) > [...]
On 08.11.21 09:38, Yafang Shao wrote: > bpf_probe_read_kernel_str() will add a nul terminator to the dst, then > we don't care about if the dst size is big enough. This patch also > replaces the hard-coded 16 with TASK_COMM_LEN to make it adopt to task > comm size change. > > Signed-off-by: Yafang Shao <laoar.shao@gmail.com> > Reviewed-by: Kees Cook <keescook@chromium.org> > Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> > Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com> > Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com> > Cc: Michal Miroslaw <mirq-linux@rere.qmqm.pl> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Matthew Wilcox <willy@infradead.org> > Cc: David Hildenbrand <david@redhat.com> > Cc: Al Viro <viro@zeniv.linux.org.uk> > Cc: Kees Cook <keescook@chromium.org> > Cc: Petr Mladek <pmladek@suse.com> > --- > samples/bpf/offwaketime_kern.c | 4 ++-- > samples/bpf/test_overhead_kprobe_kern.c | 11 ++++++----- > samples/bpf/test_overhead_tp_kern.c | 5 +++-- > 3 files changed, 11 insertions(+), 9 deletions(-) > > diff --git a/samples/bpf/offwaketime_kern.c b/samples/bpf/offwaketime_kern.c > index 4866afd054da..eb4d94742e6b 100644 > --- a/samples/bpf/offwaketime_kern.c > +++ b/samples/bpf/offwaketime_kern.c > @@ -113,11 +113,11 @@ static inline int update_counts(void *ctx, u32 pid, u64 delta) > /* taken from /sys/kernel/debug/tracing/events/sched/sched_switch/format */ > struct sched_switch_args { > unsigned long long pad; > - char prev_comm[16]; > + char prev_comm[TASK_COMM_LEN]; > int prev_pid; > int prev_prio; > long long prev_state; > - char next_comm[16]; > + char next_comm[TASK_COMM_LEN]; > int next_pid; > int next_prio; > }; > diff --git a/samples/bpf/test_overhead_kprobe_kern.c b/samples/bpf/test_overhead_kprobe_kern.c > index f6d593e47037..8fdd2c9c56b2 100644 > --- a/samples/bpf/test_overhead_kprobe_kern.c > +++ b/samples/bpf/test_overhead_kprobe_kern.c > @@ -6,6 +6,7 @@ > */ > #include <linux/version.h> > #include <linux/ptrace.h> > +#include <linux/sched.h> > #include <uapi/linux/bpf.h> > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > @@ -22,17 +23,17 @@ int prog(struct pt_regs *ctx) > { > struct signal_struct *signal; > struct task_struct *tsk; > - char oldcomm[16] = {}; > - char newcomm[16] = {}; > + char oldcomm[TASK_COMM_LEN] = {}; > + char newcomm[TASK_COMM_LEN] = {}; > u16 oom_score_adj; > u32 pid; > > tsk = (void *)PT_REGS_PARM1(ctx); > > pid = _(tsk->pid); > - bpf_probe_read_kernel(oldcomm, sizeof(oldcomm), &tsk->comm); > - bpf_probe_read_kernel(newcomm, sizeof(newcomm), > - (void *)PT_REGS_PARM2(ctx)); > + bpf_probe_read_kernel_str(oldcomm, sizeof(oldcomm), &tsk->comm); > + bpf_probe_read_kernel_str(newcomm, sizeof(newcomm), > + (void *)PT_REGS_PARM2(ctx)); It's a shame we have to do a manual copy here ... Changes LGTM Reviewed-by: David Hildenbrand <david@redhat.com>
diff --git a/samples/bpf/offwaketime_kern.c b/samples/bpf/offwaketime_kern.c index 4866afd054da..eb4d94742e6b 100644 --- a/samples/bpf/offwaketime_kern.c +++ b/samples/bpf/offwaketime_kern.c @@ -113,11 +113,11 @@ static inline int update_counts(void *ctx, u32 pid, u64 delta) /* taken from /sys/kernel/debug/tracing/events/sched/sched_switch/format */ struct sched_switch_args { unsigned long long pad; - char prev_comm[16]; + char prev_comm[TASK_COMM_LEN]; int prev_pid; int prev_prio; long long prev_state; - char next_comm[16]; + char next_comm[TASK_COMM_LEN]; int next_pid; int next_prio; }; diff --git a/samples/bpf/test_overhead_kprobe_kern.c b/samples/bpf/test_overhead_kprobe_kern.c index f6d593e47037..8fdd2c9c56b2 100644 --- a/samples/bpf/test_overhead_kprobe_kern.c +++ b/samples/bpf/test_overhead_kprobe_kern.c @@ -6,6 +6,7 @@ */ #include <linux/version.h> #include <linux/ptrace.h> +#include <linux/sched.h> #include <uapi/linux/bpf.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> @@ -22,17 +23,17 @@ int prog(struct pt_regs *ctx) { struct signal_struct *signal; struct task_struct *tsk; - char oldcomm[16] = {}; - char newcomm[16] = {}; + char oldcomm[TASK_COMM_LEN] = {}; + char newcomm[TASK_COMM_LEN] = {}; u16 oom_score_adj; u32 pid; tsk = (void *)PT_REGS_PARM1(ctx); pid = _(tsk->pid); - bpf_probe_read_kernel(oldcomm, sizeof(oldcomm), &tsk->comm); - bpf_probe_read_kernel(newcomm, sizeof(newcomm), - (void *)PT_REGS_PARM2(ctx)); + bpf_probe_read_kernel_str(oldcomm, sizeof(oldcomm), &tsk->comm); + bpf_probe_read_kernel_str(newcomm, sizeof(newcomm), + (void *)PT_REGS_PARM2(ctx)); signal = _(tsk->signal); oom_score_adj = _(signal->oom_score_adj); return 0; diff --git a/samples/bpf/test_overhead_tp_kern.c b/samples/bpf/test_overhead_tp_kern.c index eaa32693f8fc..80edadacb692 100644 --- a/samples/bpf/test_overhead_tp_kern.c +++ b/samples/bpf/test_overhead_tp_kern.c @@ -4,6 +4,7 @@ * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. */ +#include <linux/sched.h> #include <uapi/linux/bpf.h> #include <bpf/bpf_helpers.h> @@ -11,8 +12,8 @@ struct task_rename { __u64 pad; __u32 pid; - char oldcomm[16]; - char newcomm[16]; + char oldcomm[TASK_COMM_LEN]; + char newcomm[TASK_COMM_LEN]; __u16 oom_score_adj; }; SEC("tracepoint/task/task_rename")