Skip to content

Commit f80e4e9

Browse files
Srinivas Kandagatlagregkh
authored andcommitted
rpmsg: glink: fix rpmsg device leak
commit a53e356 upstream. While testing rpmsg-char interface it was noticed that duplicate sysfs entries are getting created and below warning is noticed. Reason for this is that we are leaking rpmsg device pointer, setting it null without actually unregistering device. Any further attempts to unregister fail because rpdev is NULL, resulting in a leak. Fix this by unregistering rpmsg device before removing its reference from rpmsg channel. sysfs: cannot create duplicate filename '/devices/platform/soc@0/3700000.remot eproc/remoteproc/remoteproc1/3700000.remoteproc:glink-edge/3700000.remoteproc: glink-edge.adsp_apps.-1.-1' [ 114.115347] CPU: 0 UID: 0 PID: 9 Comm: kworker/0:0 Not tainted 6.16.0-rc4 #7 PREEMPT [ 114.115355] Hardware name: Qualcomm Technologies, Inc. Robotics RB3gen2 (DT) [ 114.115358] Workqueue: events qcom_glink_work [ 114.115371] Call trace:8 [ 114.115374] show_stack+0x18/0x24 (C) [ 114.115382] dump_stack_lvl+0x60/0x80 [ 114.115388] dump_stack+0x18/0x24 [ 114.115393] sysfs_warn_dup+0x64/0x80 [ 114.115402] sysfs_create_dir_ns+0xf4/0x120 [ 114.115409] kobject_add_internal+0x98/0x260 [ 114.115416] kobject_add+0x9c/0x108 [ 114.115421] device_add+0xc4/0x7a0 [ 114.115429] rpmsg_register_device+0x5c/0xb0 [ 114.115434] qcom_glink_work+0x4bc/0x820 [ 114.115438] process_one_work+0x148/0x284 [ 114.115446] worker_thread+0x2c4/0x3e0 [ 114.115452] kthread+0x12c/0x204 [ 114.115457] ret_from_fork+0x10/0x20 [ 114.115464] kobject: kobject_add_internal failed for 3700000.remoteproc: glink-edge.adsp_apps.-1.-1 with -EEXIST, don't try to register things with the same name in the same directory. [ 114.250045] rpmsg 3700000.remoteproc:glink-edge.adsp_apps.-1.-1: device_add failed: -17 Fixes: 835764d ("rpmsg: glink: Move the common glink protocol implementation to glink_native.c") Cc: Stable@vger.kernel.org Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Link: https://lore.kernel.org/r/20250822100043.2604794-2-srinivas.kandagatla@oss.qualcomm.com Signed-off-by: Bjorn Andersson <andersson@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 88b71cd commit f80e4e9

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

drivers/rpmsg/qcom_glink_native.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,13 +1399,21 @@ static void qcom_glink_destroy_ept(struct rpmsg_endpoint *ept)
13991399
{
14001400
struct glink_channel *channel = to_glink_channel(ept);
14011401
struct qcom_glink *glink = channel->glink;
1402+
struct rpmsg_channel_info chinfo;
14021403
unsigned long flags;
14031404

14041405
spin_lock_irqsave(&channel->recv_lock, flags);
14051406
channel->ept.cb = NULL;
14061407
spin_unlock_irqrestore(&channel->recv_lock, flags);
14071408

14081409
/* Decouple the potential rpdev from the channel */
1410+
if (channel->rpdev) {
1411+
strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name));
1412+
chinfo.src = RPMSG_ADDR_ANY;
1413+
chinfo.dst = RPMSG_ADDR_ANY;
1414+
1415+
rpmsg_unregister_device(glink->dev, &chinfo);
1416+
}
14091417
channel->rpdev = NULL;
14101418

14111419
qcom_glink_send_close_req(glink, channel);

0 commit comments

Comments
 (0)