linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: Mike Fedyk <mfedyk@matchmail.com>
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org
Subject: Re: OOps in 2.6.0-test4-mm3-1
Date: Fri, 29 Aug 2003 20:09:26 -0700	[thread overview]
Message-ID: <20030829200926.3e2b7eb6.akpm@osdl.org> (raw)
In-Reply-To: <20030830014309.GA898@matchmail.com>

Mike Fedyk <mfedyk@matchmail.com> wrote:
>
> It's vanilla mm3-1 with this one patch added from Neil Brown.  I don't think
> it has anything to do with it (it looks like a driver issue to me).  But it
> can't hurt to mention it.
> 

No, it is not an MD thing.

You need two patches.  It's up to the scsi guys to decide if they're the
right way to go.  I think they are.




Some drivers such as aha1542 and aic7xxx_old will call scsi_register() and
then, if some succeeding operations fails they will call scsi_unregister(),
without an intervening scsi_set_host().

This causes an oops in scsi_put_device(), because kobj->parent is NULL.

In other words, scsi_register() immediately followed by scsi_unregister()
is guaranteed to oops.

The patch makes scsi_host_dev_release() more robust against this usage
pattern.


 drivers/scsi/hosts.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletion(-)

diff -puN drivers/scsi/hosts.c~aha1542-oops-fix drivers/scsi/hosts.c
--- 25/drivers/scsi/hosts.c~aha1542-oops-fix	2003-08-29 19:48:37.000000000 -0700
+++ 25-akpm/drivers/scsi/hosts.c	2003-08-29 20:02:49.000000000 -0700
@@ -158,7 +158,13 @@ static void scsi_host_dev_release(struct
 	scsi_proc_hostdir_rm(shost->hostt);
 	scsi_destroy_command_freelist(shost);
 
-	put_device(parent);
+	/*
+	 * Some drivers (eg aha1542) do scsi_register()/scsi_unregister()
+	 * during probing without performing a scsi_set_device() in between.
+	 * In this case dev->parent is NULL.
+	 */
+	if (parent)
+		put_device(parent);
 	kfree(shost);
 }
 

_



and





scsi_unregister() unconditionally does list_del(&shost->sht_legacy_list).

But scsi_register() leaves that list_head uninitialised if scsi_host_alloc()
returned NULL.

In other words: scsi_unregister() is guaranteed to oops if scsi_host_alloc()
fails.

Fix it by initialising the list_head in scsi_register().


 drivers/scsi/hosts.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletion(-)

diff -puN drivers/scsi/hosts.c~scsi_unregister-oops-fix drivers/scsi/hosts.c
--- 25/drivers/scsi/hosts.c~scsi_unregister-oops-fix	2003-08-29 20:02:53.000000000 -0700
+++ 25-akpm/drivers/scsi/hosts.c	2003-08-29 20:02:53.000000000 -0700
@@ -297,8 +297,12 @@ struct Scsi_Host *scsi_register(struct s
 		dump_stack();
 	}
 
-	if (shost)
+	if (shost) {
 		list_add_tail(&shost->sht_legacy_list, &sht->legacy_hosts);
+	} else {
+		/* Do this to keep scsi_unregister() happy */
+		INIT_LIST_HEAD(&shost->sht_legacy_list);
+	}
 	return shost;
 }
 

_


  reply	other threads:[~2003-08-30  3:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-29  6:56 2.6.0-test4-mm3 Andrew Morton
2003-08-29  7:45 ` 2.6.0-test4-mm3 Andrew Morton
2003-08-29 15:42 ` 2.6.0-test4-mm3 Ed Sweetman
2003-08-29 15:57   ` 2.6.0-test4-mm3 Andrew Morton
2003-08-29 15:59   ` 2.6.0-test4-mm3 Felipe Alfaro Solana
2003-08-30  1:43 ` OOps in 2.6.0-test4-mm3-1 Mike Fedyk
2003-08-30  3:09   ` Andrew Morton [this message]
2003-08-30 23:20     ` Mike Fedyk
2003-08-30 23:36       ` Andrew Morton
2003-09-10 18:53 ` 2.6.0-test4-mm3 Mike Fedyk
2003-09-10 18:55   ` ide-scsi oops was: 2.6.0-test4-mm3 Mike Fedyk
2003-09-10 18:43     ` Andrew Morton
2003-09-10 19:10       ` Mike Fedyk
2003-09-11 15:24         ` Alan Cox
2003-09-10 20:04       ` Martin J. Bligh
2003-09-10 20:35         ` Murray J. Root
2003-09-10 20:53         ` Paul Larson
2003-09-10 21:11           ` Sandisk WiFi + CF card question J.C. Wren
2003-09-11  8:20         ` ide-scsi oops was: 2.6.0-test4-mm3 Jens Axboe
2003-09-11 15:12           ` Gerhard Mack
2003-09-11 21:52             ` Jens Axboe
2003-09-11 15:27           ` Alan Cox
2003-09-11 21:50             ` Jens Axboe
2003-09-11 18:13           ` Martin J. Bligh
2003-09-11 18:30             ` Mike Fedyk
2003-09-11 21:52             ` Jens Axboe
2003-09-16  0:34               ` Ian Hastie
2003-09-16  9:20                 ` Jens Axboe
2003-09-16 18:26                   ` Ian Hastie
2003-09-16 18:58                     ` Mike Fedyk
2003-09-17 10:31                     ` Jens Axboe
2003-09-16 21:41 ` OOps in HFS " Mike Fedyk
2003-09-16 21:40   ` Andrew Morton
2003-09-16 23:59     ` Mike Fedyk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030829200926.3e2b7eb6.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mfedyk@matchmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).