Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
This commit is contained in:
Коммит
5b84b6fa9b
|
@ -447,6 +447,7 @@ config AIRO_CS
|
||||||
tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
|
tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
|
||||||
depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
|
depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
|
||||||
select CRYPTO
|
select CRYPTO
|
||||||
|
select CRYPTO_AES
|
||||||
---help---
|
---help---
|
||||||
This is the standard Linux driver to support Cisco/Aironet PCMCIA
|
This is the standard Linux driver to support Cisco/Aironet PCMCIA
|
||||||
802.11 wireless cards. This driver is the same as the Aironet
|
802.11 wireless cards. This driver is the same as the Aironet
|
||||||
|
|
|
@ -3701,7 +3701,7 @@ static void bcm43xx_ieee80211_set_security(struct net_device *net_dev,
|
||||||
}
|
}
|
||||||
if (sec->flags & SEC_AUTH_MODE) {
|
if (sec->flags & SEC_AUTH_MODE) {
|
||||||
secinfo->auth_mode = sec->auth_mode;
|
secinfo->auth_mode = sec->auth_mode;
|
||||||
dprintk(", .auth_mode = %d\n", sec->auth_mode);
|
dprintk(", .auth_mode = %d", sec->auth_mode);
|
||||||
}
|
}
|
||||||
dprintk("\n");
|
dprintk("\n");
|
||||||
if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED &&
|
if (bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED &&
|
||||||
|
|
|
@ -2875,7 +2875,7 @@ static int orinoco_ioctl_setiwencode(struct net_device *dev,
|
||||||
if (orinoco_lock(priv, &flags) != 0)
|
if (orinoco_lock(priv, &flags) != 0)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
if (erq->pointer) {
|
if (erq->length > 0) {
|
||||||
if ((index < 0) || (index >= ORINOCO_MAX_KEYS))
|
if ((index < 0) || (index >= ORINOCO_MAX_KEYS))
|
||||||
index = priv->tx_key;
|
index = priv->tx_key;
|
||||||
|
|
||||||
|
@ -2918,7 +2918,7 @@ static int orinoco_ioctl_setiwencode(struct net_device *dev,
|
||||||
if (erq->flags & IW_ENCODE_RESTRICTED)
|
if (erq->flags & IW_ENCODE_RESTRICTED)
|
||||||
restricted = 1;
|
restricted = 1;
|
||||||
|
|
||||||
if (erq->pointer) {
|
if (erq->pointer && erq->length > 0) {
|
||||||
priv->keys[index].len = cpu_to_le16(xlen);
|
priv->keys[index].len = cpu_to_le16(xlen);
|
||||||
memset(priv->keys[index].data, 0,
|
memset(priv->keys[index].data, 0,
|
||||||
sizeof(priv->keys[index].data));
|
sizeof(priv->keys[index].data));
|
||||||
|
|
|
@ -1820,6 +1820,8 @@ static int zd1201_probe(struct usb_interface *interface,
|
||||||
zd->dev->name);
|
zd->dev->name);
|
||||||
|
|
||||||
usb_set_intfdata(interface, zd);
|
usb_set_intfdata(interface, zd);
|
||||||
|
zd1201_enable(zd); /* zd1201 likes to startup enabled, */
|
||||||
|
zd1201_disable(zd); /* interfering with all the wifis in range */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_net:
|
err_net:
|
||||||
|
|
|
@ -58,6 +58,7 @@ config IEEE80211_CRYPT_TKIP
|
||||||
depends on IEEE80211 && NET_RADIO
|
depends on IEEE80211 && NET_RADIO
|
||||||
select CRYPTO
|
select CRYPTO
|
||||||
select CRYPTO_MICHAEL_MIC
|
select CRYPTO_MICHAEL_MIC
|
||||||
|
select CRC32
|
||||||
---help---
|
---help---
|
||||||
Include software based cipher suites in support of IEEE 802.11i
|
Include software based cipher suites in support of IEEE 802.11i
|
||||||
(aka TGi, WPA, WPA2, WPA-PSK, etc.) for use with TKIP enabled
|
(aka TGi, WPA, WPA2, WPA-PSK, etc.) for use with TKIP enabled
|
||||||
|
|
|
@ -116,6 +116,16 @@ ieee80211softmac_auth_queue(void *data)
|
||||||
kfree(auth);
|
kfree(auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sends a response to an auth challenge (for shared key auth). */
|
||||||
|
static void
|
||||||
|
ieee80211softmac_auth_challenge_response(void *_aq)
|
||||||
|
{
|
||||||
|
struct ieee80211softmac_auth_queue_item *aq = _aq;
|
||||||
|
|
||||||
|
/* Send our response */
|
||||||
|
ieee80211softmac_send_mgt_frame(aq->mac, aq->net, IEEE80211_STYPE_AUTH, aq->state);
|
||||||
|
}
|
||||||
|
|
||||||
/* Handle the auth response from the AP
|
/* Handle the auth response from the AP
|
||||||
* This should be registered with ieee80211 as handle_auth
|
* This should be registered with ieee80211 as handle_auth
|
||||||
*/
|
*/
|
||||||
|
@ -197,24 +207,30 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth)
|
||||||
case IEEE80211SOFTMAC_AUTH_SHARED_CHALLENGE:
|
case IEEE80211SOFTMAC_AUTH_SHARED_CHALLENGE:
|
||||||
/* Check to make sure we have a challenge IE */
|
/* Check to make sure we have a challenge IE */
|
||||||
data = (u8 *)auth->info_element;
|
data = (u8 *)auth->info_element;
|
||||||
if(*data++ != MFIE_TYPE_CHALLENGE){
|
if (*data++ != MFIE_TYPE_CHALLENGE) {
|
||||||
printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n");
|
printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Save the challenge */
|
/* Save the challenge */
|
||||||
spin_lock_irqsave(&mac->lock, flags);
|
spin_lock_irqsave(&mac->lock, flags);
|
||||||
net->challenge_len = *data++;
|
net->challenge_len = *data++;
|
||||||
if(net->challenge_len > WLAN_AUTH_CHALLENGE_LEN)
|
if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN)
|
||||||
net->challenge_len = WLAN_AUTH_CHALLENGE_LEN;
|
net->challenge_len = WLAN_AUTH_CHALLENGE_LEN;
|
||||||
if(net->challenge != NULL)
|
if (net->challenge != NULL)
|
||||||
kfree(net->challenge);
|
kfree(net->challenge);
|
||||||
net->challenge = kmalloc(net->challenge_len, GFP_ATOMIC);
|
net->challenge = kmalloc(net->challenge_len, GFP_ATOMIC);
|
||||||
memcpy(net->challenge, data, net->challenge_len);
|
memcpy(net->challenge, data, net->challenge_len);
|
||||||
aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE;
|
aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE;
|
||||||
spin_unlock_irqrestore(&mac->lock, flags);
|
|
||||||
|
|
||||||
/* Send our response */
|
/* We reuse the work struct from the auth request here.
|
||||||
ieee80211softmac_send_mgt_frame(mac, aq->net, IEEE80211_STYPE_AUTH, aq->state);
|
* It is safe to do so as each one is per-request, and
|
||||||
|
* at this point (dealing with authentication response)
|
||||||
|
* we have obviously already sent the initial auth
|
||||||
|
* request. */
|
||||||
|
cancel_delayed_work(&aq->work);
|
||||||
|
INIT_WORK(&aq->work, &ieee80211softmac_auth_challenge_response, (void *)aq);
|
||||||
|
schedule_work(&aq->work);
|
||||||
|
spin_unlock_irqrestore(&mac->lock, flags);
|
||||||
return 0;
|
return 0;
|
||||||
case IEEE80211SOFTMAC_AUTH_SHARED_PASS:
|
case IEEE80211SOFTMAC_AUTH_SHARED_PASS:
|
||||||
kfree(net->challenge);
|
kfree(net->challenge);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче