This patch makes mac80211 refuse a WEP key whose length is not WEP40 nor WEP104.
Unified · Split
| @@ -595,6 +595,15 @@ enum ieee80211_key_alg { · 594 unmodified lines | ||
| 595 | 595 | ALG_CCMP, |
| 596 | 596 | }; |
| 597 | 597 | |
| 598 | +/** | |
| 599 | + * enum ieee80211_key_len - key length | |
| 600 | + * @WEP40: WEP 5 byte long key | |
| 601 | + * @WEP104: WEP 13 byte long key | |
| 602 | + */ | |
| 603 | +enum ieee80211_key_len { | |
| 604 | + LEN_WEP40 = 5, | |
| 605 | + LEN_WEP104 = 13, | |
| 606 | +}; | |
| 598 | 607 | |
| 599 | 608 | /** |
| 600 | 609 | * enum ieee80211_key_flags - key flags |
| @@ -95,6 +95,13 @@ static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr, · 94 unmodified lines | ||
| 95 | 95 | } |
| 96 | 96 | } |
| 97 | 97 | |
| 98 | + if (alg == ALG_WEP && | |
| 99 | + key_len != LEN_WEP40 && key_len != LEN_WEP104) { | |
| 100 | + ieee80211_key_free(key); | |
| 101 | + err = -EINVAL; | |
| 102 | + goto out_unlock; | |
| 103 | + } | |
| 104 | + | |
| 98 | 105 | ieee80211_key_link(key, sdata, sta); |
| 99 | 106 | |
| 100 | 107 | if (set_tx_key || (!sta && !sdata->default_key && key)) |