Re: [PATCH v14 02/10] usbip: exporting devices: modifications to host side libraries

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/13/2017 04:55 AM, Krzysztof Opasiak wrote:
> 
> 
> On 01/12/2017 10:14 PM, Shuah Khan wrote:
>> On 12/26/2016 12:08 AM, Nobuo Iwata wrote:
>>> Modifications to host driver wrapper and its related operations (i.e. 
>>> bind/unbind).
>>
>> Way too many changes in this one patch.
>>
>>>
>>> usbip_get_device() method was not used. The implementation of the 
>>> method searches a bound devices list by list index. The position in the 
>>> list is meaningless for any operations so it is assumed not to be used 
>>> in future.
>>>
>>> For this patch set, a method to find a bound device in the bound 
>>> devices list by bus-id is needed. usbip_get_device() is re-implemented 
>>> as a function to find a bound device by bus-id.
>>
>> This is not an accurate description. You are really changing look ups using
>> bus-id instead bus-num and whether usbip_get_device() is used or not is
>> irrelevant.
>>
>> Please make changes to find bound device by bus-id in a separate patch.
>> You will have to change usbip_get_device() anyway because you are changing
>> .get_device() interface. Include exporting usbip_get_debice() in a separate
>> patch.
>>
>>>
>>> bind and unbind function are exported to reuse by new connect and 
>>> disconnect operation. Here, connect and disconnect is NEW-3 and NEW-4 
>>> respactively in diagram below.
>>
>> Please don't include exporting bind_device() and unbind_device() and
>> changing their names in this patch. Send a separate patch for that.
>>
>> It makes sense to move the functions you are exporting bind_device(),
>> unbind_device(), and usbip_get_device() to libsrc - usbip_common.c
>> might be a good choice.
>>
>> The following isn't part of this patch, hence shouldn't be included in
>> the change log.
>>
>>>
>>> EXISTING) - invites devices from application(vhci)-side
>>>          +------+                               +------------------+
>>>  device--+ STUB |                               | application/VHCI |
>>>          +------+                               +------------------+
>>>          (server)                               (client)
>>>  1) # usbipd ... start daemon
>>>  = = =
>>>  2) # usbip list --local
>>>  3) # usbip bind
>>>                   <--- list bound devices ---  4) # usbip list --remote
>>>                   <--- import a device ------  5) # usbip attach
>>>  = = =
>>>                      X disconnected            6) # usbip detach
>>>  7) usbip unbind
>>>
>>> NEW) - dedicates devices from device(stub)-side
>>>          +------+                               +------------------+
>>>  device--+ STUB |                               | application/VHCI |
>>>          +------+                               +------------------+
>>>          (client)                               (server)
>>>                                             1) # usbipa ... start daemon
>>>  = = =
>>>  2) # usbip list --local
>>>  3) # usbip connect    --- export a device ------>
>>>  = = =
>>>  4) # usbip disconnect --- un-export a device --->
>>>
>>>  Bind and unbind are done in connect and disconnect internally.
>>>
>>> Signed-off-by: Nobuo Iwata <nobuo.iwata@xxxxxxxxxxxxxxx>
>>> ---
>>>  tools/usb/usbip/libsrc/usbip_host_common.c | 6 ++----
>>>  tools/usb/usbip/libsrc/usbip_host_common.h | 8 ++++----
>>>  tools/usb/usbip/src/usbip.h                | 3 +++
>>>  tools/usb/usbip/src/usbip_bind.c           | 4 ++--
>>>  tools/usb/usbip/src/usbip_unbind.c         | 4 ++--
>>>  5 files changed, 13 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/tools/usb/usbip/libsrc/usbip_host_common.c b/tools/usb/usbip/libsrc/usbip_host_common.c
>>> index 9d41522..6a98d6c 100644
>>> --- a/tools/usb/usbip/libsrc/usbip_host_common.c
>>> +++ b/tools/usb/usbip/libsrc/usbip_host_common.c
>>> @@ -256,17 +256,15 @@ int usbip_export_device(struct usbip_exported_device *edev, int sockfd)
>>>  }
>>>  
>>>  struct usbip_exported_device *usbip_generic_get_device(
>>> -		struct usbip_host_driver *hdriver, int num)
>>> +		struct usbip_host_driver *hdriver, char *busid)
>>>  {
>>>  	struct list_head *i;
>>>  	struct usbip_exported_device *edev;
>>> -	int cnt = 0;
>>>  
>>>  	list_for_each(i, &hdriver->edev_list) {
>>>  		edev = list_entry(i, struct usbip_exported_device, node);
>>> -		if (num == cnt)
>>> +		if (!strncmp(busid, edev->udev.busid, SYSFS_BUS_ID_SIZE))
>>
>> Use strlen(edev->udev.busid) instead of SYSFS_BUS_ID_SIZE
>>
> 
> For me using here strlen() is pointless. strncpy() is here to protect
> against unterminated string in edev->udev.busid. In my humble opinion,
> instead of using strncpy() all the time I would rather just ensure that
> this string is \0 terminated in read_usb_device().
> 
> Best regards,
> 

Yes my real concern here is non-null terminated strings and also that
edev->udev.busid can be trusted over busid. Suing edev->udev.busid
length would only compare stelne bytes as opposed to the max. 32.

Yes you do have to ensure we are dealing with null terminated strings.

thanks,
-- Shuah
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux