[Spice-devel] [RFC PATCH 1/1] Add a usbredir kernel module to remotely connect USB devices over IP.

Krzysztof Opasiak k.opasiak at samsung.com
Fri Jul 3 01:51:11 PDT 2015



On 07/02/2015 10:20 PM, Alan Stern wrote:
> On Thu, 2 Jul 2015, Jeremy White wrote:
>
>>> Oliver is talking about the danger of having part of the communication
>>> path for a block device run through userspace.
>>>
>>> Imagine a situation where the client uses a USB storage device provided
>>> by the server as a swap device.  And suppose a userspace daemon on the
>>> client has to process USB packets as they pass between the client and
>>> the server.  If the daemon is idle for some time, parts of its address
>>> space may get stored in the swap area on the server and paged out.
>>>
>>> Now consider what happens when those parts of memory need to be paged
>>> back in.  The client submits a request to read from the swap area.
>>> The request is transformed into USB packets and sent through the
>>> userspace daemon for transmission to the server.  But the daemon can't
>>> process the packets because it is waiting for its missing parts to be
>>> paged back!  Result: deadlock.
>>
>> Right.  I followed that.  Oliver also asserted that he believed that the
>> current usbip implementation has this flaw; I do not follow that.  The
>> concept is that the usbip device driver virtualizes the device behavior;
>> isolating the running kernel from the vagaries of the network transport.
>>   All proposed usbredir implementations, even if they move the network
>> transport to user space, would retain that behavior.
>
> The point is that a device driver like usbip _cannot_ isolate the
> running kernel from the vagaries of the network transport if part of
> that transport occurs in userspace.
>
> If any part of the transport passes through userspace, you can end up
> in a situation like what I outlined above, where a message can't be
> transported until after its reply has been received.  There's no way
> for a device driver to prevent a deadlock when this occurs, no matter
> what it virtualizes.
>

Doesn't we have the same problem with functionfs/gadgetfs and dummy_hcd? 
Or with fuse?

It's a very generic problem for all "virtualized devices" and it is 
known for quite a long time. This is why many tutorials about swap warns 
that swap should be set up only on real block devices which are fully 
served in kernel.

-- 
Krzysztof Opasiak
Samsung R&D Institute Poland
Samsung Electronics


More information about the Spice-devel mailing list