• Jens Axboe's avatar
    NVMe: fix race condition in nvme_submit_sync_cmd() · 849c6e77
    Jens Axboe authored
    If we have a race between the schedule timing out and the command
    completing, we could have the task issuing the command exit
    nvme_submit_sync_cmd() while the irq is running sync_completion().
    If that happens, we could be corrupting memory, since the stack
    that held 'cmdinfo' is no longer valid.
    
    Fix this by always calling nvme_abort_cmd_info(). Once that call
    completes, we know that we have either run sync_completion() if
    the completion came in, or that we will never run it since we now
    have special_completion() as the command callback handler.
    Acked-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    849c6e77
nvme-core.c 71 KB