Skip to content
  • Roland Dreier's avatar
    nvme: Don't use a stack buffer for keep-alive command · 0a34e466
    Roland Dreier authored
    
    
    In nvme_keep_alive() we pass a request with a pointer to an NVMe command on
    the stack into blk_execute_rq_nowait().  However, the block layer doesn't
    guarantee that the request is fully queued before blk_execute_rq_nowait()
    returns.  If not, and the request is queued after nvme_keep_alive() returns,
    then we'll end up using stack memory that might have been overwritten to
    form the NVMe command we pass to hardware.
    
    Fix this by keeping a special command struct in the nvme_ctrl struct right
    next to the delayed work struct used for keep-alives.
    
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
    0a34e466