NVMe: fix race condition in nvme_submit_sync_cmd()
authorJens Axboe <axboe@fb.com>
Fri, 12 Dec 2014 15:53:40 +0000 (08:53 -0700)
committerJens Axboe <axboe@fb.com>
Fri, 12 Dec 2014 15:53:40 +0000 (08:53 -0700)
commit849c6e7746e4f6317ace6aa7d2fcdcd844e99ddb
treea46e807ce51483393beb9e1d8c1ed331e9a023ca
parentfe54303ee2be293c1c5c7a53a152453789cabc2f
NVMe: fix race condition in nvme_submit_sync_cmd()

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: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/nvme-core.c