fprobe: Check rethook_alloc() return in rethook initialization

Message ID 20221025031209.954836-1-rafaelmendsr@gmail.com
State New
Headers
Series fprobe: Check rethook_alloc() return in rethook initialization |

Commit Message

Rafael Mendonca Oct. 25, 2022, 3:12 a.m. UTC
  Check if fp->rethook succeeded to be allocated. Otherwise, if
rethook_alloc() fails, then we end up dereferencing a NULL pointer in
rethook_add_node().

Fixes: 5b0ab78998e3 ("fprobe: Add exit_handler support")
Signed-off-by: Rafael Mendonca <rafaelmendsr@gmail.com>
---
 kernel/trace/fprobe.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Masami Hiramatsu (Google) Oct. 25, 2022, 8:03 a.m. UTC | #1
On Tue, 25 Oct 2022 00:12:08 -0300
Rafael Mendonca <rafaelmendsr@gmail.com> wrote:

> Check if fp->rethook succeeded to be allocated. Otherwise, if
> rethook_alloc() fails, then we end up dereferencing a NULL pointer in
> rethook_add_node().

Good catch!

Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>

Thank you!

> 
> Fixes: 5b0ab78998e3 ("fprobe: Add exit_handler support")
> Signed-off-by: Rafael Mendonca <rafaelmendsr@gmail.com>
> ---
>  kernel/trace/fprobe.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c
> index aac63ca9c3d1..71614b2a67ff 100644
> --- a/kernel/trace/fprobe.c
> +++ b/kernel/trace/fprobe.c
> @@ -141,6 +141,8 @@ static int fprobe_init_rethook(struct fprobe *fp, int num)
>  		return -E2BIG;
>  
>  	fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler);
> +	if (!fp->rethook)
> +		return -ENOMEM;
>  	for (i = 0; i < size; i++) {
>  		struct fprobe_rethook_node *node;
>  
> -- 
> 2.34.1
>
  
Steven Rostedt Oct. 25, 2022, 11:47 a.m. UTC | #2
On Tue, 25 Oct 2022 17:03:46 +0900
Masami Hiramatsu (Google) <mhiramat@kernel.org> wrote:

> On Tue, 25 Oct 2022 00:12:08 -0300
> Rafael Mendonca <rafaelmendsr@gmail.com> wrote:
> 
> > Check if fp->rethook succeeded to be allocated. Otherwise, if
> > rethook_alloc() fails, then we end up dereferencing a NULL pointer in
> > rethook_add_node().  
> 
> Good catch!
> 
> Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> 

Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Masami, feel free to pull this in.

-- Steve
  

Patch

diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c
index aac63ca9c3d1..71614b2a67ff 100644
--- a/kernel/trace/fprobe.c
+++ b/kernel/trace/fprobe.c
@@ -141,6 +141,8 @@  static int fprobe_init_rethook(struct fprobe *fp, int num)
 		return -E2BIG;
 
 	fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler);
+	if (!fp->rethook)
+		return -ENOMEM;
 	for (i = 0; i < size; i++) {
 		struct fprobe_rethook_node *node;