Re: [PATCH] cfg80211: fix a couple of bugs with key ioctls

Hin-Tak Leung
2009-05-13T03:56:42Z

Hiya, I stuck in a few printk(KERN_DEBUG __LINE__) around the new
-EINVAL's and tried to see why setting things by iwconfig manually
works, but NM/wpa_supplicant does not, and here is what I found.
Around line 600 of net/wireless/wext-compat.c (this is the hackish mod
version):
------------------------------------------
int cfg80211_wext_siwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)

switch (ext->alg) {

case IW_ENCODE_ALG_WEP:
if (erq->length == 5)
cipher = WLAN_CIPHER_SUITE_WEP40;
else if (erq->length == 13)
cipher = WLAN_CIPHER_SUITE_WEP104;
else {
printk(KERN_DEBUG "line %d %d\n", __LINE__, erq->length);
cipher = WLAN_CIPHER_SUITE_WEP104;
/* return -EINVAL; */
}
break;
}
------------------------------------------------
For some unknown reason, when run with NM/wpa_supplicant with the same
authentication credentials to the same AP, erq->length is 53 instead
of 13. If I just modify it as above instead of returning EINVAL, then
I get to authenticate, etc. in the old mac80211 ioctls, the decision
of cipher is postponed a lot later, after playing with the default key
a bit?

Anyway, I think 53 is either 40+13 or 13 *4 +1, so is it a case of
wpa_supplicant putting more stuff at the end or an offset somewhere?