• Nicholas Bellinger's avatar
    target: Fix double-free of se_cmd in target_complete_tmr_failure · e13d5fef
    Nicholas Bellinger authored
    Fabric drivers currently expect to internally release se_cmd in the event
    of a TMR failure during target_submit_tmr(), which means the immediate call
    to transport_generic_free_cmd() after TFO->queue_tm_rsp() from within
    target_complete_tmr_failure() workqueue context is wrong.
    
    This is done as some fabrics expect TMR operations to be acknowledged
    before releasing the descriptor, so the assumption that core is releasing
    se_cmd associated TMR memory is incorrect.  This fixes a OOPs where
    transport_generic_free_cmd() was being called more than once.
    
    This bug was originally observed with tcm_qla2xxx fabric ports.
    
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Roland Dreier <roland@purestorage.com>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    e13d5fef
target_core_transport.c 85.4 KB