Message ID | 20221110090810.11225-1-shangxiaojing@huawei.com |
---|---|
State | Accepted |
Headers | show |
Series | rtc: class: Fix potential memleak in devm_rtc_allocate_device() | expand |
On 2022/11/10 17:08, Shang XiaoJing wrote: > devm_rtc_allocate_device() will alloc a rtc_device first, and then run > dev_set_name(). If dev_set_name() failed, the rtc_device will memleak. > Move devm_add_action_or_reset() in front of dev_set_name() to prevent > memleak. > > unreferenced object 0xffff888110a53000 (size 2048): > comm "python3", pid 470, jiffies 4296078308 (age 58.882s) > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 08 30 a5 10 81 88 ff ff .........0...... > 08 30 a5 10 81 88 ff ff 00 00 00 00 00 00 00 00 .0.............. > backtrace: > [<000000004aac0364>] kmalloc_trace+0x21/0x110 > [<000000000ff02202>] devm_rtc_allocate_device+0xd4/0x400 > [<000000001bdf5639>] devm_rtc_device_register+0x1a/0x80 > [<00000000351bf81c>] rx4581_probe+0xdd/0x110 [rtc_rx4581] > [<00000000f0eba0ae>] spi_probe+0xde/0x130 > [<00000000bff89ee8>] really_probe+0x175/0x3f0 > [<00000000128e8d84>] __driver_probe_device+0xe6/0x170 > [<00000000ee5bf913>] device_driver_attach+0x32/0x80 > [<00000000f3f28f92>] bind_store+0x10b/0x1a0 > [<000000009ff812d8>] drv_attr_store+0x49/0x70 > [<000000008139c323>] sysfs_kf_write+0x8d/0xb0 > [<00000000b6146e01>] kernfs_fop_write_iter+0x214/0x2d0 > [<00000000ecbe3895>] vfs_write+0x61a/0x7d0 > [<00000000aa2196ea>] ksys_write+0xc8/0x190 > [<0000000046a600f5>] do_syscall_64+0x37/0x90 > [<00000000541a336f>] entry_SYSCALL_64_after_hwframe+0x63/0xcd > > Fixes: 24d23181e43d ("rtc: class: check return value when calling dev_set_name()") > Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com> > --- > drivers/rtc/class.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c > index e48223c00c67..e5b7b48cffac 100644 > --- a/drivers/rtc/class.c > +++ b/drivers/rtc/class.c > @@ -374,11 +374,11 @@ struct rtc_device *devm_rtc_allocate_device(struct device *dev) > > rtc->id = id; > rtc->dev.parent = dev; > - err = dev_set_name(&rtc->dev, "rtc%d", id); > + err = devm_add_action_or_reset(dev, devm_rtc_release_device, rtc); > if (err) > return ERR_PTR(err); > > - err = devm_add_action_or_reset(dev, devm_rtc_release_device, rtc); > + err = dev_set_name(&rtc->dev, "rtc%d", id); > if (err) > return ERR_PTR(err); Looks good to me. Reviewed-by: Yang Yingliang <yangyingliang@huawei.com> >
On Thu, 10 Nov 2022 17:08:10 +0800, Shang XiaoJing wrote: > devm_rtc_allocate_device() will alloc a rtc_device first, and then run > dev_set_name(). If dev_set_name() failed, the rtc_device will memleak. > Move devm_add_action_or_reset() in front of dev_set_name() to prevent > memleak. > > unreferenced object 0xffff888110a53000 (size 2048): > comm "python3", pid 470, jiffies 4296078308 (age 58.882s) > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 08 30 a5 10 81 88 ff ff .........0...... > 08 30 a5 10 81 88 ff ff 00 00 00 00 00 00 00 00 .0.............. > backtrace: > [<000000004aac0364>] kmalloc_trace+0x21/0x110 > [<000000000ff02202>] devm_rtc_allocate_device+0xd4/0x400 > [<000000001bdf5639>] devm_rtc_device_register+0x1a/0x80 > [<00000000351bf81c>] rx4581_probe+0xdd/0x110 [rtc_rx4581] > [<00000000f0eba0ae>] spi_probe+0xde/0x130 > [<00000000bff89ee8>] really_probe+0x175/0x3f0 > [<00000000128e8d84>] __driver_probe_device+0xe6/0x170 > [<00000000ee5bf913>] device_driver_attach+0x32/0x80 > [<00000000f3f28f92>] bind_store+0x10b/0x1a0 > [<000000009ff812d8>] drv_attr_store+0x49/0x70 > [<000000008139c323>] sysfs_kf_write+0x8d/0xb0 > [<00000000b6146e01>] kernfs_fop_write_iter+0x214/0x2d0 > [<00000000ecbe3895>] vfs_write+0x61a/0x7d0 > [<00000000aa2196ea>] ksys_write+0xc8/0x190 > [<0000000046a600f5>] do_syscall_64+0x37/0x90 > [<00000000541a336f>] entry_SYSCALL_64_after_hwframe+0x63/0xcd > > [...] Applied, thanks! [1/1] rtc: class: Fix potential memleak in devm_rtc_allocate_device() commit: 17c98ae4eb03f369a9050611d8b4a78925c35465 Best regards,
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c index e48223c00c67..e5b7b48cffac 100644 --- a/drivers/rtc/class.c +++ b/drivers/rtc/class.c @@ -374,11 +374,11 @@ struct rtc_device *devm_rtc_allocate_device(struct device *dev) rtc->id = id; rtc->dev.parent = dev; - err = dev_set_name(&rtc->dev, "rtc%d", id); + err = devm_add_action_or_reset(dev, devm_rtc_release_device, rtc); if (err) return ERR_PTR(err); - err = devm_add_action_or_reset(dev, devm_rtc_release_device, rtc); + err = dev_set_name(&rtc->dev, "rtc%d", id); if (err) return ERR_PTR(err);
devm_rtc_allocate_device() will alloc a rtc_device first, and then run dev_set_name(). If dev_set_name() failed, the rtc_device will memleak. Move devm_add_action_or_reset() in front of dev_set_name() to prevent memleak. unreferenced object 0xffff888110a53000 (size 2048): comm "python3", pid 470, jiffies 4296078308 (age 58.882s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 08 30 a5 10 81 88 ff ff .........0...... 08 30 a5 10 81 88 ff ff 00 00 00 00 00 00 00 00 .0.............. backtrace: [<000000004aac0364>] kmalloc_trace+0x21/0x110 [<000000000ff02202>] devm_rtc_allocate_device+0xd4/0x400 [<000000001bdf5639>] devm_rtc_device_register+0x1a/0x80 [<00000000351bf81c>] rx4581_probe+0xdd/0x110 [rtc_rx4581] [<00000000f0eba0ae>] spi_probe+0xde/0x130 [<00000000bff89ee8>] really_probe+0x175/0x3f0 [<00000000128e8d84>] __driver_probe_device+0xe6/0x170 [<00000000ee5bf913>] device_driver_attach+0x32/0x80 [<00000000f3f28f92>] bind_store+0x10b/0x1a0 [<000000009ff812d8>] drv_attr_store+0x49/0x70 [<000000008139c323>] sysfs_kf_write+0x8d/0xb0 [<00000000b6146e01>] kernfs_fop_write_iter+0x214/0x2d0 [<00000000ecbe3895>] vfs_write+0x61a/0x7d0 [<00000000aa2196ea>] ksys_write+0xc8/0x190 [<0000000046a600f5>] do_syscall_64+0x37/0x90 [<00000000541a336f>] entry_SYSCALL_64_after_hwframe+0x63/0xcd Fixes: 24d23181e43d ("rtc: class: check return value when calling dev_set_name()") Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com> --- drivers/rtc/class.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)