Skip to content

Commit a53e356

Browse files
Srinivas Kandagatlaandersson
authored andcommitted
rpmsg: glink: fix rpmsg device leak
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 ColinIanKing#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>
1 parent 3a86608 commit a53e356

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

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)