Commit 2a64cc4b authored by David S. Miller's avatar David S. Miller

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6

parents aebb6a84 23976efe
...@@ -64,7 +64,7 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb, ...@@ -64,7 +64,7 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb,
int hdrlen, phdrlen, head_need, tail_need; int hdrlen, phdrlen, head_need, tail_need;
u16 fc; u16 fc;
int prism_header, ret; int prism_header, ret;
struct ieee80211_hdr_4addr *hdr; struct ieee80211_hdr_4addr *fhdr;
iface = netdev_priv(dev); iface = netdev_priv(dev);
local = iface->local; local = iface->local;
...@@ -83,8 +83,8 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb, ...@@ -83,8 +83,8 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb,
phdrlen = 0; phdrlen = 0;
} }
hdr = (struct ieee80211_hdr_4addr *) skb->data; fhdr = (struct ieee80211_hdr_4addr *) skb->data;
fc = le16_to_cpu(hdr->frame_ctl); fc = le16_to_cpu(fhdr->frame_ctl);
if (type == PRISM2_RX_MGMT && (fc & IEEE80211_FCTL_VERS)) { if (type == PRISM2_RX_MGMT && (fc & IEEE80211_FCTL_VERS)) {
printk(KERN_DEBUG "%s: dropped management frame with header " printk(KERN_DEBUG "%s: dropped management frame with header "
...@@ -551,7 +551,7 @@ hostap_rx_frame_wds(local_info_t *local, struct ieee80211_hdr_4addr *hdr, ...@@ -551,7 +551,7 @@ hostap_rx_frame_wds(local_info_t *local, struct ieee80211_hdr_4addr *hdr,
hdr->addr1[2] != 0xff || hdr->addr1[3] != 0xff || hdr->addr1[2] != 0xff || hdr->addr1[3] != 0xff ||
hdr->addr1[4] != 0xff || hdr->addr1[5] != 0xff)) { hdr->addr1[4] != 0xff || hdr->addr1[5] != 0xff)) {
/* RA (or BSSID) is not ours - drop */ /* RA (or BSSID) is not ours - drop */
PDEBUG(DEBUG_EXTRA, "%s: received WDS frame with " PDEBUG(DEBUG_EXTRA2, "%s: received WDS frame with "
"not own or broadcast %s=%s\n", "not own or broadcast %s=%s\n",
local->dev->name, local->dev->name,
fc & IEEE80211_FCTL_FROMDS ? "RA" : "BSSID", fc & IEEE80211_FCTL_FROMDS ? "RA" : "BSSID",
......
...@@ -1930,7 +1930,7 @@ static void handle_pspoll(local_info_t *local, ...@@ -1930,7 +1930,7 @@ static void handle_pspoll(local_info_t *local,
PDEBUG(DEBUG_PS, " PSPOLL and AID[15:14] not set\n"); PDEBUG(DEBUG_PS, " PSPOLL and AID[15:14] not set\n");
return; return;
} }
aid &= ~BIT(15) & ~BIT(14); aid &= ~(BIT(15) | BIT(14));
if (aid == 0 || aid > MAX_AID_TABLE_SIZE) { if (aid == 0 || aid > MAX_AID_TABLE_SIZE) {
PDEBUG(DEBUG_PS, " invalid aid=%d\n", aid); PDEBUG(DEBUG_PS, " invalid aid=%d\n", aid);
return; return;
......
...@@ -533,10 +533,10 @@ static void prism2_detach(struct pcmcia_device *link) ...@@ -533,10 +533,10 @@ static void prism2_detach(struct pcmcia_device *link)
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
#define CFG_CHECK2(fn, retf) \ #define CFG_CHECK2(fn, retf) \
do { int ret = (retf); \ do { int _ret = (retf); \
if (ret != 0) { \ if (_ret != 0) { \
PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", ret); \ PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", _ret); \
cs_error(link, fn, ret); \ cs_error(link, fn, _ret); \
goto next_entry; \ goto next_entry; \
} \ } \
} while (0) } while (0)
......
...@@ -2835,7 +2835,7 @@ static void hostap_passive_scan(unsigned long data) ...@@ -2835,7 +2835,7 @@ static void hostap_passive_scan(unsigned long data)
{ {
local_info_t *local = (local_info_t *) data; local_info_t *local = (local_info_t *) data;
struct net_device *dev = local->dev; struct net_device *dev = local->dev;
u16 channel; u16 chan;
if (local->passive_scan_interval <= 0) if (local->passive_scan_interval <= 0)
return; return;
...@@ -2872,11 +2872,11 @@ static void hostap_passive_scan(unsigned long data) ...@@ -2872,11 +2872,11 @@ static void hostap_passive_scan(unsigned long data)
printk(KERN_DEBUG "%s: passive scan channel %d\n", printk(KERN_DEBUG "%s: passive scan channel %d\n",
dev->name, local->passive_scan_channel); dev->name, local->passive_scan_channel);
channel = local->passive_scan_channel; chan = local->passive_scan_channel;
local->passive_scan_state = PASSIVE_SCAN_WAIT; local->passive_scan_state = PASSIVE_SCAN_WAIT;
local->passive_scan_timer.expires = jiffies + HZ / 10; local->passive_scan_timer.expires = jiffies + HZ / 10;
} else { } else {
channel = local->channel; chan = local->channel;
local->passive_scan_state = PASSIVE_SCAN_LISTEN; local->passive_scan_state = PASSIVE_SCAN_LISTEN;
local->passive_scan_timer.expires = jiffies + local->passive_scan_timer.expires = jiffies +
local->passive_scan_interval * HZ; local->passive_scan_interval * HZ;
...@@ -2884,9 +2884,9 @@ static void hostap_passive_scan(unsigned long data) ...@@ -2884,9 +2884,9 @@ static void hostap_passive_scan(unsigned long data)
if (hfa384x_cmd_callback(dev, HFA384X_CMDCODE_TEST | if (hfa384x_cmd_callback(dev, HFA384X_CMDCODE_TEST |
(HFA384X_TEST_CHANGE_CHANNEL << 8), (HFA384X_TEST_CHANGE_CHANNEL << 8),
channel, NULL, 0)) chan, NULL, 0))
printk(KERN_ERR "%s: passive scan channel set %d " printk(KERN_ERR "%s: passive scan channel set %d "
"failed\n", dev->name, channel); "failed\n", dev->name, chan);
add_timer(&local->passive_scan_timer); add_timer(&local->passive_scan_timer);
} }
......
...@@ -594,7 +594,8 @@ void hostap_dump_tx_header(const char *name, const struct hfa384x_tx_frame *tx) ...@@ -594,7 +594,8 @@ void hostap_dump_tx_header(const char *name, const struct hfa384x_tx_frame *tx)
} }
int hostap_80211_header_parse(const struct sk_buff *skb, unsigned char *haddr) static int hostap_80211_header_parse(const struct sk_buff *skb,
unsigned char *haddr)
{ {
struct hostap_interface *iface = netdev_priv(skb->dev); struct hostap_interface *iface = netdev_priv(skb->dev);
local_info_t *local = iface->local; local_info_t *local = iface->local;
...@@ -857,7 +858,6 @@ const struct header_ops hostap_80211_ops = { ...@@ -857,7 +858,6 @@ const struct header_ops hostap_80211_ops = {
.rebuild = eth_rebuild_header, .rebuild = eth_rebuild_header,
.cache = eth_header_cache, .cache = eth_header_cache,
.cache_update = eth_header_cache_update, .cache_update = eth_header_cache_update,
.parse = hostap_80211_header_parse, .parse = hostap_80211_header_parse,
}; };
EXPORT_SYMBOL(hostap_80211_ops); EXPORT_SYMBOL(hostap_80211_ops);
...@@ -1150,7 +1150,6 @@ EXPORT_SYMBOL(hostap_set_roaming); ...@@ -1150,7 +1150,6 @@ EXPORT_SYMBOL(hostap_set_roaming);
EXPORT_SYMBOL(hostap_set_auth_algs); EXPORT_SYMBOL(hostap_set_auth_algs);
EXPORT_SYMBOL(hostap_dump_rx_header); EXPORT_SYMBOL(hostap_dump_rx_header);
EXPORT_SYMBOL(hostap_dump_tx_header); EXPORT_SYMBOL(hostap_dump_tx_header);
EXPORT_SYMBOL(hostap_80211_header_parse);
EXPORT_SYMBOL(hostap_80211_get_hdrlen); EXPORT_SYMBOL(hostap_80211_get_hdrlen);
EXPORT_SYMBOL(hostap_get_stats); EXPORT_SYMBOL(hostap_get_stats);
EXPORT_SYMBOL(hostap_setup_dev); EXPORT_SYMBOL(hostap_setup_dev);
......
...@@ -595,6 +595,15 @@ enum ieee80211_key_alg { ...@@ -595,6 +595,15 @@ enum ieee80211_key_alg {
ALG_CCMP, ALG_CCMP,
}; };
/**
* enum ieee80211_key_len - key length
* @WEP40: WEP 5 byte long key
* @WEP104: WEP 13 byte long key
*/
enum ieee80211_key_len {
LEN_WEP40 = 5,
LEN_WEP104 = 13,
};
/** /**
* enum ieee80211_key_flags - key flags * enum ieee80211_key_flags - key flags
......
...@@ -95,6 +95,13 @@ static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr, ...@@ -95,6 +95,13 @@ static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr,
} }
} }
if (alg == ALG_WEP &&
key_len != LEN_WEP40 && key_len != LEN_WEP104) {
ieee80211_key_free(key);
err = -EINVAL;
goto out_unlock;
}
ieee80211_key_link(key, sdata, sta); ieee80211_key_link(key, sdata, sta);
if (set_tx_key || (!sta && !sdata->default_key && key)) if (set_tx_key || (!sta && !sdata->default_key && key))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment