From: Johannes Berg <johannes@sipsolutions.net>
To: John Linville <linville@tuxdriver.com>
Cc: linux-wireless <linux-wireless@vger.kernel.org>
Subject: [PATCH] mac80211: pass station instead of address to update_tkip_key
Date: Tue, 19 Jan 2010 14:21:42 +0100 [thread overview]
Message-ID: <1263907302.12555.27.camel@johannes.local> (raw)
When a TKIP key is updated, we should pass the station
pointer instead of just the address, since drivers can
use that to store their own data.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
drivers/net/wireless/b43/main.c | 10 +++++++---
drivers/net/wireless/iwlwifi/iwl-agn.c | 7 +++++--
include/net/mac80211.h | 5 +++--
net/mac80211/driver-ops.h | 7 ++++---
net/mac80211/driver-trace.h | 10 +++++-----
net/mac80211/tkip.c | 9 +--------
6 files changed, 25 insertions(+), 23 deletions(-)
--- wireless-testing.orig/drivers/net/wireless/b43/main.c 2010-01-16 20:18:14.000000000 +0100
+++ wireless-testing/drivers/net/wireless/b43/main.c 2010-01-19 14:20:57.000000000 +0100
@@ -844,8 +844,9 @@ static void rx_tkip_phase1_write(struct
}
static void b43_op_update_tkip_key(struct ieee80211_hw *hw,
- struct ieee80211_key_conf *keyconf, const u8 *addr,
- u32 iv32, u16 *phase1key)
+ struct ieee80211_key_conf *keyconf,
+ struct ieee80211_sta *sta,
+ u32 iv32, u16 *phase1key)
{
struct b43_wl *wl = hw_to_b43_wl(hw);
struct b43_wldev *dev;
@@ -863,7 +864,10 @@ static void b43_op_update_tkip_key(struc
keymac_write(dev, index, NULL); /* First zero out mac to avoid race */
rx_tkip_phase1_write(dev, index, iv32, phase1key);
- keymac_write(dev, index, addr);
+ /* only pairwise TKIP keys are supported right now */
+ if (WARN_ON(!sta))
+ goto out_unlock;
+ keymac_write(dev, index, sta->addr);
out_unlock:
mutex_unlock(&wl->mutex);
--- wireless-testing.orig/drivers/net/wireless/iwlwifi/iwl-agn.c 2010-01-16 20:18:16.000000000 +0100
+++ wireless-testing/drivers/net/wireless/iwlwifi/iwl-agn.c 2010-01-19 14:20:57.000000000 +0100
@@ -2839,14 +2839,17 @@ void iwl_config_ap(struct iwl_priv *priv
}
static void iwl_mac_update_tkip_key(struct ieee80211_hw *hw,
- struct ieee80211_key_conf *keyconf, const u8 *addr,
+ struct ieee80211_key_conf *keyconf,
+ struct ieee80211_sta *sta,
u32 iv32, u16 *phase1key)
{
struct iwl_priv *priv = hw->priv;
IWL_DEBUG_MAC80211(priv, "enter\n");
- iwl_update_tkip_key(priv, keyconf, addr, iv32, phase1key);
+ iwl_update_tkip_key(priv, keyconf,
+ sta ? sta->addr : iwl_bcast_addr,
+ iv32, phase1key);
IWL_DEBUG_MAC80211(priv, "leave\n");
}
--- wireless-testing.orig/include/net/mac80211.h 2010-01-17 15:36:27.000000000 +0100
+++ wireless-testing/include/net/mac80211.h 2010-01-19 14:20:57.000000000 +0100
@@ -1618,8 +1618,9 @@ struct ieee80211_ops {
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
struct ieee80211_key_conf *key);
void (*update_tkip_key)(struct ieee80211_hw *hw,
- struct ieee80211_key_conf *conf, const u8 *address,
- u32 iv32, u16 *phase1key);
+ struct ieee80211_key_conf *conf,
+ struct ieee80211_sta *sta,
+ u32 iv32, u16 *phase1key);
int (*hw_scan)(struct ieee80211_hw *hw,
struct cfg80211_scan_request *req);
void (*sw_scan_start)(struct ieee80211_hw *hw);
--- wireless-testing.orig/net/mac80211/driver-ops.h 2010-01-16 20:18:21.000000000 +0100
+++ wireless-testing/net/mac80211/driver-ops.h 2010-01-19 14:20:57.000000000 +0100
@@ -138,15 +138,16 @@ static inline int drv_set_key(struct iee
static inline void drv_update_tkip_key(struct ieee80211_local *local,
struct ieee80211_key_conf *conf,
- const u8 *address, u32 iv32,
+ struct sta_info *sta, u32 iv32,
u16 *phase1key)
{
might_sleep();
if (local->ops->update_tkip_key)
- local->ops->update_tkip_key(&local->hw, conf, address,
+ local->ops->update_tkip_key(&local->hw, conf,
+ sta ? &sta->sta : NULL,
iv32, phase1key);
- trace_drv_update_tkip_key(local, conf, address, iv32);
+ trace_drv_update_tkip_key(local, conf, sta, iv32);
}
static inline int drv_hw_scan(struct ieee80211_local *local,
--- wireless-testing.orig/net/mac80211/driver-trace.h 2010-01-16 20:18:21.000000000 +0100
+++ wireless-testing/net/mac80211/driver-trace.h 2010-01-19 14:20:57.000000000 +0100
@@ -332,25 +332,25 @@ TRACE_EVENT(drv_set_key,
TRACE_EVENT(drv_update_tkip_key,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_key_conf *conf,
- const u8 *address, u32 iv32),
+ struct sta_info *sta, u32 iv32),
TP_ARGS(local, conf, address, iv32),
TP_STRUCT__entry(
LOCAL_ENTRY
- __array(u8, addr, 6)
+ STA_ENTRY
__field(u32, iv32)
),
TP_fast_assign(
LOCAL_ASSIGN;
- memcpy(__entry->addr, address, 6);
+ STA_ASSIGN;
__entry->iv32 = iv32;
),
TP_printk(
- LOCAL_PR_FMT " addr:%pM iv32:%#x",
- LOCAL_PR_ARG, __entry->addr, __entry->iv32
+ LOCAL_PR_FMT STA_PR_FMT " iv32:%#x",
+ LOCAL_PR_ARG,STA_PR_ARG, __entry->iv32
)
);
--- wireless-testing.orig/net/mac80211/tkip.c 2010-01-16 20:19:10.000000000 +0100
+++ wireless-testing/net/mac80211/tkip.c 2010-01-19 14:20:57.000000000 +0100
@@ -304,14 +304,7 @@ int ieee80211_tkip_decrypt_data(struct c
if (key->local->ops->update_tkip_key &&
key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
key->u.tkip.rx[queue].state != TKIP_STATE_PHASE1_HW_UPLOADED) {
- static const u8 bcast[ETH_ALEN] =
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- const u8 *sta_addr = key->sta->sta.addr;
-
- if (is_multicast_ether_addr(ra))
- sta_addr = bcast;
-
- drv_update_tkip_key(key->local, &key->conf, sta_addr,
+ drv_update_tkip_key(key->local, &key->conf, key->sta,
iv32, key->u.tkip.rx[queue].p1k);
key->u.tkip.rx[queue].state = TKIP_STATE_PHASE1_HW_UPLOADED;
}
next reply other threads:[~2010-01-19 13:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-19 13:21 Johannes Berg [this message]
2010-01-19 14:06 ` [PATCH] mac80211: pass station instead of address to update_tkip_key Julian Calaby
2010-01-19 17:53 ` Johannes Berg
2010-01-20 10:11 ` [PATCH v2] " Johannes Berg
2010-01-21 10:40 ` [PATCH v3] mac80211: pass vif and station " Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1263907302.12555.27.camel@johannes.local \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox