diff options
Diffstat (limited to 'net/wireless')
| -rw-r--r-- | net/wireless/Kconfig | 10 | ||||
| -rw-r--r-- | net/wireless/lib80211_crypt_ccmp.c | 2 | ||||
| -rw-r--r-- | net/wireless/lib80211_crypt_tkip.c | 4 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 11 |
4 files changed, 27 insertions, 0 deletions
diff --git a/net/wireless/Kconfig b/net/wireless/Kconfig index e28e2b8fa436..092ae6faccca 100644 --- a/net/wireless/Kconfig +++ b/net/wireless/Kconfig | |||
| @@ -102,3 +102,13 @@ config LIB80211_CRYPT_CCMP | |||
| 102 | 102 | ||
| 103 | config LIB80211_CRYPT_TKIP | 103 | config LIB80211_CRYPT_TKIP |
| 104 | tristate | 104 | tristate |
| 105 | |||
| 106 | config LIB80211_DEBUG | ||
| 107 | bool "lib80211 debugging messages" | ||
| 108 | depends on LIB80211 | ||
| 109 | default n | ||
| 110 | ---help--- | ||
| 111 | You can enable this if you want verbose debugging messages | ||
| 112 | from lib80211. | ||
| 113 | |||
| 114 | If unsure, say N. | ||
diff --git a/net/wireless/lib80211_crypt_ccmp.c b/net/wireless/lib80211_crypt_ccmp.c index db428194c16a..2301dc1edc4c 100644 --- a/net/wireless/lib80211_crypt_ccmp.c +++ b/net/wireless/lib80211_crypt_ccmp.c | |||
| @@ -337,6 +337,7 @@ static int lib80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
| 337 | pos += 8; | 337 | pos += 8; |
| 338 | 338 | ||
| 339 | if (ccmp_replay_check(pn, key->rx_pn)) { | 339 | if (ccmp_replay_check(pn, key->rx_pn)) { |
| 340 | #ifdef CONFIG_LIB80211_DEBUG | ||
| 340 | if (net_ratelimit()) { | 341 | if (net_ratelimit()) { |
| 341 | printk(KERN_DEBUG "CCMP: replay detected: STA=%pM " | 342 | printk(KERN_DEBUG "CCMP: replay detected: STA=%pM " |
| 342 | "previous PN %02x%02x%02x%02x%02x%02x " | 343 | "previous PN %02x%02x%02x%02x%02x%02x " |
| @@ -346,6 +347,7 @@ static int lib80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
| 346 | key->rx_pn[3], key->rx_pn[4], key->rx_pn[5], | 347 | key->rx_pn[3], key->rx_pn[4], key->rx_pn[5], |
| 347 | pn[0], pn[1], pn[2], pn[3], pn[4], pn[5]); | 348 | pn[0], pn[1], pn[2], pn[3], pn[4], pn[5]); |
| 348 | } | 349 | } |
| 350 | #endif | ||
| 349 | key->dot11RSNAStatsCCMPReplays++; | 351 | key->dot11RSNAStatsCCMPReplays++; |
| 350 | return -4; | 352 | return -4; |
| 351 | } | 353 | } |
diff --git a/net/wireless/lib80211_crypt_tkip.c b/net/wireless/lib80211_crypt_tkip.c index 7e8e22bfed90..c36287399d7e 100644 --- a/net/wireless/lib80211_crypt_tkip.c +++ b/net/wireless/lib80211_crypt_tkip.c | |||
| @@ -465,12 +465,14 @@ static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
| 465 | pos += 8; | 465 | pos += 8; |
| 466 | 466 | ||
| 467 | if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) { | 467 | if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) { |
| 468 | #ifdef CONFIG_LIB80211_DEBUG | ||
| 468 | if (net_ratelimit()) { | 469 | if (net_ratelimit()) { |
| 469 | printk(KERN_DEBUG "TKIP: replay detected: STA=%pM" | 470 | printk(KERN_DEBUG "TKIP: replay detected: STA=%pM" |
| 470 | " previous TSC %08x%04x received TSC " | 471 | " previous TSC %08x%04x received TSC " |
| 471 | "%08x%04x\n", hdr->addr2, | 472 | "%08x%04x\n", hdr->addr2, |
| 472 | tkey->rx_iv32, tkey->rx_iv16, iv32, iv16); | 473 | tkey->rx_iv32, tkey->rx_iv16, iv32, iv16); |
| 473 | } | 474 | } |
| 475 | #endif | ||
| 474 | tkey->dot11RSNAStatsTKIPReplays++; | 476 | tkey->dot11RSNAStatsTKIPReplays++; |
| 475 | return -4; | 477 | return -4; |
| 476 | } | 478 | } |
| @@ -505,10 +507,12 @@ static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
| 505 | * it needs to be recalculated for the next packet. */ | 507 | * it needs to be recalculated for the next packet. */ |
| 506 | tkey->rx_phase1_done = 0; | 508 | tkey->rx_phase1_done = 0; |
| 507 | } | 509 | } |
| 510 | #ifdef CONFIG_LIB80211_DEBUG | ||
| 508 | if (net_ratelimit()) { | 511 | if (net_ratelimit()) { |
| 509 | printk(KERN_DEBUG "TKIP: ICV error detected: STA=" | 512 | printk(KERN_DEBUG "TKIP: ICV error detected: STA=" |
| 510 | "%pM\n", hdr->addr2); | 513 | "%pM\n", hdr->addr2); |
| 511 | } | 514 | } |
| 515 | #endif | ||
| 512 | tkey->dot11RSNAStatsTKIPICVErrors++; | 516 | tkey->dot11RSNAStatsTKIPICVErrors++; |
| 513 | return -5; | 517 | return -5; |
| 514 | } | 518 | } |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 1e728fff474e..31b807af3235 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
| @@ -1908,6 +1908,11 @@ static int nl80211_get_mesh_params(struct sk_buff *skb, | |||
| 1908 | if (err) | 1908 | if (err) |
| 1909 | return err; | 1909 | return err; |
| 1910 | 1910 | ||
| 1911 | if (!drv->ops->get_mesh_params) { | ||
| 1912 | err = -EOPNOTSUPP; | ||
| 1913 | goto out; | ||
| 1914 | } | ||
| 1915 | |||
| 1911 | /* Get the mesh params */ | 1916 | /* Get the mesh params */ |
| 1912 | rtnl_lock(); | 1917 | rtnl_lock(); |
| 1913 | err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params); | 1918 | err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params); |
| @@ -2017,6 +2022,11 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info) | |||
| 2017 | if (err) | 2022 | if (err) |
| 2018 | return err; | 2023 | return err; |
| 2019 | 2024 | ||
| 2025 | if (!drv->ops->set_mesh_params) { | ||
| 2026 | err = -EOPNOTSUPP; | ||
| 2027 | goto out; | ||
| 2028 | } | ||
| 2029 | |||
| 2020 | /* This makes sure that there aren't more than 32 mesh config | 2030 | /* This makes sure that there aren't more than 32 mesh config |
| 2021 | * parameters (otherwise our bitfield scheme would not work.) */ | 2031 | * parameters (otherwise our bitfield scheme would not work.) */ |
| 2022 | BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32); | 2032 | BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32); |
| @@ -2061,6 +2071,7 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info) | |||
| 2061 | err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask); | 2071 | err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask); |
| 2062 | rtnl_unlock(); | 2072 | rtnl_unlock(); |
| 2063 | 2073 | ||
| 2074 | out: | ||
| 2064 | /* cleanup */ | 2075 | /* cleanup */ |
| 2065 | cfg80211_put_dev(drv); | 2076 | cfg80211_put_dev(drv); |
| 2066 | dev_put(dev); | 2077 | dev_put(dev); |
