From: "Randy.Dunlap" <rdunlap@xenotime.net>
To: Alex Davis <alex14641@yahoo.com>
Cc: linux-kernel@vger.kernel.org, scsi <linux-scsi@vger.kernel.org>
Subject: Re: [PATCH] Fix bug: accessing past end of array.
Date: Sun, 25 Jun 2006 19:28:27 -0700 [thread overview]
Message-ID: <20060625192827.730f1a8d.rdunlap@xenotime.net> (raw)
In-Reply-To: <20060626020646.49093.qmail@web50406.mail.yahoo.com>
[adding linux-scsi]
On Sun, 25 Jun 2006 19:06:46 -0700 (PDT) Alex Davis wrote:
> If the card is re-inserted 2 or more times, we access elements
> past the end of the aha152x_host array.
When I was testing/reproducing this, I observed that removing
the card did not cause the aha152x_detach() function to be called
(in drivers/scsi/pcmcia/aha152x_stub.c). However, I didn't
find out why that doesn't happen. I think fixing this would
be a big help.
> Also correct spelling errors.
>
> This is for 2.6.17.
>
> Signed-off-by Alex Davis <alex14641 at yahoo dot com>
> =========================================================================
> diff -u linux-2.6.17.1-orig/drivers/scsi/aha152x.c linux-2.6.17.1/drivers/scsi/aha152x.c
> --- linux-2.6.17.1-orig/drivers/scsi/aha152x.c 2006-06-17 21:49:35.000000000 -0400
> +++ linux-2.6.17.1/drivers/scsi/aha152x.c 2006-06-25 20:06:05.000000000 -0400
> @@ -766,7 +766,7 @@
> struct Scsi_Host *shpnt = lookup_irq(irqno);
>
> if (!shpnt) {
> - printk(KERN_ERR "aha152x: catched software interrupt %d for unknown controller.\n",
> irqno);
> + printk(KERN_ERR "aha152x: caught software interrupt %d for unknown controller.\n",
> irqno);
> return IRQ_NONE;
> }
>
> @@ -779,6 +779,7 @@
> struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *setup)
> {
> struct Scsi_Host *shpnt;
> + int i;
>
> shpnt = scsi_host_alloc(&aha152x_driver_template, sizeof(struct aha152x_hostdata));
> if (!shpnt) {
> @@ -787,6 +788,22 @@
> }
>
> /* need to have host registered before triggering any interrupt */
> +
> + /* find an empty slot. */
> + for ( i = 0; i < ARRAY_SIZE(aha152x_host); ++i ) {
> + if ( aha152x_host[i] == NULL ) {
> + break;
> + }
> + }
> +
> + /* no empty slots? */
> + if ( i >= ARRAY_SIZE(aha152x_host) ) {
> + printk(KERN_ERR "aha152x: too many hosts: %d\n", i + 1);
> + return NULL;
> + }
> +
> + registered_count = i;
> +
> aha152x_host[registered_count] = shpnt;
>
> memset(HOSTDATA(shpnt), 0, sizeof *HOSTDATA(shpnt));
> @@ -915,6 +932,8 @@
>
> void aha152x_release(struct Scsi_Host *shpnt)
> {
> + int i;
> +
> if(!shpnt)
> return;
>
> @@ -933,6 +952,12 @@
>
> scsi_remove_host(shpnt);
> scsi_host_put(shpnt);
> + for ( i = 0; i < ARRAY_SIZE(aha152x_host); ++i ) {
> + if ( aha152x_host[i] == shpnt ) {
> + aha152x_host[i] = NULL;
> + break;
> + }
> + }
> }
>
>
> @@ -1458,7 +1483,7 @@
> unsigned char rev, dmacntrl0;
>
> if (!shpnt) {
> - printk(KERN_ERR "aha152x: catched interrupt %d for unknown controller.\n", irqno);
> + printk(KERN_ERR "aha152x: caught interrupt %d for unknown controller.\n", irqno);
> return IRQ_NONE;
> }
>
> @@ -2976,6 +3001,9 @@
> Scsi_Cmnd *ptr;
> unsigned long flags;
>
> + if(!shpnt)
> + return;
> +
> DO_LOCK(flags);
> printk(KERN_DEBUG "\nqueue status:\nissue_SC:\n");
> for (ptr = ISSUE_SC; ptr; ptr = SCNEXT(ptr))
> @@ -3941,7 +3969,6 @@
>
> for(i=0; i<ARRAY_SIZE(setup); i++) {
> aha152x_release(aha152x_host[i]);
> - aha152x_host[i]=NULL;
> }
> }
>
---
~Randy
next prev parent reply other threads:[~2006-06-26 2:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-26 2:06 Alex Davis
2006-06-26 2:28 ` Randy.Dunlap [this message]
2006-06-26 3:18 ` Alex Davis
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=20060625192827.730f1a8d.rdunlap@xenotime.net \
--to=rdunlap@xenotime.net \
--cc=alex14641@yahoo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/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
all inboxes | Powered by JetHome®