> + * @IEEE80211_KEY_FLAG_RX_ONLY: Set by mac80211 to indicate that the key
> + *      must not be used for TX (yet).

I'm not sure that's relevant, since you have one key pointer for TX?

> + * @IEEE80211_KEY_FLAG_SET_TX: Set by mac80211 to indicate that a previously
> + *      installed key with IEEE80211_KEY_FLAG_RX_ONLY should take over TX 
> also.

That also doesn't seem relevant ...

Oh, all of this is for HW offloads?

I _think_ I would prefer to have new key ops instead. Now you'd have 

SET_KEY / <empty flags>
SET_KEY / RX_ONLY
SET_KEY / SET_TX

but I think maybe

SET_KEY
SET_KEY_RX_ONLY
KEY_ENABLE_TX

would make more sense?

> +     if (pairwise && params->flag == NL80211_KEY_SET_TX) {
> +             mutex_lock(&local->sta_mtx);
> +             sta = sta_info_get_bss(sdata, mac_addr);
> +
> +             if (!sta ||
> +                !(key = rcu_dereference(sta->ptk[key_idx])) ||

indentation here is off by one

> +                !(key->conf.flags | IEEE80211_KEY_FLAG_RX_ONLY)) {

that makes no sense, should be & I guess

> -     /* PTK only using key ID 0 needs special handling on rekey */
> -     if (new_key && sta && ptk0rekey) {
> +     /* PTK rekey without Extended Key ID needs special handling */
> +     if (new_key && pairwise && sta &&
> +         !test_sta_flag(sta, WLAN_STA_EXT_KEY_ID)) {
>               local = old_key->local;
>               sdata = old_key->sdata;

This seems wrong, even if you have ext key ID support and everything,
but you do 0 -> 0 rekeying, then you still need all the special handling
(in fact also then if you go 1->1!). So it seems you'd instead want to
see if you're going from a TX key to a TX key with the same key ID, and
then you don't need this flag at all.

> +++ b/net/mac80211/sta_info.c
> @@ -350,6 +350,7 @@ struct sta_info *sta_info_alloc(struct 
> ieee80211_sub_if_data *sdata,
>       sta->sta.max_rx_aggregation_subframes =
>               local->hw.max_rx_aggregation_subframes;
>  
> +     sta->ptk_idx = NUM_DEFAULT_KEYS - 1;

That makes no sense? Why should it be 3? That's invalid anyway?

johannes

Reply via email to