| From 6ed1721715bb7757e5c825321fdae796de20173b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 12 Apr 2022 10:02:57 +0800 |
| Subject: usb: usbip: fix a refcount leak in stub_probe() |
| |
| From: Hangyu Hua <hbh25y@gmail.com> |
| |
| [ Upstream commit 9ec4cbf1cc55d126759051acfe328d489c5d6e60 ] |
| |
| usb_get_dev() is called in stub_device_alloc(). When stub_probe() fails |
| after that, usb_put_dev() needs to be called to release the reference. |
| |
| Fix this by moving usb_put_dev() to sdev_free error path handling. |
| |
| Find this by code review. |
| |
| Fixes: 3ff67445750a ("usbip: fix error handling in stub_probe()") |
| Reviewed-by: Shuah Khan <skhan@linuxfoundation.org> |
| Signed-off-by: Hangyu Hua <hbh25y@gmail.com> |
| Link: https://lore.kernel.org/r/20220412020257.9767-1-hbh25y@gmail.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/usbip/stub_dev.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c |
| index cec5805feb25..ca76ee4058c9 100644 |
| --- a/drivers/usb/usbip/stub_dev.c |
| +++ b/drivers/usb/usbip/stub_dev.c |
| @@ -441,7 +441,6 @@ static int stub_probe(struct usb_device *udev) |
| (struct usb_dev_state *) udev); |
| err_port: |
| dev_set_drvdata(&udev->dev, NULL); |
| - usb_put_dev(udev); |
| |
| /* we already have busid_priv, just lock busid_lock */ |
| spin_lock(&busid_priv->busid_lock); |
| @@ -456,6 +455,7 @@ static int stub_probe(struct usb_device *udev) |
| put_busid_priv(busid_priv); |
| |
| sdev_free: |
| + usb_put_dev(udev); |
| stub_device_free(sdev); |
| |
| return rc; |
| -- |
| 2.35.1 |
| |