On Thu, 29 Feb 2024 22:58:54 +0100 Jiri Olsa <olsaj...@gmail.com> wrote:
> On Thu, Feb 29, 2024 at 08:22:47PM +0900, Masami Hiramatsu (Google) wrote: > > From: Masami Hiramatsu (Google) <mhira...@kernel.org> > > > > Fix to allocate fprobe::entry_data_size buffer with rethook instances. > > If fprobe doesn't allocate entry_data_size buffer for each rethook instance, > > fprobe entry handler can cause a buffer overrun when storing entry data in > > entry handler. > > > > Reported-by: Jiri Olsa <olsaj...@gmail.com> > > Tested-by: Jiri Olsa <olsaj...@gmail.com> Thanks for testing! Let me pick this to probe/fixes. Thank you, > > thanks, > jirka > > > Fixes: 4bbd93455659 ("kprobes: kretprobe scalability improvement") > > Cc: sta...@vger.kernel.org > > Signed-off-by: Masami Hiramatsu (Google) <mhira...@kernel.org> > > --- > > kernel/trace/fprobe.c | 14 ++++++-------- > > 1 file changed, 6 insertions(+), 8 deletions(-) > > > > diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c > > index 6cd2a4e3afb8..9ff018245840 100644 > > --- a/kernel/trace/fprobe.c > > +++ b/kernel/trace/fprobe.c > > @@ -189,9 +189,6 @@ static int fprobe_init_rethook(struct fprobe *fp, int > > num) > > { > > int size; > > > > - if (num <= 0) > > - return -EINVAL; > > - > > if (!fp->exit_handler) { > > fp->rethook = NULL; > > return 0; > > @@ -199,15 +196,16 @@ static int fprobe_init_rethook(struct fprobe *fp, int > > num) > > > > /* Initialize rethook if needed */ > > if (fp->nr_maxactive) > > - size = fp->nr_maxactive; > > + num = fp->nr_maxactive; > > else > > - size = num * num_possible_cpus() * 2; > > - if (size <= 0) > > + num *= num_possible_cpus() * 2; > > + if (num <= 0) > > return -EINVAL; > > > > + size = sizeof(struct fprobe_rethook_node) + fp->entry_data_size; > > + > > /* Initialize rethook */ > > - fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler, > > - sizeof(struct fprobe_rethook_node), size); > > + fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler, size, num); > > if (IS_ERR(fp->rethook)) > > return PTR_ERR(fp->rethook); > > > > -- Masami Hiramatsu (Google) <mhira...@kernel.org>