lkml.org 
[lkml]   [2012]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH] fix usb skeleton driver
    Date
    From: Stefani Seibold <stefani@seibold.net>

    This is a fix for the USB skeleton driver to bring it in shape.

    - The usb_interface structure pointer will be no longer stored
    - Every access to the USB will be handled trought the usb_interface pointer
    - Add a new bool 'connected' for signaling a disconnect (== false)
    - Handle a non blocking read without blocking
    - Code cleanup
    - Synchronize disconnect() handler with open() and release(), to fix races
    - Introduced fsync
    - Single user mode
    - Eliminated dead code
    - Save some bytes in the dev structure

    Some word about the open()/release() races with disconnect() of an USB device
    (which can happen any time):
    - The return interface pointer from usb_find_interface() could be already owned
    by an other driver and no more longer handle by the skeleton driver.
    - Or the dev pointer return by usb_get_intfdata() could point to an already
    release memory.

    This races can not handled by a per device mutex. Only a driver global mutex
    could do this job, since the kref_put() in the skel_disconnect() must be
    protected, otherwise skel_open() could access an already released memory.

    I know that this races are very small, but on heavy load or misdesigned or buggy
    hardware this could lead in a OOPS or unpredictable behavior.

    The patch is against linux 3.5.0 commit eea5b5510fc5545d15b69da8e485a7424ae388cf

    Hope this helps

    Signed-off-by: Stefani Seibold <stefani@seibold.net>


    \
     
     \ /
      Last update: 2012-06-07 10:22    [W:4.687 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site