Skip to content

Commit

Permalink
fprobe: Fix to allocate entry_data_size buffer with rethook instances
Browse files Browse the repository at this point in the history
commit 6572786 upstream.

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.

Link: https://lore.kernel.org/all/170920576727.107552.638161246679734051.stgit@devnote2/

Reported-by: Jiri Olsa <olsajiri@gmail.com>
Closes: https://lore.kernel.org/all/Zd9eBn2FTQzYyg7L@krava/
Fixes: 4bbd934 ("kprobes: kretprobe scalability improvement")
Cc: stable@vger.kernel.org
Tested-by: Jiri Olsa <olsajiri@gmail.com>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
mhiramat authored and gregkh committed Mar 6, 2024
1 parent 128d045 commit 49d2de8
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions kernel/trace/fprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,25 +189,23 @@ 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;
}

/* 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);

Expand Down

0 comments on commit 49d2de8

Please sign in to comment.