diff options
author | Johan Hovold <johan@kernel.org> | 2019-10-07 12:40:59 -0400 |
---|---|---|
committer | Jakub Kicinski <jakub.kicinski@netronome.com> | 2019-10-08 19:52:26 -0400 |
commit | 6af3aa57a0984e061f61308fe181a9a12359fecc (patch) | |
tree | 9146b10e8f88624f36c9876c64f16b9e723f6a63 | |
parent | 4b793feccae3b06764268377a4030eb774ed924e (diff) |
NFC: pn533: fix use-after-free and memleaks
The driver would fail to deregister and its class device and free
related resources on late probe errors.
Reported-by: syzbot+cb035c75c03dbe34b796@syzkaller.appspotmail.com
Fixes: 32ecc75ded72 ("NFC: pn533: change order operations in dev registation")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
-rw-r--r-- | drivers/nfc/pn533/usb.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c index c5289eaf17ee..e897e4d768ef 100644 --- a/drivers/nfc/pn533/usb.c +++ b/drivers/nfc/pn533/usb.c | |||
@@ -547,18 +547,25 @@ static int pn533_usb_probe(struct usb_interface *interface, | |||
547 | 547 | ||
548 | rc = pn533_finalize_setup(priv); | 548 | rc = pn533_finalize_setup(priv); |
549 | if (rc) | 549 | if (rc) |
550 | goto error; | 550 | goto err_deregister; |
551 | 551 | ||
552 | usb_set_intfdata(interface, phy); | 552 | usb_set_intfdata(interface, phy); |
553 | 553 | ||
554 | return 0; | 554 | return 0; |
555 | 555 | ||
556 | err_deregister: | ||
557 | pn533_unregister_device(phy->priv); | ||
556 | error: | 558 | error: |
559 | usb_kill_urb(phy->in_urb); | ||
560 | usb_kill_urb(phy->out_urb); | ||
561 | usb_kill_urb(phy->ack_urb); | ||
562 | |||
557 | usb_free_urb(phy->in_urb); | 563 | usb_free_urb(phy->in_urb); |
558 | usb_free_urb(phy->out_urb); | 564 | usb_free_urb(phy->out_urb); |
559 | usb_free_urb(phy->ack_urb); | 565 | usb_free_urb(phy->ack_urb); |
560 | usb_put_dev(phy->udev); | 566 | usb_put_dev(phy->udev); |
561 | kfree(in_buf); | 567 | kfree(in_buf); |
568 | kfree(phy->ack_buffer); | ||
562 | 569 | ||
563 | return rc; | 570 | return rc; |
564 | } | 571 | } |