drivers/net/wwan/iosm/iosm_ipc_mux.c | 6 ++++++ 1 file changed, 6 insertions(+)
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
… > +++ 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
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
>> … >>> +++ 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
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
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
>
© 2016 - 2026 Red Hat, Inc.