Skip to content

Commit

Permalink
fix oops in scsi_run_queue()
Browse files Browse the repository at this point in the history
commit c055f5b upstream.

The recent commit closing the race window in device teardown:

commit 86cbfb5
Author: James Bottomley <James.Bottomley@suse.de>
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 <jaschut@sandia.gov>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
James Bottomley authored and gregkh committed May 9, 2011
1 parent 8bd2617 commit a4dbc29
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 a4dbc29

Please sign in to comment.