2023-11-20 09:13:59

by Hao Ge

[permalink] [raw]
Subject: [PATCH] dpll: Fix potential msg memleak in dpll_nl_pin_id_get_doit

We should clean the skb resource if genlmsg_put_reply failed.

Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
Signed-off-by: Hao Ge <[email protected]>
---
drivers/dpll/dpll_netlink.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/dpll/dpll_netlink.c b/drivers/dpll/dpll_netlink.c
index a6dc3997bf5c..54051cd34d43 100644
--- a/drivers/dpll/dpll_netlink.c
+++ b/drivers/dpll/dpll_netlink.c
@@ -1093,9 +1093,10 @@ int dpll_nl_pin_id_get_doit(struct sk_buff *skb, struct genl_info *info)
return -ENOMEM;
hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
DPLL_CMD_PIN_ID_GET);
- if (!hdr)
+ if (!hdr) {
+ nlmsg_free(msg);
return -EMSGSIZE;
-
+ }
pin = dpll_pin_find_from_nlattr(info);
if (!IS_ERR(pin)) {
ret = dpll_msg_add_pin_handle(msg, pin);
--
2.25.1


2023-11-20 16:45:54

by Vadim Fedorenko

[permalink] [raw]
Subject: Re: [PATCH] dpll: Fix potential msg memleak in dpll_nl_pin_id_get_doit

On 20/11/2023 04:07, Hao Ge wrote:
> We should clean the skb resource if genlmsg_put_reply failed.
>
> Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
> Signed-off-by: Hao Ge <[email protected]>
> ---
> drivers/dpll/dpll_netlink.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/dpll/dpll_netlink.c b/drivers/dpll/dpll_netlink.c
> index a6dc3997bf5c..54051cd34d43 100644
> --- a/drivers/dpll/dpll_netlink.c
> +++ b/drivers/dpll/dpll_netlink.c
> @@ -1093,9 +1093,10 @@ int dpll_nl_pin_id_get_doit(struct sk_buff *skb, struct genl_info *info)
> return -ENOMEM;
> hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
> DPLL_CMD_PIN_ID_GET);
> - if (!hdr)
> + if (!hdr) {
> + nlmsg_free(msg);
> return -EMSGSIZE;
> -
> + }
> pin = dpll_pin_find_from_nlattr(info);
> if (!IS_ERR(pin)) {
> ret = dpll_msg_add_pin_handle(msg, pin);

The change seems reasonable, but we have 4 spots of the same problem
in the file, could you please fix all of them in one patch?

pw-bot: cr

2023-11-21 01:37:52

by Hao Ge

[permalink] [raw]
Subject: [PATCH v2] dpll: Fix potential msg memleak when genlmsg_put_reply failed

We should clean the skb resource if genlmsg_put_reply failed.

Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
Signed-off-by: Hao Ge <[email protected]>
---
v1 -> v2: change title due to add some similar fix for some similar cases
---
drivers/dpll/dpll_netlink.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/dpll/dpll_netlink.c b/drivers/dpll/dpll_netlink.c
index a6dc3997bf5c..442a0ebeb953 100644
--- a/drivers/dpll/dpll_netlink.c
+++ b/drivers/dpll/dpll_netlink.c
@@ -1093,9 +1093,10 @@ int dpll_nl_pin_id_get_doit(struct sk_buff *skb, struct genl_info *info)
return -ENOMEM;
hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
DPLL_CMD_PIN_ID_GET);
- if (!hdr)
+ if (!hdr) {
+ nlmsg_free(msg);
return -EMSGSIZE;
-
+ }
pin = dpll_pin_find_from_nlattr(info);
if (!IS_ERR(pin)) {
ret = dpll_msg_add_pin_handle(msg, pin);
@@ -1123,8 +1124,10 @@ int dpll_nl_pin_get_doit(struct sk_buff *skb, struct genl_info *info)
return -ENOMEM;
hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
DPLL_CMD_PIN_GET);
- if (!hdr)
+ if (!hdr) {
+ nlmsg_free(msg);
return -EMSGSIZE;
+ }
ret = dpll_cmd_pin_get_one(msg, pin, info->extack);
if (ret) {
nlmsg_free(msg);
@@ -1256,8 +1259,10 @@ int dpll_nl_device_id_get_doit(struct sk_buff *skb, struct genl_info *info)
return -ENOMEM;
hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
DPLL_CMD_DEVICE_ID_GET);
- if (!hdr)
+ if (!hdr) {
+ nlmsg_free(msg);
return -EMSGSIZE;
+ }

dpll = dpll_device_find_from_nlattr(info);
if (!IS_ERR(dpll)) {
@@ -1284,8 +1289,10 @@ int dpll_nl_device_get_doit(struct sk_buff *skb, struct genl_info *info)
return -ENOMEM;
hdr = genlmsg_put_reply(msg, info, &dpll_nl_family, 0,
DPLL_CMD_DEVICE_GET);
- if (!hdr)
+ if (!hdr) {
+ nlmsg_free(msg);
return -EMSGSIZE;
+ }

ret = dpll_device_get_one(dpll, msg, info->extack);
if (ret) {
--
2.25.1

2023-11-21 11:21:04

by Vadim Fedorenko

[permalink] [raw]
Subject: Re: [PATCH v2] dpll: Fix potential msg memleak when genlmsg_put_reply failed

On 21/11/2023 20:37, Hao Ge wrote:
> We should clean the skb resource if genlmsg_put_reply failed.
>
> Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
> Signed-off-by: Hao Ge <[email protected]>
> ---
> v1 -> v2: change title due to add some similar fix for some similar cases
> ---
> drivers/dpll/dpll_netlink.c | 17 ++++++++++++-----
> 1 file changed, 12 insertions(+), 5 deletions(-)

Thanks!

Reviewed-by: Vadim Fedorenko <[email protected]>

2023-11-22 01:50:39

by patchwork-bot+netdevbpf

[permalink] [raw]
Subject: Re: [PATCH v2] dpll: Fix potential msg memleak when genlmsg_put_reply failed

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:

On Tue, 21 Nov 2023 09:37:09 +0800 you wrote:
> We should clean the skb resource if genlmsg_put_reply failed.
>
> Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
> Signed-off-by: Hao Ge <[email protected]>
> ---
> v1 -> v2: change title due to add some similar fix for some similar cases
>
> [...]

Here is the summary with links:
- [v2] dpll: Fix potential msg memleak when genlmsg_put_reply failed
https://git.kernel.org/netdev/net/c/b6fe6f03716d

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html