diff options
-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); |