On Friday 10 August 2007 17:02:15 Larry Finger wrote:
> Jory A. Pratt wrote:
> > Larry Finger wrote:
> >>
> >> What encryption method are you using?
> >>
> >> Larry
> >>
> > I use wep encryption on a WRT54G V3 with dd-wrt. I will work on it later 
> > tonight and see what I can come up with.
> 
> Your answer confirms my latest result in which I have been able to reproduce 
> the problem here.
> 
> I bisected the wireless-dev kernel to an arbitrary point before the change in 
> status handling 
> (commit 85a83d26). That version could connect successfully using WEP and WPA 
> encryption. I then 
> added the status-handling patch and tried again. This kernel could still do 
> WPA encryption and it 
> could authenticate and associate with the WEP-using AP, but it could not get 
> an IP number using DHCP.
> 
> I then did a diff between the dmesg output for the driver that works 
> (dmesg.good) and the one that 
> does not (dmesg.bad). There are the usual number of differences due to slight 
> timing difference, 
> etc, but the following difference stands out:
> 
> --- dmesg.good  2007-08-10 09:40:23.000000000 -0500
> +++ dmesg.bad   2007-08-10 09:41:23.000000000 -0500
> ..snip..
> @@ -569,7 +569,6 @@
>   bcm43xx_mac80211: 32-bit DMA initialized
>   bcm43xx_mac80211: Wireless interface started
>   NET: Registered protocol family 17
> -bcm43xx_mac80211: Using hardware based encryption for keyidx: 0, mac: 
> ff:ff:ff:ff:ff:ff
>   eth1: Initial auth_alg=0
>   eth1: authenticate with AP 00:1a:70:46:ba:b1
>   eth1: RX authentication from 00:1a:70:46:ba:b1 (alg=0 transaction=2 
> status=0)
> 
> 
> The good version is using hardware encryption, and the bad one is not. I have 
> no idea why, but it 
> seems to be the critical difference. I'm ready to test any trial patch.
> 
> Larry
> 
> 

Ok, I see the bug in set_key.

        if (bcm43xx_status(dev) != BCM43xx_STAT_INITIALIZED) {
                err = -ENODEV;
                goto out_unlock;
        }

We didn't have a chance to spot the bug in the patch that introduced
it, because it did not touch this function.
This should be changed to

        if (bcm43xx_status(dev) < BCM43xx_STAT_INITIALIZED) {
                err = -ENODEV;
                goto out_unlock;
        }

-- 
Greetings Michael.
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to