diff options
author | Shuah Khan <shuahkh@osg.samsung.com> | 2018-03-21 20:21:56 -0600 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-03-22 13:08:20 +0100 |
commit | 2699126bcf18db672451b82b26a1c8e954784fad (patch) | |
tree | 38aaaeaa85f715885ad2b62ea8e679b058e6b63e | |
parent | 1cbd53c8cd85a63383a075347abee8f6e3f14fbe (diff) |
usbip: tools: usbipd: exclude exported devices from exportable device list
usbipd includes exported devices in response to exportable device list.
Exclude exported devices from exportable device list to avoid:
- import requests for devices that are exported only to fail the request.
- revealing devices that are imported by a client to another client.
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | tools/usb/usbip/src/usbipd.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/tools/usb/usbip/src/usbipd.c b/tools/usb/usbip/src/usbipd.c index f8ff735eb100..32864c52942d 100644 --- a/tools/usb/usbip/src/usbipd.c +++ b/tools/usb/usbip/src/usbipd.c @@ -175,10 +175,21 @@ static int send_reply_devlist(int connfd) struct list_head *j; int rc, i; + /* + * Exclude devices that are already exported to a client from + * the exportable device list to avoid: + * - import requests for devices that are exported only to + * fail the request. + * - revealing devices that are imported by a client to + * another client. + */ + reply.ndev = 0; /* number of exported devices */ list_for_each(j, &driver->edev_list) { - reply.ndev += 1; + edev = list_entry(j, struct usbip_exported_device, node); + if (edev->status != SDEV_ST_USED) + reply.ndev += 1; } info("exportable devices: %d", reply.ndev); @@ -197,6 +208,9 @@ static int send_reply_devlist(int connfd) list_for_each(j, &driver->edev_list) { edev = list_entry(j, struct usbip_exported_device, node); + if (edev->status == SDEV_ST_USED) + continue; + dump_usb_device(&edev->udev); memcpy(&pdu_udev, &edev->udev, sizeof(pdu_udev)); usbip_net_pack_usb_device(1, &pdu_udev); |