On Mon, Dec 11, 2023 at 07:28:41PM +0800, Hou Tao wrote: > From: Hou Tao <houtao1@xxxxxxxxxx> > > An abnormally big cnt may also be assigned to kprobe_multi.cnt when > attaching multiple kprobes. It will trigger the following warning in > kvmalloc_node(): > > if (unlikely(size > INT_MAX)) { > WARN_ON_ONCE(!(flags & __GFP_NOWARN)); > return NULL; > } > > Fix the warning by using __GFP_NOWARN when invoking kvmalloc_array() in > bpf_kprobe_multi_link_attach(). > > Fixes: 0dcac2725406 ("bpf: Add multi kprobe link") > Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> thanks, jirka > --- > kernel/trace/bpf_trace.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c > index 07b9b5896d6c..64f200890c19 100644 > --- a/kernel/trace/bpf_trace.c > +++ b/kernel/trace/bpf_trace.c > @@ -2605,11 +2605,11 @@ static int copy_user_syms(struct user_syms *us, unsigned long __user *usyms, u32 > int err = -ENOMEM; > unsigned int i; > > - syms = kvmalloc_array(cnt, sizeof(*syms), GFP_KERNEL); > + syms = kvmalloc_array(cnt, sizeof(*syms), GFP_KERNEL | __GFP_NOWARN); > if (!syms) > goto error; > > - buf = kvmalloc_array(cnt, KSYM_NAME_LEN, GFP_KERNEL); > + buf = kvmalloc_array(cnt, KSYM_NAME_LEN, GFP_KERNEL | __GFP_NOWARN); > if (!buf) > goto error; > > @@ -2972,13 +2972,13 @@ int bpf_kprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr > return -EINVAL; > > size = cnt * sizeof(*addrs); > - addrs = kvmalloc_array(cnt, sizeof(*addrs), GFP_KERNEL); > + addrs = kvmalloc_array(cnt, sizeof(*addrs), GFP_KERNEL | __GFP_NOWARN); > if (!addrs) > return -ENOMEM; > > ucookies = u64_to_user_ptr(attr->link_create.kprobe_multi.cookies); > if (ucookies) { > - cookies = kvmalloc_array(cnt, sizeof(*addrs), GFP_KERNEL); > + cookies = kvmalloc_array(cnt, sizeof(*addrs), GFP_KERNEL | __GFP_NOWARN); > if (!cookies) { > err = -ENOMEM; > goto error; > -- > 2.29.2 >