2010-12-17 22:18:26

by Meelis Roos

[permalink] [raw]
Subject: [PATCH] orinoco_cs: fix too early irq request

orinoco_cs requests its irq too early. This results in irq coming in
right afrer request_irq and before initializing other data structures,
resulting in NULL pointer dereference on module load.

Fix it by moving request_irq after other initialization tasks.

Tested to work with Orinoco Gold PCMCIA card.

Signed-off-by: Meelis Roos <[email protected]>

diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c
index 71b3d68..47fc408 100644
--- a/drivers/net/wireless/orinoco/orinoco_cs.c
+++ b/drivers/net/wireless/orinoco/orinoco_cs.c
@@ -151,10 +151,6 @@ orinoco_cs_config(struct pcmcia_device *link)
goto failed;
}

- ret = pcmcia_request_irq(link, orinoco_interrupt);
- if (ret)
- goto failed;
-
/* We initialize the hermes structure before completing PCMCIA
* configuration just in case the interrupt handler gets
* called. */
@@ -182,6 +178,10 @@ orinoco_cs_config(struct pcmcia_device *link)
goto failed;
}

+ ret = pcmcia_request_irq(link, orinoco_interrupt);
+ if (ret)
+ goto failed;
+
return 0;

failed:

--
Meelis Roos ([email protected])


2010-12-18 10:58:14

by Dave Kilroy

[permalink] [raw]
Subject: Re: [PATCH] orinoco_cs: fix too early irq request

Thanks Meelis. An equivalent patch has already been merged in Linus'
v2.6.37-rc6 (229bd792b), and wireless-next.

Does that version also work for you?



On Fri, Dec 17, 2010 at 10:18 PM, Meelis Roos <[email protected]> wrote:
> orinoco_cs requests its irq too early. This results in irq coming in
> right afrer request_irq and before initializing other data structures,
> resulting in NULL pointer dereference on module load.
>
> Fix it by moving request_irq after other initialization tasks.
>
> Tested to work with Orinoco Gold PCMCIA card.
>
> Signed-off-by: Meelis Roos <[email protected]>
>
> diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c
> index 71b3d68..47fc408 100644
> --- a/drivers/net/wireless/orinoco/orinoco_cs.c
> +++ b/drivers/net/wireless/orinoco/orinoco_cs.c
> @@ -151,10 +151,6 @@ orinoco_cs_config(struct pcmcia_device *link)
> ? ? ? ? ? ? ? ?goto failed;
> ? ? ? ?}
>
> - ? ? ? ret = pcmcia_request_irq(link, orinoco_interrupt);
> - ? ? ? if (ret)
> - ? ? ? ? ? ? ? goto failed;
> -
> ? ? ? ?/* We initialize the hermes structure before completing PCMCIA
> ? ? ? ? * configuration just in case the interrupt handler gets
> ? ? ? ? * called. */
> @@ -182,6 +178,10 @@ orinoco_cs_config(struct pcmcia_device *link)
> ? ? ? ? ? ? ? ?goto failed;
> ? ? ? ?}
>
> + ? ? ? ret = pcmcia_request_irq(link, orinoco_interrupt);
> + ? ? ? if (ret)
> + ? ? ? ? ? ? ? goto failed;
> +
> ? ? ? ?return 0;
>
> ?failed:
>
> --
> Meelis Roos ([email protected])
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>

2010-12-19 14:43:49

by Meelis Roos

[permalink] [raw]
Subject: Re: [PATCH] orinoco_cs: fix too early irq request

> Thanks Meelis. An equivalent patch has already been merged in Linus'
> v2.6.37-rc6 (229bd792b), and wireless-next.

Oops, I tested with 2.6.37-rc4-something when I thought I was testing
the lastest git.

> Does that version also work for you?

Yes, tested with 2.6.37-rc6-00093 and it works fine.

--
Meelis Roos ([email protected])