2022-11-10 11:03:07

by Yi Yang

[permalink] [raw]
Subject: [PATCH] fix a potential memleak in rethook_alloc()

In rethook_alloc(), the variable rh is not freed or passed out
if handler is NULL, which could lead to a memleak, fix it.

Fixes: 54ecbe6f1ed5 ("rethook: Add a generic return hook")
Signed-off-by: Yi Yang <[email protected]>
---
kernel/trace/rethook.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/rethook.c b/kernel/trace/rethook.c
index 01df98db2fbe..f50aebc7698e 100644
--- a/kernel/trace/rethook.c
+++ b/kernel/trace/rethook.c
@@ -91,8 +91,10 @@ struct rethook *rethook_alloc(void *data, rethook_handler_t handler, gfp_t gfp,
{
struct rethook *rh = kzalloc(sizeof(struct rethook), GFP_KERNEL);

- if (!rh || !handler)
+ if (!rh || !handler) {
+ kfree(rh);
return NULL;
+ }

rh->data = data;
rh->handler = handler;
--
2.17.1



2022-11-11 01:07:55

by Masami Hiramatsu

[permalink] [raw]
Subject: Re: [PATCH] fix a potential memleak in rethook_alloc()

On Thu, 10 Nov 2022 18:44:38 +0800
Yi Yang <[email protected]> wrote:

> In rethook_alloc(), the variable rh is not freed or passed out
> if handler is NULL, which could lead to a memleak, fix it.
>

Oops, good catch!

Acked-by: Masami Hiramatsu (Google) <[email protected]>

Thank you!

> Fixes: 54ecbe6f1ed5 ("rethook: Add a generic return hook")
> Signed-off-by: Yi Yang <[email protected]>
> ---
> kernel/trace/rethook.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/trace/rethook.c b/kernel/trace/rethook.c
> index 01df98db2fbe..f50aebc7698e 100644
> --- a/kernel/trace/rethook.c
> +++ b/kernel/trace/rethook.c
> @@ -91,8 +91,10 @@ struct rethook *rethook_alloc(void *data, rethook_handler_t handler, gfp_t gfp,
> {
> struct rethook *rh = kzalloc(sizeof(struct rethook), GFP_KERNEL);
>
> - if (!rh || !handler)
> + if (!rh || !handler) {
> + kfree(rh);
> return NULL;
> + }
>
> rh->data = data;
> rh->handler = handler;
> --
> 2.17.1
>


--
Masami Hiramatsu (Google) <[email protected]>