Skip to content

Commit

Permalink
[SCSI] fix oops in scsi_run_queue()
Browse files Browse the repository at this point in the history
The recent commit closing the race window in device teardown:

commit 86cbfb5
Author: James Bottomley <[email protected]>
Date:   Fri Apr 22 10:39:59 2011 -0500

    [SCSI] put stricter guards on queue dead checks

is causing a potential NULL deref in scsi_run_queue() because the
q->queuedata may already be NULL by the time this function is called.
Since we shouldn't be running a queue that is being torn down, simply
add a NULL check in scsi_run_queue() to forestall this.

Tested-by: Jim Schutt <[email protected]>
Cc: [email protected]
Signed-off-by: James Bottomley <[email protected]>
  • Loading branch information
James Bottomley authored and James Bottomley committed May 3, 2011
1 parent 3fd9952 commit c055f5b
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/scsi/scsi_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,10 +400,15 @@ static inline int scsi_host_is_busy(struct Scsi_Host *shost)
static void scsi_run_queue(struct request_queue *q)
{
struct scsi_device *sdev = q->queuedata;
struct Scsi_Host *shost = sdev->host;
struct Scsi_Host *shost;
LIST_HEAD(starved_list);
unsigned long flags;

/* if the device is dead, sdev will be NULL, so no queue to run */
if (!sdev)
return;

shost = sdev->host;
if (scsi_target(sdev)->single_lun)
scsi_single_lun_run(sdev);

Expand Down

0 comments on commit c055f5b

Please sign in to comment.