• Michal Nazarewicz's avatar
    USB: gadget: f_mass_storage: stale common->fsg value bug fix · b894f60a
    Michal Nazarewicz authored
    On fsg_unbind the common->fsg pointer was not NULLed if the
    unbound fsg_dev instance was the current one.  As an effect,
    the incorrect pointer was preserved in all further operations
    which caused do_set_interface to reference an invalid region.
    
    This commit fixes this by raising an exception in fsg_bind
    which will change the common->fsg pointer.  This also requires
    an wait queue so that the thread in fsg_bind can wait till the
    worker thread handles the exception.
    
    This commit removes also a config and new_config fields of
    fsg_common as they are no longer needed since fsg can be
    used to determine whether function is active or not.
    
    Moreover, this commit removes possible race condition where
    the fsg field was modified in both the worker thread and
    form various other contexts.  This is fixed by replacing
    prev_fsg with new_fsg.  At this point, fsg is assigned only
    in worker thread.
    Signed-off-by: default avatarMichal Nazarewicz <m.nazarewicz@samsung.com>
    Cc: Kyungmin Park <kyungmin.park@samsung.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    b894f60a
f_mass_storage.c 88.1 KB