Fix for crash on card removal

Pavel Roskin proski
Mon Mar 3 20:47:20 PST 2003


Hello!

Using AccessConfigurationRegister is unsafe is the card has been removed.
There is a long-standing bug in the PCMCIA drivers that causes a kernel
oops.  This bug was been patched in pcmcia-cs, but it's still present in
the kernel PCMCIA drivers (both 2.4.x and 2.5.x).

I have just sent a patch to LKML, but I think it's a good idea to put
protection into the HostAP driver itself, especially because it's
reasonable and simple.

How to reproduce the bug:

1) Compile kernel with PCMCIA support.

2) Compile and install HostAP.

3) Insert a card supported by HostAP.

4) Remove (physically) the card.  The kernel oopses.

It happens because the driver (cs.c) doesn't check the state of the
socket.  Fortunately, we have function prism2_pccard_card_present() that
does exactly the right thing.

A similar precaution can be found in the Orinoco driver 0.11b (further
versions don't use COR reset).

The patch is against CVS HostAP, of course:

===========================
--- driver/modules/hostap_cs.c
+++ driver/modules/hostap_cs.c
@@ -217,6 +217,9 @@ static void prism2_pccard_cor_sreset(loc
 	int res;
 	conf_reg_t reg;

+	if (!prism2_pccard_card_present(local))
+		return;
+
 	reg.Function = 0;
 	reg.Action = CS_READ;
 	reg.Offset = CISREG_COR;
===========================

The patch has been heavily tested (I removed the card at least 20 times).

-- 
Regards,
Pavel Roskin




More information about the Hostap mailing list