• Bart Van Assche's avatar
    IB/umad: Fix error handling · f414d289
    Bart Van Assche authored
    commit 8ec0a0e6 upstream.
    
    Avoid leaking a kref count in ib_umad_open() if port->ib_dev == NULL
    or if nonseekable_open() fails.
    
    Avoid leaking a kref count, that sm_sem is kept down and also that the
    IB_PORT_SM capability mask is not cleared in ib_umad_sm_open() if
    nonseekable_open() fails.
    
    Since container_of() never returns NULL, remove the code that tests
    whether container_of() returns NULL.
    
    Moving the kref_get() call from the start of ib_umad_*open() to the
    end is safe since it is the responsibility of the caller of these
    functions to ensure that the cdev pointer remains valid until at least
    when these functions return.
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    
    [ydroneaud@opteya.com: rework a bit to reduce the amount of code changed]
    Signed-off-by: default avatarYann Droneaud <ydroneaud@opteya.com>
    
    [ nonseekable_open() can't actually fail, but....  - Roland ]
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    f414d289
user_mad.c 30 KB