summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2019-10-07 12:40:59 -0400
committerJakub Kicinski <jakub.kicinski@netronome.com>2019-10-08 19:52:26 -0400
commit6af3aa57a0984e061f61308fe181a9a12359fecc (patch)
tree9146b10e8f88624f36c9876c64f16b9e723f6a63
parent4b793feccae3b06764268377a4030eb774ed924e (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.c9
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
556err_deregister:
557 pn533_unregister_device(phy->priv);
556error: 558error:
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}