aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-04-04 10:10:42 +0200
committerDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-04-04 10:26:01 +0200
commit09b10abbb61b9c14ae8647e75515ea6d7dd2bc34 (patch)
tree89782ea4078c113cf091225e6d6b811d917ae763
parentf32eca25cea4acf28c4ba62963da6fd20256fc8b (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.h1
-rw-r--r--drivers/staging/cw1200/sta.c8
-rw-r--r--drivers/staging/cw1200/txrx.c24
-rw-r--r--drivers/staging/cw1200/txrx.h2
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);