diff options
author | Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> | 2011-04-04 10:10:42 +0200 |
---|---|---|
committer | Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> | 2011-04-04 10:26:01 +0200 |
commit | 09b10abbb61b9c14ae8647e75515ea6d7dd2bc34 (patch) | |
tree | 89782ea4078c113cf091225e6d6b811d917ae763 | |
parent | f32eca25cea4acf28c4ba62963da6fd20256fc8b (diff) |
Revert "WLAN: CW1200: Fix for broadcast keys."2.6.38-wlan_driver-rc1
This reverts commit 5cfe9e74f003b558251f7ffa4ef3f936a1e14b6f.
The patch does not solve problem with TKIP broadcasts in AP mode.
Futher investigation is needed.
-rw-r--r-- | drivers/staging/cw1200/cw1200.h | 1 | ||||
-rw-r--r-- | drivers/staging/cw1200/sta.c | 8 | ||||
-rw-r--r-- | drivers/staging/cw1200/txrx.c | 24 | ||||
-rw-r--r-- | drivers/staging/cw1200/txrx.h | 2 |
4 files changed, 8 insertions, 27 deletions
diff --git a/drivers/staging/cw1200/cw1200.h b/drivers/staging/cw1200/cw1200.h index d07a8838728..1c6984de052 100644 --- a/drivers/staging/cw1200/cw1200.h +++ b/drivers/staging/cw1200/cw1200.h @@ -151,7 +151,6 @@ struct cw1200_common { s8 wep_default_key_id; struct work_struct wep_key_work; u32 key_map; - int broadcast_key_cnt; struct wsm_add_key keys[WSM_KEY_MAX_INDEX + 1]; unsigned long rx_timestamp; diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c index 26ad16fe751..07bed75b745 100644 --- a/drivers/staging/cw1200/sta.c +++ b/drivers/staging/cw1200/sta.c @@ -378,7 +378,7 @@ int cw1200_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd, u8 *peer_addr = NULL; int pairwise = (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) ? 1 : 0; - int idx = cw1200_alloc_key(priv, pairwise); + int idx = cw1200_alloc_key(priv); struct wsm_add_key *wsm_key = &priv->keys[idx]; if (idx < 0) { @@ -498,11 +498,7 @@ int cw1200_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd, } cw1200_free_key(priv, wsm_key.entryIndex); - /* It can be only one broadcast key in a time. */ - if (wsm_key.entryIndex || !priv->broadcast_key_cnt) - ret = wsm_remove_key(priv, &wsm_key); - else - ret = 0; + ret = wsm_remove_key(priv, &wsm_key); } else { BUG_ON("Unsupported command"); } diff --git a/drivers/staging/cw1200/txrx.c b/drivers/staging/cw1200/txrx.c index c3cf69b1c03..c8e4d990a01 100644 --- a/drivers/staging/cw1200/txrx.c +++ b/drivers/staging/cw1200/txrx.c @@ -497,19 +497,13 @@ void cw1200_tx_confirm_cb(struct cw1200_common *priv, /* ******************************************************************** */ /* Security */ -int cw1200_alloc_key(struct cw1200_common *priv, int pairwise) +int cw1200_alloc_key(struct cw1200_common *priv) { int idx; - /* First key entry is always allocated for broadcast keys */ - if (!pairwise) { - ++priv->broadcast_key_cnt; - idx = 0; - } else { - idx = ffs(~(priv->key_map | 1)) - 1; - if (idx < 1 || idx > WSM_KEY_MAX_INDEX) - return -1; - } + idx = ffs(~priv->key_map) - 1; + if (idx < 0 || idx > WSM_KEY_MAX_INDEX) + return -1; priv->key_map |= 1 << idx; priv->keys[idx].entryIndex = idx; @@ -518,14 +512,7 @@ int cw1200_alloc_key(struct cw1200_common *priv, int pairwise) void cw1200_free_key(struct cw1200_common *priv, int idx) { - if (!idx) { - --priv->broadcast_key_cnt; - BUG_ON(priv->broadcast_key_cnt < 0); - if (priv->broadcast_key_cnt) - return; - } else - BUG_ON(!(priv->key_map & (1 << idx))); - + BUG_ON(!(priv->key_map & (1 << idx))); memset(&priv->keys[idx], 0, sizeof(priv->keys[idx])); priv->key_map &= ~(1 << idx); } @@ -533,7 +520,6 @@ void cw1200_free_key(struct cw1200_common *priv, int idx) void cw1200_free_keys(struct cw1200_common *priv) { memset(&priv->keys, 0, sizeof(priv->keys)); - priv->broadcast_key_cnt = 0; priv->key_map = 0; } diff --git a/drivers/staging/cw1200/txrx.h b/drivers/staging/cw1200/txrx.h index c1800854a1b..2be3af99d03 100644 --- a/drivers/staging/cw1200/txrx.h +++ b/drivers/staging/cw1200/txrx.h @@ -76,7 +76,7 @@ void cw1200_tx_timeout(struct work_struct *work); /* ******************************************************************** */ /* Security */ -int cw1200_alloc_key(struct cw1200_common *priv, int pairwise); +int cw1200_alloc_key(struct cw1200_common *priv); void cw1200_free_key(struct cw1200_common *priv, int idx); void cw1200_free_keys(struct cw1200_common *priv); int cw1200_upload_keys(struct cw1200_common *priv); |