Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19065
b: refs/heads/master
c: b6daa25
h: refs/heads/master
i:
  19063: 62c5d74
v: v3
  • Loading branch information
Zhu Yi authored and John W. Linville committed Jan 27, 2006
1 parent 4a26463 commit 33c991b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f95af5bb546a9e7f46ed10f5e0dbe1e42a77884
refs/heads/master: b6daa25d653f23252b340cbd7d2153d0b338e44c
22 changes: 17 additions & 5 deletions trunk/net/ieee80211/ieee80211_rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
u8 src[ETH_ALEN];
struct ieee80211_crypt_data *crypt = NULL;
int keyidx = 0;
int can_be_decrypted = 0;

hdr = (struct ieee80211_hdr_4addr *)skb->data;
stats = &ieee->stats;
Expand Down Expand Up @@ -410,12 +411,23 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
return 1;
}

if (is_multicast_ether_addr(hdr->addr1)
? ieee->host_mc_decrypt : ieee->host_decrypt) {
can_be_decrypted = (is_multicast_ether_addr(hdr->addr1) ||
is_broadcast_ether_addr(hdr->addr2)) ?
ieee->host_mc_decrypt : ieee->host_decrypt;

if (can_be_decrypted) {
int idx = 0;
if (skb->len >= hdrlen + 3)
if (skb->len >= hdrlen + 3) {
/* Top two-bits of byte 3 are the key index */
idx = skb->data[hdrlen + 3] >> 6;
}

/* ieee->crypt[] is WEP_KEY (4) in length. Given that idx
* is only allowed 2-bits of storage, no value of idx can
* be provided via above code that would result in idx
* being out of range */
crypt = ieee->crypt[idx];

#ifdef NOT_YET
sta = NULL;

Expand Down Expand Up @@ -553,7 +565,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,

/* skb: hdr + (possibly fragmented, possibly encrypted) payload */

if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) &&
if ((fc & IEEE80211_FCTL_PROTECTED) && can_be_decrypted &&
(keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0)
goto rx_dropped;

Expand Down Expand Up @@ -617,7 +629,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,

/* skb: hdr + (possible reassembled) full MSDU payload; possibly still
* encrypted/authenticated */
if (ieee->host_decrypt && (fc & IEEE80211_FCTL_PROTECTED) &&
if ((fc & IEEE80211_FCTL_PROTECTED) && can_be_decrypted &&
ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
goto rx_dropped;

Expand Down

0 comments on commit 33c991b

Please sign in to comment.