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 | ALG_CCMP, | 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 | * enum ieee80211_key_flags - key flags | 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 | ieee80211_key_link(key, sdata, sta); | 105 | ieee80211_key_link(key, sdata, sta); |
| 99 | 106 | ||
| 100 | if (set_tx_key || (!sta && !sdata->default_key && key)) | 107 | if (set_tx_key || (!sta && !sdata->default_key && key)) |