Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9632c033 authored by Colin Ian King's avatar Colin Ian King Committed by Greg Kroah-Hartman
Browse files

rpmsg: smd: fix memory leak on channel create



commit 940c620d6af8fca7d115de40f19870fba415efac upstream.

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: 53e2822e ("rpmsg: Introduce Qualcomm SMD backend")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 64537fda
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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);