rpmsg: fix memory leak on channel
PATCH 1/1 rpmsg: fix memory leak on channel
From: Colin Ian King <[email protected]>
Currently a failed allocation of channel->name leads to an immediate return without freeing channel. Fix this by setting ret to -ENOMEM and jumping to an exit path that kfree's channel.
Detected by CoverityScan, CID#1473692 ("Resource Leak")
Fixes 53e2822e56c7 ("rpmsg: Introduce Qualcomm SMD backend")
Signed-off-by Colin Ian King <[email protected]>
--- drivers/rpmsg/qcom_smd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/rpmsg/qcom_smd.c +5 -2
@@ -1122,8 +1122,10 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed channel->edge = edge; channel->name =kstrdup (name,GFP_KERNEL ); -if (!channel->name) -return ERR_PTR (-ENOMEM ); +if (!channel->name) { + ret = -ENOMEM ; + goto free_channel; + }spin_lock_init (&channel->tx_lock);spin_lock_init (&channel->recv_lock);
@@ -1173,6 +1175,7 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed free_name_and_channel:kfree (channel->name); +free_channel:kfree (channel);return ERR_PTR (ret);
Signature · 1 line
2.17.1
Quoted 10 lines · Colin King
From: Colin Ian King <[email protected]>
Currently a failed allocation of
channel->nameleads to an immediate return without freeing channel. Fix this by setting ret to-ENOMEMand jumping to an exit path that kfree's channel.Detected by CoverityScan, CID#1473692 ("Resource Leak")
Fixes 53e2822e56c7 ("rpmsg: Introduce Qualcomm SMD backend")Signed-off-by Colin Ian King <[email protected]>
Added Cc: stable and applied.
Thanks,
Bjorn
Quoted 32 lines
--- drivers/rpmsg/qcom_smd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)drivers/rpmsg/qcom_smd.c +5
-2@@ -1122,8 +1122,10 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed channel->edge = edge; channel->name =kstrdup (name,GFP_KERNEL ); -if (!channel->name) -return ERR_PTR (-ENOMEM ); +if (!channel->name) { + ret = -ENOMEM ; + goto free_channel; + }spin_lock_init (&channel->tx_lock);spin_lock_init (&channel->recv_lock);@@ -1173,6 +1175,7 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed free_name_and_channel:kfree (channel->name); +free_channel:kfree (channel);return ERR_PTR (ret);Signature · 1 line
2.17.1