Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c055f5b2 authored by James Bottomley's avatar James Bottomley
Browse files

[SCSI] fix oops in scsi_run_queue()



The recent commit closing the race window in device teardown:

commit 86cbfb56
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: default avatarJim Schutt <jaschut@sandia.gov>
Cc: stable@kernel.org
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 3fd9952d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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);