From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Yang Yingliang <yangyingliang@huawei.com>
Cc: linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org,
a.zummo@towertech.it
Subject: Re: [PATCH 2/2] rtc: class: return error code when cdev_device_add() failed
Date: Mon, 11 Oct 2021 10:36:15 +0200 [thread overview]
Message-ID: <YWP3f1wPbim8VG6K@piout.net> (raw)
In-Reply-To: <20211011080302.1982894-2-yangyingliang@huawei.com>
On 11/10/2021 16:03:02+0800, Yang Yingliang wrote:
> I got a null-ptr-deref report when doing fault injection test:
>
> general protection fault, probably for non-canonical address 0xdffffc0000000022: 0000 [#1] SMP KASAN PTI
> KASAN: null-ptr-deref in range [0x0000000000000110-0x0000000000000117]
> CPU: 1 PID: 1028 Comm: 33 Not tainted 5.15.0-rc3-00111-gf5dad42ed4fe-dirty #481 2a70b3e6ca240b8638beac7ef491cce6183bbec7
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
> RIP: 0010:device_del+0x132/0xdc0
> Code: 48 c1 ea 03 80 3c 02 00 0f 85 4f 0c 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b 7b 48 4d 8d a7 10 01 00 00 4c 89 e2 48 c1 ea 03 <0f> b6 04 02 84 c0 74 06 0f 8e 7f 0a 00 00 45 0f b6 b7 10 01 00 00
> RSP: 0018:ffffc90002e876b8 EFLAGS: 00010206
> RAX: dffffc0000000000 RBX: ffff88801eb84000 RCX: ffffffff97227644
> RDX: 0000000000000022 RSI: ffff8880146a0000 RDI: 0000000000000002
> RBP: ffff88801eb84120 R08: fffffbfff349a60d R09: fffffbfff349a60d
> R10: ffffc90002e876b8 R11: fffffbfff349a60c R12: 0000000000000110
> R13: 0000000000000001 R14: ffffc90002e87848 R15: 0000000000000000
> FS: 00007fa514973500(0000) GS:ffff888104600000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007fa51474ccb0 CR3: 000000002bcb0001 CR4: 0000000000770ee0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> PKRU: 55555554
> Call Trace:
> ? write_comp_data+0x2a/0x90
> ? cleanup_glue_dir+0x260/0x260
> ? is_rtc_hctosys.isra.0+0xb9/0xf0
> ? rtc_proc_show+0x440/0x440
> ? rcu_read_lock_held_common+0xe/0xa0
> ? rcu_read_lock_sched_held+0x62/0xe0
> cdev_device_del+0x1a/0x80
> devm_rtc_unregister_device+0x37/0x80
> release_nodes+0xc3/0x3b0
>
> If cdev_device_add() fails, 'dev->p' is not set, it causes
> null-ptr-deref when calling cdev_device_del(), return error
> code when cdev_device_add() failed to fix this.
>
> Reported-by: Hulk Robot <hulkci@huawei.com>
> Fixes: 3068a254d5519 ("rtc: introduce new registration method")
> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> ---
> drivers/rtc/class.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
> index 1f18c39a4b82..76422faee05b 100644
> --- a/drivers/rtc/class.c
> +++ b/drivers/rtc/class.c
> @@ -399,12 +399,14 @@ int __devm_rtc_register_device(struct module *owner, struct rtc_device *rtc)
> rtc_dev_prepare(rtc);
>
> err = cdev_device_add(&rtc->char_dev, &rtc->dev);
> - if (err)
> + if (err) {
> dev_warn(rtc->dev.parent, "failed to add char device %d:%d\n",
> MAJOR(rtc->dev.devt), rtc->id);
> - else
> + return err;
As the checkpatch warning indicates, registering the character device as
always been optional. d5ed9177f64fe95d9de79e6504d41612d9127e8a is the
commit you want to fix.
> + } else {
> dev_dbg(rtc->dev.parent, "char device (%d:%d)\n",
> MAJOR(rtc->dev.devt), rtc->id);
> + }
>
> rtc_proc_add_device(rtc);
>
> --
> 2.25.1
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2021-10-11 8:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-11 8:03 [PATCH 1/2] rtc: class: check return value when calling dev_set_name() Yang Yingliang
2021-10-11 8:03 ` [PATCH 2/2] rtc: class: return error code when cdev_device_add() failed Yang Yingliang
2021-10-11 8:36 ` Alexandre Belloni [this message]
2021-10-11 9:40 ` Yang Yingliang
2021-10-11 9:47 ` Alexandre Belloni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YWP3f1wPbim8VG6K@piout.net \
--to=alexandre.belloni@bootlin.com \
--cc=a.zummo@towertech.it \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=yangyingliang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.