Message ID | 20211208182742.340542-1-tadeusz.struk@linaro.org (mailing list archive) |
---|---|
State | Accepted |
Commit | fd79a0cbf0b2e34bcc45b13acf962e2032a82203 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | nfc: fix segfault in nfc_genl_dump_devices_done | expand |
On 08/12/2021 19:27, Tadeusz Struk wrote: > When kmalloc in nfc_genl_dump_devices() fails then > nfc_genl_dump_devices_done() segfaults as below > > KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] > CPU: 0 PID: 25 Comm: kworker/0:1 Not tainted 5.16.0-rc4-01180-g2a987e65025e-dirty #5 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-6.fc35 04/01/2014 > Workqueue: events netlink_sock_destruct_work > RIP: 0010:klist_iter_exit+0x26/0x80 > Call Trace: > <TASK> > class_dev_iter_exit+0x15/0x20 > nfc_genl_dump_devices_done+0x3b/0x50 > genl_lock_done+0x84/0xd0 > netlink_sock_destruct+0x8f/0x270 > __sk_destruct+0x64/0x3b0 > sk_destruct+0xa8/0xd0 > __sk_free+0x2e8/0x3d0 > sk_free+0x51/0x90 > netlink_sock_destruct_work+0x1c/0x20 > process_one_work+0x411/0x710 > worker_thread+0x6fd/0xa80 > > Link: https://syzkaller.appspot.com/bug?id=fc0fa5a53db9edd261d56e74325419faf18bd0df > Cc: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> > Cc: "David S. Miller" <davem@davemloft.net> > Cc: Jakub Kicinski <kuba@kernel.org> > Cc: netdev@vger.kernel.org > Cc: stable@vger.kernel.org > Reported-by: syzbot+f9f76f4a0766420b4a02@syzkaller.appspotmail.com > Signed-off-by: Tadeusz Struk <tadeusz.struk@linaro.org> > --- > net/nfc/netlink.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > Cc: <stable@vger.kernel.org> Fixes: 4d12b8b129f1 ("NFC: add nfc generic netlink interface") Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> I will fix other similar cases. Best regards, Krzysztof
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Wed, 8 Dec 2021 10:27:42 -0800 you wrote: > When kmalloc in nfc_genl_dump_devices() fails then > nfc_genl_dump_devices_done() segfaults as below > > KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] > CPU: 0 PID: 25 Comm: kworker/0:1 Not tainted 5.16.0-rc4-01180-g2a987e65025e-dirty #5 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-6.fc35 04/01/2014 > Workqueue: events netlink_sock_destruct_work > RIP: 0010:klist_iter_exit+0x26/0x80 > Call Trace: > <TASK> > class_dev_iter_exit+0x15/0x20 > nfc_genl_dump_devices_done+0x3b/0x50 > genl_lock_done+0x84/0xd0 > netlink_sock_destruct+0x8f/0x270 > __sk_destruct+0x64/0x3b0 > sk_destruct+0xa8/0xd0 > __sk_free+0x2e8/0x3d0 > sk_free+0x51/0x90 > netlink_sock_destruct_work+0x1c/0x20 > process_one_work+0x411/0x710 > worker_thread+0x6fd/0xa80 > > [...] Here is the summary with links: - nfc: fix segfault in nfc_genl_dump_devices_done https://git.kernel.org/netdev/net/c/fd79a0cbf0b2 You are awesome, thank you!
diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c index 334f63c9529e..0b4fae183a4b 100644 --- a/net/nfc/netlink.c +++ b/net/nfc/netlink.c @@ -636,8 +636,10 @@ static int nfc_genl_dump_devices_done(struct netlink_callback *cb) { struct class_dev_iter *iter = (struct class_dev_iter *) cb->args[0]; - nfc_device_iter_exit(iter); - kfree(iter); + if (iter) { + nfc_device_iter_exit(iter); + kfree(iter); + } return 0; }
When kmalloc in nfc_genl_dump_devices() fails then nfc_genl_dump_devices_done() segfaults as below KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f] CPU: 0 PID: 25 Comm: kworker/0:1 Not tainted 5.16.0-rc4-01180-g2a987e65025e-dirty #5 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-6.fc35 04/01/2014 Workqueue: events netlink_sock_destruct_work RIP: 0010:klist_iter_exit+0x26/0x80 Call Trace: <TASK> class_dev_iter_exit+0x15/0x20 nfc_genl_dump_devices_done+0x3b/0x50 genl_lock_done+0x84/0xd0 netlink_sock_destruct+0x8f/0x270 __sk_destruct+0x64/0x3b0 sk_destruct+0xa8/0xd0 __sk_free+0x2e8/0x3d0 sk_free+0x51/0x90 netlink_sock_destruct_work+0x1c/0x20 process_one_work+0x411/0x710 worker_thread+0x6fd/0xa80 Link: https://syzkaller.appspot.com/bug?id=fc0fa5a53db9edd261d56e74325419faf18bd0df Cc: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jakub Kicinski <kuba@kernel.org> Cc: netdev@vger.kernel.org Cc: stable@vger.kernel.org Reported-by: syzbot+f9f76f4a0766420b4a02@syzkaller.appspotmail.com Signed-off-by: Tadeusz Struk <tadeusz.struk@linaro.org> --- net/nfc/netlink.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)