| From 1e180f167d4e413afccbbb4a421b48b2de832549 Mon Sep 17 00:00:00 2001 |
| From: "Shuah Khan (Samsung OSG)" <shuah@kernel.org> |
| Date: Mon, 30 Apr 2018 16:17:19 -0600 |
| Subject: usbip: usbip_host: delete device from busid_table after rebind |
| |
| From: Shuah Khan (Samsung OSG) <shuah@kernel.org> |
| |
| commit 1e180f167d4e413afccbbb4a421b48b2de832549 upstream. |
| |
| Device is left in the busid_table after unbind and rebind. Rebind |
| initiates usb bus scan and the original driver claims the device. |
| After rescan the device should be deleted from the busid_table as |
| it no longer belongs to usbip_host. |
| |
| Fix it to delete the device after device_attach() succeeds. |
| |
| Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org> |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/usbip/stub_main.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/drivers/usb/usbip/stub_main.c |
| +++ b/drivers/usb/usbip/stub_main.c |
| @@ -201,6 +201,9 @@ static ssize_t rebind_store(struct devic |
| if (!bid) |
| return -ENODEV; |
| |
| + /* mark the device for deletion so probe ignores it during rescan */ |
| + bid->status = STUB_BUSID_OTHER; |
| + |
| /* device_attach() callers should hold parent lock for USB */ |
| if (bid->udev->dev.parent) |
| device_lock(bid->udev->dev.parent); |
| @@ -212,6 +215,9 @@ static ssize_t rebind_store(struct devic |
| return ret; |
| } |
| |
| + /* delete device from busid_table */ |
| + del_match_busid((char *) buf); |
| + |
| return count; |
| } |
| |