Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rpmsg: smd: fix memory leak on channel create

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")
Cc: stable@vger.kernel.org
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

authored by

Colin Ian King and committed by
Bjorn Andersson
940c620d f0beb4ba

+5 -2
+5 -2
drivers/rpmsg/qcom_smd.c
··· 1122 1122 1123 1123 channel->edge = edge; 1124 1124 channel->name = kstrdup(name, GFP_KERNEL); 1125 - if (!channel->name) 1126 - return ERR_PTR(-ENOMEM); 1125 + if (!channel->name) { 1126 + ret = -ENOMEM; 1127 + goto free_channel; 1128 + } 1127 1129 1128 1130 spin_lock_init(&channel->tx_lock); 1129 1131 spin_lock_init(&channel->recv_lock); ··· 1175 1173 1176 1174 free_name_and_channel: 1177 1175 kfree(channel->name); 1176 + free_channel: 1178 1177 kfree(channel); 1179 1178 1180 1179 return ERR_PTR(ret);