• Nicholas Bellinger's avatar
    target: Perform RCU callback barrier before backend/fabric unload · 94509182
    Nicholas Bellinger authored
    This patch addresses a v4.2-rc1 regression where backend driver
    module unload happening immediately after TBO->free_device()
    does internal call_rcu(), will currently result in IRQ context
    rcu_process_callbacks() use-after-free paging OOPsen.
    
    It adds the missing rcu_barrier() in target_backend_unregister()
    to perform an explicit RCU barrier waiting for all RCU callbacks
    to complete before releasing target_backend_ops memory, and
    allowing TBO->module exit to proceed.
    
    Also, do the same for fabric drivers in target_unregister_template()
    to ensure se_deve_entry->rcu_head -> kfree_rcu() callbacks have
    completed, before allowing target_core_fabric_ops->owner module
    exit to proceed.
    Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    94509182
target_core_configfs.c 97.1 KB