[PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()

Zilin Guan posted 1 patch 1 month, 1 week ago
drivers/net/wwan/iosm/iosm_ipc_mux.c | 6 ++++++
1 file changed, 6 insertions(+)
[PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Zilin Guan 1 month, 1 week ago
Commit 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
allocated memory for pp_qlt in ipc_mux_init() but did not free it in
ipc_mux_deinit(). This results in a memory leak when the driver is
unloaded.

Free the allocated memory in ipc_mux_deinit() to fix the leak.

Fixes: 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
Co-developed-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
---
 drivers/net/wwan/iosm/iosm_ipc_mux.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.c b/drivers/net/wwan/iosm/iosm_ipc_mux.c
index fc928b298a98..b846889fcb09 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mux.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
@@ -456,6 +456,7 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
 	struct sk_buff_head *free_list;
 	union mux_msg mux_msg;
 	struct sk_buff *skb;
+	int i;
 
 	if (!ipc_mux->initialized)
 		return;
@@ -479,5 +480,10 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
 		ipc_mux->channel->dl_pipe.is_open = false;
 	}
 
+	if (ipc_mux->protocol != MUX_LITE) {
+		for (i = 0; i < IPC_MEM_MUX_IP_SESSION_ENTRIES; i++)
+			kfree(ipc_mux->ul_adb.pp_qlt[i]);
+	}
+
 	kfree(ipc_mux);
 }
-- 
2.34.1
Re: [PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Markus Elfring 1 month, 1 week ago
…
> +++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
> @@ -456,6 +456,7 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
>  	struct sk_buff_head *free_list;
>  	union mux_msg mux_msg;
>  	struct sk_buff *skb;
> +	int i;
…

May this variable be defined in the loop header instead?

Regards,
Markus
Re: [PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Zilin Guan 1 month, 1 week ago
On Tue, Dec 30, 2025 at 10:15:05AM+0100, Markus Elfring wrote:
> …
> > +++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
> > @@ -456,6 +456,7 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
> >  	struct sk_buff_head *free_list;
> >  	union mux_msg mux_msg;
> >  	struct sk_buff *skb;
> > +	int i;
> …
> 
> May this variable be defined in the loop header instead?
> 
> Regards,
> Markus

Thanks for the suggestion.

I would prefer to keep the declaration at the top of the block to maintain 
consistency with the existing coding style of this function and to keep 
the patch focused strictly on the fix.

Regards,
Zilin Guan
Re: [PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Markus Elfring 1 month, 1 week ago
>> …
>>> +++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
>>> @@ -456,6 +456,7 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
>>>  	struct sk_buff_head *free_list;
>>>  	union mux_msg mux_msg;
>>>  	struct sk_buff *skb;
>>> +	int i;
>> …
>>
>> May this variable be defined in the loop header instead?
…
> Thanks for the suggestion.
> 
> I would prefer to keep the declaration at the top of the block

Do you tend to interpret such information still as the beginning
of the function implementation?


>                                                                to maintain 
> consistency with the existing coding style of this function and to keep 
> the patch focused strictly on the fix.

Would the mentioned variable be relevant only for an additional if branch?

Regards,
Markus
Re: [PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Zilin Guan 1 month, 1 week ago
On Tue, Dec 30, 2025 at 10:42:22AM+0100, Markus Elfring wrote:
> Do you tend to interpret such information still as the beginning
> of the function implementation?
> ...
> Would the mentioned variable be relevant only for an additional if branch?

I prefer to strictly follow the existing coding style of the current file, 
where all local variables are declared at the top of the function. I do 
not wish to mix different declaration styles in this patch.

If you believe the file should be converted to C99 style, that would be 
better handled in a separate cleanup patch for the entire file, rather 
than mixing it into this bug fix.

Regards,
Zilin Guan
Re: [PATCH net] net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
Posted by Loic Poulain 1 month, 1 week ago
On Tue, Dec 30, 2025 at 8:19 AM Zilin Guan <zilin@seu.edu.cn> wrote:
>
> Commit 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
> allocated memory for pp_qlt in ipc_mux_init() but did not free it in
> ipc_mux_deinit(). This results in a memory leak when the driver is
> unloaded.
>
> Free the allocated memory in ipc_mux_deinit() to fix the leak.
>
> Fixes: 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
> Co-developed-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
> Signed-off-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
> Signed-off-by: Zilin Guan <zilin@seu.edu.cn>

Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>

> ---
>  drivers/net/wwan/iosm/iosm_ipc_mux.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.c b/drivers/net/wwan/iosm/iosm_ipc_mux.c
> index fc928b298a98..b846889fcb09 100644
> --- a/drivers/net/wwan/iosm/iosm_ipc_mux.c
> +++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
> @@ -456,6 +456,7 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
>         struct sk_buff_head *free_list;
>         union mux_msg mux_msg;
>         struct sk_buff *skb;
> +       int i;
>
>         if (!ipc_mux->initialized)
>                 return;
> @@ -479,5 +480,10 @@ void ipc_mux_deinit(struct iosm_mux *ipc_mux)
>                 ipc_mux->channel->dl_pipe.is_open = false;
>         }
>
> +       if (ipc_mux->protocol != MUX_LITE) {
> +               for (i = 0; i < IPC_MEM_MUX_IP_SESSION_ENTRIES; i++)
> +                       kfree(ipc_mux->ul_adb.pp_qlt[i]);
> +       }
> +
>         kfree(ipc_mux);
>  }
> --
> 2.34.1
>