Skip to content

Commit 834a778

Browse files
Srinivas KandagatlaUlrich Hecht
authored andcommitted
rpmsg: glink: fix rpmsg device leak
commit a53e356df548f6b0e82529ef3cc6070f42622189 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> Signed-off-by: Ulrich Hecht <uli@kernel.org>
1 parent 584debc commit 834a778

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
@@ -1244,13 +1244,21 @@ static void qcom_glink_destroy_ept(struct rpmsg_endpoint *ept)
12441244
{
12451245
struct glink_channel *channel = to_glink_channel(ept);
12461246
struct qcom_glink *glink = channel->glink;
1247+
struct rpmsg_channel_info chinfo;
12471248
unsigned long flags;
12481249

12491250
spin_lock_irqsave(&channel->recv_lock, flags);
12501251
channel->ept.cb = NULL;
12511252
spin_unlock_irqrestore(&channel->recv_lock, flags);
12521253

12531254
/* Decouple the potential rpdev from the channel */
1255+
if (channel->rpdev) {
1256+
strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name));
1257+
chinfo.src = RPMSG_ADDR_ANY;
1258+
chinfo.dst = RPMSG_ADDR_ANY;
1259+
1260+
rpmsg_unregister_device(glink->dev, &chinfo);
1261+
}
12541262
channel->rpdev = NULL;
12551263

12561264
qcom_glink_send_close_req(glink, channel);

0 commit comments

Comments
 (0)