FAILED: patch "[PATCH] net: ipa: fix SMEM state handle leaks in SMP2P init" failed to apply to 5.15-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 96ca1e658ae459276292bd6d971ab5d8c7e0379a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072133-buffalo-cortex-74ca@gregkh' --subject-prefix 'PATCH 5.15.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 96ca1e658ae459276292bd6d971ab5d8c7e0379a Mon Sep 17 00:00:00 2001
From: Haoxiang Li <[email protected]>
Date: Wed, 24 Jun 2026 14:59:55 +0800
Subject: [PATCH] net: ipa: fix SMEM state handle leaks in SMP2P init
ipa_smp2p_init() acquires two Qualcomm SMEM state handles with qcom_smem_state_get(). However, neither the init error paths nor ipa_smp2p_exit() release them.
Release both handles with qcom_smem_state_put() in the init error paths and in ipa_smp2p_exit().
drivers/net/ipa/ipa_smp2p.c +22 -8
@@ -232,19 +232,27 @@ ipa_smp2p_init(struct ipa *ipa, struct platform_device *pdev, bool modem_init) &valid_bit);if (IS_ERR (valid_state))return PTR_ERR (valid_state); -if (valid_bit >=32 )/* BITS_PER_U32 */ -return -EINVAL ; +if (valid_bit >=32 ) {/* BITS_PER_U32 */ + ret = -EINVAL ; + goto err_valid_state_put; + } enabled_state =qcom_smem_state_get (dev,"ipa-clock-enabled" , &enabled_bit); -if (IS_ERR (enabled_state)) -return PTR_ERR (enabled_state); -if (enabled_bit >=32 )/* BITS_PER_U32 */ -return -EINVAL ; +if (IS_ERR (enabled_state)) { + ret =PTR_ERR (enabled_state); + goto err_valid_state_put; + } +if (enabled_bit >=32 ) {/* BITS_PER_U32 */ + ret = -EINVAL ; + goto err_enabled_state_put; + } smp2p =kzalloc_obj (*smp2p); -if (!smp2p) -return -ENOMEM ; +if (!smp2p) { + ret = -ENOMEM ; + goto err_enabled_state_put; + } smp2p->ipa = ipa;
@@ -289,6 +297,10 @@ ipa_smp2p_init(struct ipa *ipa, struct platform_device *pdev, bool modem_init) ipa->smp2p =NULL ;mutex_destroy (&smp2p->mutex);kfree (smp2p); +err_enabled_state_put: +qcom_smem_state_put (enabled_state); +err_valid_state_put: +qcom_smem_state_put (valid_state);return ret; }
@@ -305,6 +317,8 @@ void ipa_smp2p_exit(struct ipa *ipa)ipa_smp2p_power_release (ipa); ipa->smp2p =NULL ;mutex_destroy (&smp2p->mutex); +qcom_smem_state_put (smp2p->enabled_state); +qcom_smem_state_put (smp2p->valid_state);kfree (smp2p); }
Sasha Levin
maintainerPATCH 1/1 net: ipa: fix SMEM state handle leaks in SMP2P init
From: Haoxiang Li <[email protected]>
[ Upstream commit 96ca1e658ae459276292bd6d971ab5d8c7e0379a ]
ipa_smp2p_init() acquires two Qualcomm SMEM state handles with qcom_smem_state_get(). However, neither the init error paths nor ipa_smp2p_exit() release them.
Release both handles with qcom_smem_state_put() in the init error paths and in ipa_smp2p_exit().
--- drivers/net/ipa/ipa_smp2p.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
drivers/net/ipa/ipa_smp2p.c +22 -8
@@ -233,19 +233,27 @@ int ipa_smp2p_init(struct ipa *ipa, bool modem_init) &valid_bit);if (IS_ERR (valid_state))return PTR_ERR (valid_state); -if (valid_bit >=32 )/* BITS_PER_U32 */ -return -EINVAL ; +if (valid_bit >=32 ) {/* BITS_PER_U32 */ + ret = -EINVAL ; + goto err_valid_state_put; + } enabled_state =qcom_smem_state_get (dev,"ipa-clock-enabled" , &enabled_bit); -if (IS_ERR (enabled_state)) -return PTR_ERR (enabled_state); -if (enabled_bit >=32 )/* BITS_PER_U32 */ -return -EINVAL ; +if (IS_ERR (enabled_state)) { + ret =PTR_ERR (enabled_state); + goto err_valid_state_put; + } +if (enabled_bit >=32 ) {/* BITS_PER_U32 */ + ret = -EINVAL ; + goto err_enabled_state_put; + } smp2p =kzalloc (sizeof (*smp2p),GFP_KERNEL ); -if (!smp2p) -return -ENOMEM ; +if (!smp2p) { + ret = -ENOMEM ; + goto err_enabled_state_put; + } smp2p->ipa = ipa;
@@ -290,6 +298,10 @@ int ipa_smp2p_init(struct ipa *ipa, bool modem_init) ipa->smp2p =NULL ;mutex_destroy (&smp2p->mutex);kfree (smp2p); +err_enabled_state_put: +qcom_smem_state_put (enabled_state); +err_valid_state_put: +qcom_smem_state_put (valid_state);return ret; }
@@ -306,6 +318,8 @@ void ipa_smp2p_exit(struct ipa *ipa)ipa_smp2p_power_release (ipa); ipa->smp2p =NULL ;mutex_destroy (&smp2p->mutex); +qcom_smem_state_put (smp2p->enabled_state); +qcom_smem_state_put (smp2p->valid_state);kfree (smp2p); }
Signature · 1 line
2.53.0