Linux Audio

Check our new training course

Loading...
v5.14.15
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright 2002-2005, Instant802 Networks, Inc.
   4 * Copyright 2005-2006, Devicescape Software, Inc.
   5 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
   6 * Copyright 2007-2008	Johannes Berg <johannes@sipsolutions.net>
   7 * Copyright 2013-2014  Intel Mobile Communications GmbH
   8 * Copyright 2015-2017	Intel Deutschland GmbH
   9 * Copyright 2018-2020  Intel Corporation
 
 
 
  10 */
  11
  12#include <linux/if_ether.h>
  13#include <linux/etherdevice.h>
  14#include <linux/list.h>
  15#include <linux/rcupdate.h>
  16#include <linux/rtnetlink.h>
  17#include <linux/slab.h>
  18#include <linux/export.h>
  19#include <net/mac80211.h>
  20#include <crypto/algapi.h>
  21#include <asm/unaligned.h>
  22#include "ieee80211_i.h"
  23#include "driver-ops.h"
  24#include "debugfs_key.h"
  25#include "aes_ccm.h"
  26#include "aes_cmac.h"
  27#include "aes_gmac.h"
  28#include "aes_gcm.h"
  29
  30
  31/**
  32 * DOC: Key handling basics
  33 *
  34 * Key handling in mac80211 is done based on per-interface (sub_if_data)
  35 * keys and per-station keys. Since each station belongs to an interface,
  36 * each station key also belongs to that interface.
  37 *
  38 * Hardware acceleration is done on a best-effort basis for algorithms
  39 * that are implemented in software,  for each key the hardware is asked
  40 * to enable that key for offloading but if it cannot do that the key is
  41 * simply kept for software encryption (unless it is for an algorithm
  42 * that isn't implemented in software).
  43 * There is currently no way of knowing whether a key is handled in SW
  44 * or HW except by looking into debugfs.
  45 *
  46 * All key management is internally protected by a mutex. Within all
  47 * other parts of mac80211, key references are, just as STA structure
  48 * references, protected by RCU. Note, however, that some things are
  49 * unprotected, namely the key->sta dereferences within the hardware
  50 * acceleration functions. This means that sta_info_destroy() must
  51 * remove the key which waits for an RCU grace period.
  52 */
  53
  54static const u8 bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
  55
  56static void assert_key_lock(struct ieee80211_local *local)
  57{
  58	lockdep_assert_held(&local->key_mtx);
  59}
  60
  61static void
  62update_vlan_tailroom_need_count(struct ieee80211_sub_if_data *sdata, int delta)
  63{
  64	struct ieee80211_sub_if_data *vlan;
  65
  66	if (sdata->vif.type != NL80211_IFTYPE_AP)
  67		return;
  68
  69	/* crypto_tx_tailroom_needed_cnt is protected by this */
  70	assert_key_lock(sdata->local);
  71
  72	rcu_read_lock();
  73
  74	list_for_each_entry_rcu(vlan, &sdata->u.ap.vlans, u.vlan.list)
  75		vlan->crypto_tx_tailroom_needed_cnt += delta;
  76
  77	rcu_read_unlock();
  78}
  79
  80static void increment_tailroom_need_count(struct ieee80211_sub_if_data *sdata)
  81{
  82	/*
  83	 * When this count is zero, SKB resizing for allocating tailroom
  84	 * for IV or MMIC is skipped. But, this check has created two race
  85	 * cases in xmit path while transiting from zero count to one:
  86	 *
  87	 * 1. SKB resize was skipped because no key was added but just before
  88	 * the xmit key is added and SW encryption kicks off.
  89	 *
  90	 * 2. SKB resize was skipped because all the keys were hw planted but
  91	 * just before xmit one of the key is deleted and SW encryption kicks
  92	 * off.
  93	 *
  94	 * In both the above case SW encryption will find not enough space for
  95	 * tailroom and exits with WARN_ON. (See WARN_ONs at wpa.c)
  96	 *
  97	 * Solution has been explained at
  98	 * http://mid.gmane.org/1308590980.4322.19.camel@jlt3.sipsolutions.net
  99	 */
 100
 101	assert_key_lock(sdata->local);
 102
 103	update_vlan_tailroom_need_count(sdata, 1);
 104
 105	if (!sdata->crypto_tx_tailroom_needed_cnt++) {
 106		/*
 107		 * Flush all XMIT packets currently using HW encryption or no
 108		 * encryption at all if the count transition is from 0 -> 1.
 109		 */
 110		synchronize_net();
 111	}
 112}
 113
 114static void decrease_tailroom_need_count(struct ieee80211_sub_if_data *sdata,
 115					 int delta)
 116{
 117	assert_key_lock(sdata->local);
 118
 119	WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt < delta);
 120
 121	update_vlan_tailroom_need_count(sdata, -delta);
 122	sdata->crypto_tx_tailroom_needed_cnt -= delta;
 123}
 124
 125static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
 126{
 127	struct ieee80211_sub_if_data *sdata = key->sdata;
 128	struct sta_info *sta;
 129	int ret = -EOPNOTSUPP;
 130
 131	might_sleep();
 132
 133	if (key->flags & KEY_FLAG_TAINTED) {
 134		/* If we get here, it's during resume and the key is
 135		 * tainted so shouldn't be used/programmed any more.
 136		 * However, its flags may still indicate that it was
 137		 * programmed into the device (since we're in resume)
 138		 * so clear that flag now to avoid trying to remove
 139		 * it again later.
 140		 */
 141		if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
 142		    !(key->conf.flags & (IEEE80211_KEY_FLAG_GENERATE_MMIC |
 143					 IEEE80211_KEY_FLAG_PUT_MIC_SPACE |
 144					 IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 145			increment_tailroom_need_count(sdata);
 146
 147		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
 148		return -EINVAL;
 149	}
 150
 151	if (!key->local->ops->set_key)
 152		goto out_unsupported;
 153
 154	assert_key_lock(key->local);
 155
 156	sta = key->sta;
 157
 158	/*
 159	 * If this is a per-STA GTK, check if it
 160	 * is supported; if not, return.
 161	 */
 162	if (sta && !(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE) &&
 163	    !ieee80211_hw_check(&key->local->hw, SUPPORTS_PER_STA_GTK))
 164		goto out_unsupported;
 165
 166	if (sta && !sta->uploaded)
 167		goto out_unsupported;
 168
 
 169	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
 170		/*
 171		 * The driver doesn't know anything about VLAN interfaces.
 172		 * Hence, don't send GTKs for VLAN interfaces to the driver.
 173		 */
 174		if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
 175			ret = 1;
 176			goto out_unsupported;
 177		}
 178	}
 179
 180	ret = drv_set_key(key->local, SET_KEY, sdata,
 181			  sta ? &sta->sta : NULL, &key->conf);
 182
 183	if (!ret) {
 184		key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;
 185
 186		if (!(key->conf.flags & (IEEE80211_KEY_FLAG_GENERATE_MMIC |
 187					 IEEE80211_KEY_FLAG_PUT_MIC_SPACE |
 188					 IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 189			decrease_tailroom_need_count(sdata, 1);
 190
 191		WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) &&
 192			(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV));
 193
 194		WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_MIC_SPACE) &&
 195			(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC));
 196
 197		return 0;
 198	}
 199
 200	if (ret != -ENOSPC && ret != -EOPNOTSUPP && ret != 1)
 201		sdata_err(sdata,
 202			  "failed to set key (%d, %pM) to hardware (%d)\n",
 203			  key->conf.keyidx,
 204			  sta ? sta->sta.addr : bcast_addr, ret);
 205
 206 out_unsupported:
 207	switch (key->conf.cipher) {
 208	case WLAN_CIPHER_SUITE_WEP40:
 209	case WLAN_CIPHER_SUITE_WEP104:
 210	case WLAN_CIPHER_SUITE_TKIP:
 211	case WLAN_CIPHER_SUITE_CCMP:
 212	case WLAN_CIPHER_SUITE_CCMP_256:
 213	case WLAN_CIPHER_SUITE_GCMP:
 214	case WLAN_CIPHER_SUITE_GCMP_256:
 215	case WLAN_CIPHER_SUITE_AES_CMAC:
 216	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 217	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 218	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 
 
 219		/* all of these we can do in software - if driver can */
 220		if (ret == 1)
 221			return 0;
 222		if (ieee80211_hw_check(&key->local->hw, SW_CRYPTO_CONTROL))
 223			return -EINVAL;
 224		return 0;
 225	default:
 226		return -EINVAL;
 227	}
 228}
 229
 230static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
 231{
 232	struct ieee80211_sub_if_data *sdata;
 233	struct sta_info *sta;
 234	int ret;
 235
 236	might_sleep();
 237
 238	if (!key || !key->local->ops->set_key)
 239		return;
 240
 241	assert_key_lock(key->local);
 242
 243	if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 244		return;
 245
 246	sta = key->sta;
 247	sdata = key->sdata;
 248
 249	if (!(key->conf.flags & (IEEE80211_KEY_FLAG_GENERATE_MMIC |
 250				 IEEE80211_KEY_FLAG_PUT_MIC_SPACE |
 251				 IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 252		increment_tailroom_need_count(sdata);
 253
 254	key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
 255	ret = drv_set_key(key->local, DISABLE_KEY, sdata,
 256			  sta ? &sta->sta : NULL, &key->conf);
 257
 258	if (ret)
 259		sdata_err(sdata,
 260			  "failed to remove key (%d, %pM) from hardware (%d)\n",
 261			  key->conf.keyidx,
 262			  sta ? sta->sta.addr : bcast_addr, ret);
 263}
 264
 265static int _ieee80211_set_tx_key(struct ieee80211_key *key, bool force)
 266{
 267	struct sta_info *sta = key->sta;
 268	struct ieee80211_local *local = key->local;
 269
 270	assert_key_lock(local);
 271
 272	set_sta_flag(sta, WLAN_STA_USES_ENCRYPTION);
 273
 274	sta->ptk_idx = key->conf.keyidx;
 275
 276	if (force || !ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT))
 277		clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
 278	ieee80211_check_fast_xmit(sta);
 279
 280	return 0;
 281}
 282
 283int ieee80211_set_tx_key(struct ieee80211_key *key)
 284{
 285	return _ieee80211_set_tx_key(key, false);
 286}
 287
 288static void ieee80211_pairwise_rekey(struct ieee80211_key *old,
 289				     struct ieee80211_key *new)
 290{
 291	struct ieee80211_local *local = new->local;
 292	struct sta_info *sta = new->sta;
 293	int i;
 294
 295	assert_key_lock(local);
 296
 297	if (new->conf.flags & IEEE80211_KEY_FLAG_NO_AUTO_TX) {
 298		/* Extended Key ID key install, initial one or rekey */
 299
 300		if (sta->ptk_idx != INVALID_PTK_KEYIDX &&
 301		    !ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT)) {
 302			/* Aggregation Sessions with Extended Key ID must not
 303			 * mix MPDUs with different keyIDs within one A-MPDU.
 304			 * Tear down running Tx aggregation sessions and block
 305			 * new Rx/Tx aggregation requests during rekey to
 306			 * ensure there are no A-MPDUs when the driver is not
 307			 * supporting A-MPDU key borders. (Blocking Tx only
 308			 * would be sufficient but WLAN_STA_BLOCK_BA gets the
 309			 * job done for the few ms we need it.)
 310			 */
 311			set_sta_flag(sta, WLAN_STA_BLOCK_BA);
 312			mutex_lock(&sta->ampdu_mlme.mtx);
 313			for (i = 0; i <  IEEE80211_NUM_TIDS; i++)
 314				___ieee80211_stop_tx_ba_session(sta, i,
 315								AGG_STOP_LOCAL_REQUEST);
 316			mutex_unlock(&sta->ampdu_mlme.mtx);
 317		}
 318	} else if (old) {
 319		/* Rekey without Extended Key ID.
 320		 * Aggregation sessions are OK when running on SW crypto.
 321		 * A broken remote STA may cause issues not observed with HW
 322		 * crypto, though.
 323		 */
 324		if (!(old->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 325			return;
 326
 327		/* Stop Tx till we are on the new key */
 328		old->flags |= KEY_FLAG_TAINTED;
 329		ieee80211_clear_fast_xmit(sta);
 330		if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION)) {
 331			set_sta_flag(sta, WLAN_STA_BLOCK_BA);
 332			ieee80211_sta_tear_down_BA_sessions(sta,
 333							    AGG_STOP_LOCAL_REQUEST);
 334		}
 335		if (!wiphy_ext_feature_isset(local->hw.wiphy,
 336					     NL80211_EXT_FEATURE_CAN_REPLACE_PTK0)) {
 337			pr_warn_ratelimited("Rekeying PTK for STA %pM but driver can't safely do that.",
 338					    sta->sta.addr);
 339			/* Flushing the driver queues *may* help prevent
 340			 * the clear text leaks and freezes.
 341			 */
 342			ieee80211_flush_queues(local, old->sdata, false);
 343		}
 344	}
 345}
 346
 347static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
 348					int idx, bool uni, bool multi)
 349{
 350	struct ieee80211_key *key = NULL;
 351
 352	assert_key_lock(sdata->local);
 353
 354	if (idx >= 0 && idx < NUM_DEFAULT_KEYS)
 355		key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 356
 357	if (uni) {
 358		rcu_assign_pointer(sdata->default_unicast_key, key);
 359		ieee80211_check_fast_xmit_iface(sdata);
 360		if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
 361			drv_set_default_unicast_key(sdata->local, sdata, idx);
 362	}
 363
 364	if (multi)
 365		rcu_assign_pointer(sdata->default_multicast_key, key);
 366
 367	ieee80211_debugfs_key_update_default(sdata);
 368}
 369
 370void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx,
 371			       bool uni, bool multi)
 372{
 373	mutex_lock(&sdata->local->key_mtx);
 374	__ieee80211_set_default_key(sdata, idx, uni, multi);
 375	mutex_unlock(&sdata->local->key_mtx);
 376}
 377
 378static void
 379__ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, int idx)
 380{
 381	struct ieee80211_key *key = NULL;
 382
 383	assert_key_lock(sdata->local);
 384
 385	if (idx >= NUM_DEFAULT_KEYS &&
 386	    idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
 387		key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 388
 389	rcu_assign_pointer(sdata->default_mgmt_key, key);
 390
 391	ieee80211_debugfs_key_update_default(sdata);
 392}
 393
 394void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata,
 395				    int idx)
 396{
 397	mutex_lock(&sdata->local->key_mtx);
 398	__ieee80211_set_default_mgmt_key(sdata, idx);
 399	mutex_unlock(&sdata->local->key_mtx);
 400}
 401
 402static void
 403__ieee80211_set_default_beacon_key(struct ieee80211_sub_if_data *sdata, int idx)
 404{
 405	struct ieee80211_key *key = NULL;
 406
 407	assert_key_lock(sdata->local);
 408
 409	if (idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS &&
 410	    idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS +
 411	    NUM_DEFAULT_BEACON_KEYS)
 412		key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 413
 414	rcu_assign_pointer(sdata->default_beacon_key, key);
 415
 416	ieee80211_debugfs_key_update_default(sdata);
 417}
 418
 419void ieee80211_set_default_beacon_key(struct ieee80211_sub_if_data *sdata,
 420				      int idx)
 421{
 422	mutex_lock(&sdata->local->key_mtx);
 423	__ieee80211_set_default_beacon_key(sdata, idx);
 424	mutex_unlock(&sdata->local->key_mtx);
 425}
 426
 427static int ieee80211_key_replace(struct ieee80211_sub_if_data *sdata,
 428				  struct sta_info *sta,
 429				  bool pairwise,
 430				  struct ieee80211_key *old,
 431				  struct ieee80211_key *new)
 432{
 433	int idx;
 434	int ret = 0;
 435	bool defunikey, defmultikey, defmgmtkey, defbeaconkey;
 436
 437	/* caller must provide at least one old/new */
 438	if (WARN_ON(!new && !old))
 439		return 0;
 440
 441	if (new)
 442		list_add_tail_rcu(&new->list, &sdata->key_list);
 443
 444	WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx);
 445
 446	if (new && sta && pairwise) {
 447		/* Unicast rekey needs special handling. With Extended Key ID
 448		 * old is still NULL for the first rekey.
 449		 */
 450		ieee80211_pairwise_rekey(old, new);
 451	}
 452
 453	if (old) {
 454		idx = old->conf.keyidx;
 455
 456		if (old->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
 457			ieee80211_key_disable_hw_accel(old);
 458
 459			if (new)
 460				ret = ieee80211_key_enable_hw_accel(new);
 461		}
 462	} else {
 463		/* new must be provided in case old is not */
 464		idx = new->conf.keyidx;
 465		if (!new->local->wowlan)
 466			ret = ieee80211_key_enable_hw_accel(new);
 467	}
 468
 469	if (ret)
 470		return ret;
 471
 472	if (sta) {
 473		if (pairwise) {
 474			rcu_assign_pointer(sta->ptk[idx], new);
 475			if (new &&
 476			    !(new->conf.flags & IEEE80211_KEY_FLAG_NO_AUTO_TX))
 477				_ieee80211_set_tx_key(new, true);
 478		} else {
 479			rcu_assign_pointer(sta->gtk[idx], new);
 480		}
 481		/* Only needed for transition from no key -> key.
 482		 * Still triggers unnecessary when using Extended Key ID
 483		 * and installing the second key ID the first time.
 484		 */
 485		if (new && !old)
 486			ieee80211_check_fast_rx(sta);
 487	} else {
 488		defunikey = old &&
 489			old == key_mtx_dereference(sdata->local,
 490						sdata->default_unicast_key);
 491		defmultikey = old &&
 492			old == key_mtx_dereference(sdata->local,
 493						sdata->default_multicast_key);
 494		defmgmtkey = old &&
 495			old == key_mtx_dereference(sdata->local,
 496						sdata->default_mgmt_key);
 497		defbeaconkey = old &&
 498			old == key_mtx_dereference(sdata->local,
 499						   sdata->default_beacon_key);
 500
 501		if (defunikey && !new)
 502			__ieee80211_set_default_key(sdata, -1, true, false);
 503		if (defmultikey && !new)
 504			__ieee80211_set_default_key(sdata, -1, false, true);
 505		if (defmgmtkey && !new)
 506			__ieee80211_set_default_mgmt_key(sdata, -1);
 507		if (defbeaconkey && !new)
 508			__ieee80211_set_default_beacon_key(sdata, -1);
 509
 510		rcu_assign_pointer(sdata->keys[idx], new);
 511		if (defunikey && new)
 512			__ieee80211_set_default_key(sdata, new->conf.keyidx,
 513						    true, false);
 514		if (defmultikey && new)
 515			__ieee80211_set_default_key(sdata, new->conf.keyidx,
 516						    false, true);
 517		if (defmgmtkey && new)
 518			__ieee80211_set_default_mgmt_key(sdata,
 519							 new->conf.keyidx);
 520		if (defbeaconkey && new)
 521			__ieee80211_set_default_beacon_key(sdata,
 522							   new->conf.keyidx);
 523	}
 524
 525	if (old)
 526		list_del_rcu(&old->list);
 527
 528	return 0;
 529}
 530
 531struct ieee80211_key *
 532ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
 533		    const u8 *key_data,
 534		    size_t seq_len, const u8 *seq,
 535		    const struct ieee80211_cipher_scheme *cs)
 536{
 537	struct ieee80211_key *key;
 538	int i, j, err;
 539
 540	if (WARN_ON(idx < 0 ||
 541		    idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS +
 542		    NUM_DEFAULT_BEACON_KEYS))
 543		return ERR_PTR(-EINVAL);
 544
 545	key = kzalloc(sizeof(struct ieee80211_key) + key_len, GFP_KERNEL);
 546	if (!key)
 547		return ERR_PTR(-ENOMEM);
 548
 549	/*
 550	 * Default to software encryption; we'll later upload the
 551	 * key to the hardware if possible.
 552	 */
 553	key->conf.flags = 0;
 554	key->flags = 0;
 555
 556	key->conf.cipher = cipher;
 557	key->conf.keyidx = idx;
 558	key->conf.keylen = key_len;
 559	switch (cipher) {
 560	case WLAN_CIPHER_SUITE_WEP40:
 561	case WLAN_CIPHER_SUITE_WEP104:
 562		key->conf.iv_len = IEEE80211_WEP_IV_LEN;
 563		key->conf.icv_len = IEEE80211_WEP_ICV_LEN;
 564		break;
 565	case WLAN_CIPHER_SUITE_TKIP:
 566		key->conf.iv_len = IEEE80211_TKIP_IV_LEN;
 567		key->conf.icv_len = IEEE80211_TKIP_ICV_LEN;
 568		if (seq) {
 569			for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 570				key->u.tkip.rx[i].iv32 =
 571					get_unaligned_le32(&seq[2]);
 572				key->u.tkip.rx[i].iv16 =
 573					get_unaligned_le16(seq);
 574			}
 575		}
 576		spin_lock_init(&key->u.tkip.txlock);
 577		break;
 578	case WLAN_CIPHER_SUITE_CCMP:
 579		key->conf.iv_len = IEEE80211_CCMP_HDR_LEN;
 580		key->conf.icv_len = IEEE80211_CCMP_MIC_LEN;
 581		if (seq) {
 582			for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 583				for (j = 0; j < IEEE80211_CCMP_PN_LEN; j++)
 584					key->u.ccmp.rx_pn[i][j] =
 585						seq[IEEE80211_CCMP_PN_LEN - j - 1];
 586		}
 587		/*
 588		 * Initialize AES key state here as an optimization so that
 589		 * it does not need to be initialized for every packet.
 590		 */
 591		key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(
 592			key_data, key_len, IEEE80211_CCMP_MIC_LEN);
 593		if (IS_ERR(key->u.ccmp.tfm)) {
 594			err = PTR_ERR(key->u.ccmp.tfm);
 595			kfree(key);
 596			return ERR_PTR(err);
 597		}
 598		break;
 599	case WLAN_CIPHER_SUITE_CCMP_256:
 600		key->conf.iv_len = IEEE80211_CCMP_256_HDR_LEN;
 601		key->conf.icv_len = IEEE80211_CCMP_256_MIC_LEN;
 602		for (i = 0; seq && i < IEEE80211_NUM_TIDS + 1; i++)
 603			for (j = 0; j < IEEE80211_CCMP_256_PN_LEN; j++)
 604				key->u.ccmp.rx_pn[i][j] =
 605					seq[IEEE80211_CCMP_256_PN_LEN - j - 1];
 606		/* Initialize AES key state here as an optimization so that
 607		 * it does not need to be initialized for every packet.
 608		 */
 609		key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(
 610			key_data, key_len, IEEE80211_CCMP_256_MIC_LEN);
 611		if (IS_ERR(key->u.ccmp.tfm)) {
 612			err = PTR_ERR(key->u.ccmp.tfm);
 613			kfree(key);
 614			return ERR_PTR(err);
 615		}
 616		break;
 617	case WLAN_CIPHER_SUITE_AES_CMAC:
 618	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 619		key->conf.iv_len = 0;
 620		if (cipher == WLAN_CIPHER_SUITE_AES_CMAC)
 621			key->conf.icv_len = sizeof(struct ieee80211_mmie);
 622		else
 623			key->conf.icv_len = sizeof(struct ieee80211_mmie_16);
 624		if (seq)
 625			for (j = 0; j < IEEE80211_CMAC_PN_LEN; j++)
 626				key->u.aes_cmac.rx_pn[j] =
 627					seq[IEEE80211_CMAC_PN_LEN - j - 1];
 628		/*
 629		 * Initialize AES key state here as an optimization so that
 630		 * it does not need to be initialized for every packet.
 631		 */
 632		key->u.aes_cmac.tfm =
 633			ieee80211_aes_cmac_key_setup(key_data, key_len);
 634		if (IS_ERR(key->u.aes_cmac.tfm)) {
 635			err = PTR_ERR(key->u.aes_cmac.tfm);
 636			kfree(key);
 637			return ERR_PTR(err);
 638		}
 639		break;
 640	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 641	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 642		key->conf.iv_len = 0;
 643		key->conf.icv_len = sizeof(struct ieee80211_mmie_16);
 644		if (seq)
 645			for (j = 0; j < IEEE80211_GMAC_PN_LEN; j++)
 646				key->u.aes_gmac.rx_pn[j] =
 647					seq[IEEE80211_GMAC_PN_LEN - j - 1];
 648		/* Initialize AES key state here as an optimization so that
 649		 * it does not need to be initialized for every packet.
 650		 */
 651		key->u.aes_gmac.tfm =
 652			ieee80211_aes_gmac_key_setup(key_data, key_len);
 653		if (IS_ERR(key->u.aes_gmac.tfm)) {
 654			err = PTR_ERR(key->u.aes_gmac.tfm);
 655			kfree(key);
 656			return ERR_PTR(err);
 657		}
 658		break;
 659	case WLAN_CIPHER_SUITE_GCMP:
 660	case WLAN_CIPHER_SUITE_GCMP_256:
 661		key->conf.iv_len = IEEE80211_GCMP_HDR_LEN;
 662		key->conf.icv_len = IEEE80211_GCMP_MIC_LEN;
 663		for (i = 0; seq && i < IEEE80211_NUM_TIDS + 1; i++)
 664			for (j = 0; j < IEEE80211_GCMP_PN_LEN; j++)
 665				key->u.gcmp.rx_pn[i][j] =
 666					seq[IEEE80211_GCMP_PN_LEN - j - 1];
 667		/* Initialize AES key state here as an optimization so that
 668		 * it does not need to be initialized for every packet.
 669		 */
 670		key->u.gcmp.tfm = ieee80211_aes_gcm_key_setup_encrypt(key_data,
 671								      key_len);
 672		if (IS_ERR(key->u.gcmp.tfm)) {
 673			err = PTR_ERR(key->u.gcmp.tfm);
 674			kfree(key);
 675			return ERR_PTR(err);
 676		}
 677		break;
 678	default:
 679		if (cs) {
 680			if (seq_len && seq_len != cs->pn_len) {
 681				kfree(key);
 682				return ERR_PTR(-EINVAL);
 683			}
 684
 685			key->conf.iv_len = cs->hdr_len;
 686			key->conf.icv_len = cs->mic_len;
 687			for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 688				for (j = 0; j < seq_len; j++)
 689					key->u.gen.rx_pn[i][j] =
 690							seq[seq_len - j - 1];
 691			key->flags |= KEY_FLAG_CIPHER_SCHEME;
 692		}
 693	}
 694	memcpy(key->conf.key, key_data, key_len);
 695	INIT_LIST_HEAD(&key->list);
 696
 697	return key;
 698}
 699
 700static void ieee80211_key_free_common(struct ieee80211_key *key)
 701{
 702	switch (key->conf.cipher) {
 703	case WLAN_CIPHER_SUITE_CCMP:
 704	case WLAN_CIPHER_SUITE_CCMP_256:
 705		ieee80211_aes_key_free(key->u.ccmp.tfm);
 706		break;
 707	case WLAN_CIPHER_SUITE_AES_CMAC:
 708	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 709		ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm);
 710		break;
 711	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 712	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 713		ieee80211_aes_gmac_key_free(key->u.aes_gmac.tfm);
 714		break;
 715	case WLAN_CIPHER_SUITE_GCMP:
 716	case WLAN_CIPHER_SUITE_GCMP_256:
 717		ieee80211_aes_gcm_key_free(key->u.gcmp.tfm);
 718		break;
 719	}
 720	kfree_sensitive(key);
 721}
 722
 723static void __ieee80211_key_destroy(struct ieee80211_key *key,
 724				    bool delay_tailroom)
 725{
 
 
 
 726	if (key->local) {
 727		struct ieee80211_sub_if_data *sdata = key->sdata;
 728
 729		ieee80211_debugfs_key_remove(key);
 730
 731		if (delay_tailroom) {
 732			/* see ieee80211_delayed_tailroom_dec */
 733			sdata->crypto_tx_tailroom_pending_dec++;
 734			schedule_delayed_work(&sdata->dec_tailroom_needed_wk,
 735					      HZ/2);
 736		} else {
 737			decrease_tailroom_need_count(sdata, 1);
 738		}
 739	}
 740
 741	ieee80211_key_free_common(key);
 742}
 743
 744static void ieee80211_key_destroy(struct ieee80211_key *key,
 745				  bool delay_tailroom)
 746{
 747	if (!key)
 748		return;
 749
 750	/*
 751	 * Synchronize so the TX path and rcu key iterators
 752	 * can no longer be using this key before we free/remove it.
 753	 */
 754	synchronize_net();
 755
 756	__ieee80211_key_destroy(key, delay_tailroom);
 757}
 758
 759void ieee80211_key_free_unused(struct ieee80211_key *key)
 760{
 761	WARN_ON(key->sdata || key->local);
 762	ieee80211_key_free_common(key);
 763}
 764
 765static bool ieee80211_key_identical(struct ieee80211_sub_if_data *sdata,
 766				    struct ieee80211_key *old,
 767				    struct ieee80211_key *new)
 768{
 769	u8 tkip_old[WLAN_KEY_LEN_TKIP], tkip_new[WLAN_KEY_LEN_TKIP];
 770	u8 *tk_old, *tk_new;
 771
 772	if (!old || new->conf.keylen != old->conf.keylen)
 773		return false;
 774
 775	tk_old = old->conf.key;
 776	tk_new = new->conf.key;
 777
 778	/*
 779	 * In station mode, don't compare the TX MIC key, as it's never used
 780	 * and offloaded rekeying may not care to send it to the host. This
 781	 * is the case in iwlwifi, for example.
 782	 */
 783	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
 784	    new->conf.cipher == WLAN_CIPHER_SUITE_TKIP &&
 785	    new->conf.keylen == WLAN_KEY_LEN_TKIP &&
 786	    !(new->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
 787		memcpy(tkip_old, tk_old, WLAN_KEY_LEN_TKIP);
 788		memcpy(tkip_new, tk_new, WLAN_KEY_LEN_TKIP);
 789		memset(tkip_old + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY, 0, 8);
 790		memset(tkip_new + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY, 0, 8);
 791		tk_old = tkip_old;
 792		tk_new = tkip_new;
 793	}
 794
 795	return !crypto_memneq(tk_old, tk_new, new->conf.keylen);
 796}
 797
 798int ieee80211_key_link(struct ieee80211_key *key,
 799		       struct ieee80211_sub_if_data *sdata,
 800		       struct sta_info *sta)
 801{
 802	static atomic_t key_color = ATOMIC_INIT(0);
 803	struct ieee80211_key *old_key;
 804	int idx = key->conf.keyidx;
 805	bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
 806	/*
 807	 * We want to delay tailroom updates only for station - in that
 808	 * case it helps roaming speed, but in other cases it hurts and
 809	 * can cause warnings to appear.
 810	 */
 811	bool delay_tailroom = sdata->vif.type == NL80211_IFTYPE_STATION;
 812	int ret = -EOPNOTSUPP;
 813
 814	mutex_lock(&sdata->local->key_mtx);
 
 
 
 
 815
 816	if (sta && pairwise) {
 817		struct ieee80211_key *alt_key;
 818
 
 819		old_key = key_mtx_dereference(sdata->local, sta->ptk[idx]);
 820		alt_key = key_mtx_dereference(sdata->local, sta->ptk[idx ^ 1]);
 821
 822		/* The rekey code assumes that the old and new key are using
 823		 * the same cipher. Enforce the assumption for pairwise keys.
 824		 */
 825		if ((alt_key && alt_key->conf.cipher != key->conf.cipher) ||
 826		    (old_key && old_key->conf.cipher != key->conf.cipher))
 827			goto out;
 828	} else if (sta) {
 829		old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]);
 830	} else {
 831		old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 832	}
 833
 834	/* Non-pairwise keys must also not switch the cipher on rekey */
 835	if (!pairwise) {
 836		if (old_key && old_key->conf.cipher != key->conf.cipher)
 837			goto out;
 838	}
 839
 840	/*
 841	 * Silently accept key re-installation without really installing the
 842	 * new version of the key to avoid nonce reuse or replay issues.
 843	 */
 844	if (ieee80211_key_identical(sdata, old_key, key)) {
 845		ieee80211_key_free_unused(key);
 846		ret = 0;
 847		goto out;
 848	}
 849
 850	key->local = sdata->local;
 851	key->sdata = sdata;
 852	key->sta = sta;
 853
 854	/*
 855	 * Assign a unique ID to every key so we can easily prevent mixed
 856	 * key and fragment cache attacks.
 857	 */
 858	key->color = atomic_inc_return(&key_color);
 859
 860	increment_tailroom_need_count(sdata);
 861
 862	ret = ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
 
 863
 864	if (!ret) {
 865		ieee80211_debugfs_key_add(key);
 866		ieee80211_key_destroy(old_key, delay_tailroom);
 
 
 
 867	} else {
 868		ieee80211_key_free(key, delay_tailroom);
 869	}
 870
 871 out:
 872	mutex_unlock(&sdata->local->key_mtx);
 873
 874	return ret;
 875}
 876
 877void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom)
 878{
 879	if (!key)
 880		return;
 881
 882	/*
 883	 * Replace key with nothingness if it was ever used.
 884	 */
 885	if (key->sdata)
 886		ieee80211_key_replace(key->sdata, key->sta,
 887				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
 888				key, NULL);
 889	ieee80211_key_destroy(key, delay_tailroom);
 890}
 891
 892void ieee80211_reenable_keys(struct ieee80211_sub_if_data *sdata)
 893{
 894	struct ieee80211_key *key;
 895	struct ieee80211_sub_if_data *vlan;
 896
 897	lockdep_assert_wiphy(sdata->local->hw.wiphy);
 
 
 
 898
 899	mutex_lock(&sdata->local->key_mtx);
 900
 901	sdata->crypto_tx_tailroom_needed_cnt = 0;
 902	sdata->crypto_tx_tailroom_pending_dec = 0;
 903
 904	if (sdata->vif.type == NL80211_IFTYPE_AP) {
 905		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
 906			vlan->crypto_tx_tailroom_needed_cnt = 0;
 907			vlan->crypto_tx_tailroom_pending_dec = 0;
 908		}
 909	}
 910
 911	if (ieee80211_sdata_running(sdata)) {
 912		list_for_each_entry(key, &sdata->key_list, list) {
 913			increment_tailroom_need_count(sdata);
 914			ieee80211_key_enable_hw_accel(key);
 915		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 916	}
 917
 918	mutex_unlock(&sdata->local->key_mtx);
 919}
 920
 921void ieee80211_iter_keys(struct ieee80211_hw *hw,
 922			 struct ieee80211_vif *vif,
 923			 void (*iter)(struct ieee80211_hw *hw,
 924				      struct ieee80211_vif *vif,
 925				      struct ieee80211_sta *sta,
 926				      struct ieee80211_key_conf *key,
 927				      void *data),
 928			 void *iter_data)
 929{
 930	struct ieee80211_local *local = hw_to_local(hw);
 931	struct ieee80211_key *key, *tmp;
 932	struct ieee80211_sub_if_data *sdata;
 933
 934	lockdep_assert_wiphy(hw->wiphy);
 935
 936	mutex_lock(&local->key_mtx);
 937	if (vif) {
 938		sdata = vif_to_sdata(vif);
 939		list_for_each_entry_safe(key, tmp, &sdata->key_list, list)
 940			iter(hw, &sdata->vif,
 941			     key->sta ? &key->sta->sta : NULL,
 942			     &key->conf, iter_data);
 943	} else {
 944		list_for_each_entry(sdata, &local->interfaces, list)
 945			list_for_each_entry_safe(key, tmp,
 946						 &sdata->key_list, list)
 947				iter(hw, &sdata->vif,
 948				     key->sta ? &key->sta->sta : NULL,
 949				     &key->conf, iter_data);
 950	}
 951	mutex_unlock(&local->key_mtx);
 952}
 953EXPORT_SYMBOL(ieee80211_iter_keys);
 954
 955static void
 956_ieee80211_iter_keys_rcu(struct ieee80211_hw *hw,
 957			 struct ieee80211_sub_if_data *sdata,
 958			 void (*iter)(struct ieee80211_hw *hw,
 959				      struct ieee80211_vif *vif,
 960				      struct ieee80211_sta *sta,
 961				      struct ieee80211_key_conf *key,
 962				      void *data),
 963			 void *iter_data)
 964{
 965	struct ieee80211_key *key;
 966
 967	list_for_each_entry_rcu(key, &sdata->key_list, list) {
 968		/* skip keys of station in removal process */
 969		if (key->sta && key->sta->removed)
 970			continue;
 971		if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 972			continue;
 973
 974		iter(hw, &sdata->vif,
 975		     key->sta ? &key->sta->sta : NULL,
 976		     &key->conf, iter_data);
 977	}
 978}
 979
 980void ieee80211_iter_keys_rcu(struct ieee80211_hw *hw,
 981			     struct ieee80211_vif *vif,
 982			     void (*iter)(struct ieee80211_hw *hw,
 983					  struct ieee80211_vif *vif,
 984					  struct ieee80211_sta *sta,
 985					  struct ieee80211_key_conf *key,
 986					  void *data),
 987			     void *iter_data)
 988{
 989	struct ieee80211_local *local = hw_to_local(hw);
 990	struct ieee80211_sub_if_data *sdata;
 991
 992	if (vif) {
 993		sdata = vif_to_sdata(vif);
 994		_ieee80211_iter_keys_rcu(hw, sdata, iter, iter_data);
 995	} else {
 996		list_for_each_entry_rcu(sdata, &local->interfaces, list)
 997			_ieee80211_iter_keys_rcu(hw, sdata, iter, iter_data);
 998	}
 999}
1000EXPORT_SYMBOL(ieee80211_iter_keys_rcu);
1001
1002static void ieee80211_free_keys_iface(struct ieee80211_sub_if_data *sdata,
1003				      struct list_head *keys)
1004{
1005	struct ieee80211_key *key, *tmp;
1006
1007	decrease_tailroom_need_count(sdata,
1008				     sdata->crypto_tx_tailroom_pending_dec);
1009	sdata->crypto_tx_tailroom_pending_dec = 0;
1010
1011	ieee80211_debugfs_key_remove_mgmt_default(sdata);
1012	ieee80211_debugfs_key_remove_beacon_default(sdata);
1013
1014	list_for_each_entry_safe(key, tmp, &sdata->key_list, list) {
1015		ieee80211_key_replace(key->sdata, key->sta,
1016				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
1017				key, NULL);
1018		list_add_tail(&key->list, keys);
1019	}
1020
1021	ieee80211_debugfs_key_update_default(sdata);
1022}
1023
1024void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata,
1025			 bool force_synchronize)
1026{
1027	struct ieee80211_local *local = sdata->local;
1028	struct ieee80211_sub_if_data *vlan;
1029	struct ieee80211_sub_if_data *master;
1030	struct ieee80211_key *key, *tmp;
1031	LIST_HEAD(keys);
1032
1033	cancel_delayed_work_sync(&sdata->dec_tailroom_needed_wk);
1034
1035	mutex_lock(&local->key_mtx);
1036
1037	ieee80211_free_keys_iface(sdata, &keys);
1038
1039	if (sdata->vif.type == NL80211_IFTYPE_AP) {
1040		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1041			ieee80211_free_keys_iface(vlan, &keys);
1042	}
1043
1044	if (!list_empty(&keys) || force_synchronize)
1045		synchronize_net();
1046	list_for_each_entry_safe(key, tmp, &keys, list)
1047		__ieee80211_key_destroy(key, false);
1048
1049	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
1050		if (sdata->bss) {
1051			master = container_of(sdata->bss,
1052					      struct ieee80211_sub_if_data,
1053					      u.ap);
1054
1055			WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt !=
1056				     master->crypto_tx_tailroom_needed_cnt);
1057		}
1058	} else {
1059		WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt ||
1060			     sdata->crypto_tx_tailroom_pending_dec);
1061	}
1062
1063	if (sdata->vif.type == NL80211_IFTYPE_AP) {
1064		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1065			WARN_ON_ONCE(vlan->crypto_tx_tailroom_needed_cnt ||
1066				     vlan->crypto_tx_tailroom_pending_dec);
1067	}
1068
1069	mutex_unlock(&local->key_mtx);
1070}
1071
1072void ieee80211_free_sta_keys(struct ieee80211_local *local,
1073			     struct sta_info *sta)
1074{
1075	struct ieee80211_key *key;
1076	int i;
1077
1078	mutex_lock(&local->key_mtx);
1079	for (i = 0; i < ARRAY_SIZE(sta->gtk); i++) {
1080		key = key_mtx_dereference(local, sta->gtk[i]);
1081		if (!key)
1082			continue;
1083		ieee80211_key_replace(key->sdata, key->sta,
1084				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
1085				key, NULL);
1086		__ieee80211_key_destroy(key, key->sdata->vif.type ==
1087					NL80211_IFTYPE_STATION);
1088	}
1089
1090	for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1091		key = key_mtx_dereference(local, sta->ptk[i]);
1092		if (!key)
1093			continue;
1094		ieee80211_key_replace(key->sdata, key->sta,
1095				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
1096				key, NULL);
1097		__ieee80211_key_destroy(key, key->sdata->vif.type ==
1098					NL80211_IFTYPE_STATION);
1099	}
1100
1101	mutex_unlock(&local->key_mtx);
1102}
1103
1104void ieee80211_delayed_tailroom_dec(struct work_struct *wk)
1105{
1106	struct ieee80211_sub_if_data *sdata;
1107
1108	sdata = container_of(wk, struct ieee80211_sub_if_data,
1109			     dec_tailroom_needed_wk.work);
1110
1111	/*
1112	 * The reason for the delayed tailroom needed decrementing is to
1113	 * make roaming faster: during roaming, all keys are first deleted
1114	 * and then new keys are installed. The first new key causes the
1115	 * crypto_tx_tailroom_needed_cnt to go from 0 to 1, which invokes
1116	 * the cost of synchronize_net() (which can be slow). Avoid this
1117	 * by deferring the crypto_tx_tailroom_needed_cnt decrementing on
1118	 * key removal for a while, so if we roam the value is larger than
1119	 * zero and no 0->1 transition happens.
1120	 *
1121	 * The cost is that if the AP switching was from an AP with keys
1122	 * to one without, we still allocate tailroom while it would no
1123	 * longer be needed. However, in the typical (fast) roaming case
1124	 * within an ESS this usually won't happen.
1125	 */
1126
1127	mutex_lock(&sdata->local->key_mtx);
1128	decrease_tailroom_need_count(sdata,
1129				     sdata->crypto_tx_tailroom_pending_dec);
1130	sdata->crypto_tx_tailroom_pending_dec = 0;
1131	mutex_unlock(&sdata->local->key_mtx);
1132}
1133
1134void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
1135				const u8 *replay_ctr, gfp_t gfp)
1136{
1137	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1138
1139	trace_api_gtk_rekey_notify(sdata, bssid, replay_ctr);
1140
1141	cfg80211_gtk_rekey_notify(sdata->dev, bssid, replay_ctr, gfp);
1142}
1143EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_notify);
1144
1145void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
1146			      int tid, struct ieee80211_key_seq *seq)
1147{
1148	struct ieee80211_key *key;
1149	const u8 *pn;
1150
1151	key = container_of(keyconf, struct ieee80211_key, conf);
1152
1153	switch (key->conf.cipher) {
1154	case WLAN_CIPHER_SUITE_TKIP:
1155		if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
1156			return;
1157		seq->tkip.iv32 = key->u.tkip.rx[tid].iv32;
1158		seq->tkip.iv16 = key->u.tkip.rx[tid].iv16;
1159		break;
1160	case WLAN_CIPHER_SUITE_CCMP:
1161	case WLAN_CIPHER_SUITE_CCMP_256:
1162		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1163			return;
1164		if (tid < 0)
1165			pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
1166		else
1167			pn = key->u.ccmp.rx_pn[tid];
1168		memcpy(seq->ccmp.pn, pn, IEEE80211_CCMP_PN_LEN);
1169		break;
1170	case WLAN_CIPHER_SUITE_AES_CMAC:
1171	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
1172		if (WARN_ON(tid != 0))
1173			return;
1174		pn = key->u.aes_cmac.rx_pn;
1175		memcpy(seq->aes_cmac.pn, pn, IEEE80211_CMAC_PN_LEN);
1176		break;
1177	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
1178	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
1179		if (WARN_ON(tid != 0))
1180			return;
1181		pn = key->u.aes_gmac.rx_pn;
1182		memcpy(seq->aes_gmac.pn, pn, IEEE80211_GMAC_PN_LEN);
1183		break;
1184	case WLAN_CIPHER_SUITE_GCMP:
1185	case WLAN_CIPHER_SUITE_GCMP_256:
1186		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1187			return;
1188		if (tid < 0)
1189			pn = key->u.gcmp.rx_pn[IEEE80211_NUM_TIDS];
1190		else
1191			pn = key->u.gcmp.rx_pn[tid];
1192		memcpy(seq->gcmp.pn, pn, IEEE80211_GCMP_PN_LEN);
1193		break;
1194	}
1195}
1196EXPORT_SYMBOL(ieee80211_get_key_rx_seq);
1197
1198void ieee80211_set_key_rx_seq(struct ieee80211_key_conf *keyconf,
1199			      int tid, struct ieee80211_key_seq *seq)
1200{
1201	struct ieee80211_key *key;
1202	u8 *pn;
1203
1204	key = container_of(keyconf, struct ieee80211_key, conf);
1205
1206	switch (key->conf.cipher) {
1207	case WLAN_CIPHER_SUITE_TKIP:
1208		if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
1209			return;
1210		key->u.tkip.rx[tid].iv32 = seq->tkip.iv32;
1211		key->u.tkip.rx[tid].iv16 = seq->tkip.iv16;
1212		break;
1213	case WLAN_CIPHER_SUITE_CCMP:
1214	case WLAN_CIPHER_SUITE_CCMP_256:
1215		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1216			return;
1217		if (tid < 0)
1218			pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
1219		else
1220			pn = key->u.ccmp.rx_pn[tid];
1221		memcpy(pn, seq->ccmp.pn, IEEE80211_CCMP_PN_LEN);
1222		break;
1223	case WLAN_CIPHER_SUITE_AES_CMAC:
1224	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
1225		if (WARN_ON(tid != 0))
1226			return;
1227		pn = key->u.aes_cmac.rx_pn;
1228		memcpy(pn, seq->aes_cmac.pn, IEEE80211_CMAC_PN_LEN);
1229		break;
1230	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
1231	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
1232		if (WARN_ON(tid != 0))
1233			return;
1234		pn = key->u.aes_gmac.rx_pn;
1235		memcpy(pn, seq->aes_gmac.pn, IEEE80211_GMAC_PN_LEN);
1236		break;
1237	case WLAN_CIPHER_SUITE_GCMP:
1238	case WLAN_CIPHER_SUITE_GCMP_256:
1239		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1240			return;
1241		if (tid < 0)
1242			pn = key->u.gcmp.rx_pn[IEEE80211_NUM_TIDS];
1243		else
1244			pn = key->u.gcmp.rx_pn[tid];
1245		memcpy(pn, seq->gcmp.pn, IEEE80211_GCMP_PN_LEN);
1246		break;
1247	default:
1248		WARN_ON(1);
1249		break;
1250	}
1251}
1252EXPORT_SYMBOL_GPL(ieee80211_set_key_rx_seq);
1253
1254void ieee80211_remove_key(struct ieee80211_key_conf *keyconf)
1255{
1256	struct ieee80211_key *key;
1257
1258	key = container_of(keyconf, struct ieee80211_key, conf);
1259
1260	assert_key_lock(key->local);
1261
1262	/*
1263	 * if key was uploaded, we assume the driver will/has remove(d)
1264	 * it, so adjust bookkeeping accordingly
1265	 */
1266	if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
1267		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
1268
1269		if (!(key->conf.flags & (IEEE80211_KEY_FLAG_GENERATE_MMIC |
1270					 IEEE80211_KEY_FLAG_PUT_MIC_SPACE |
1271					 IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
1272			increment_tailroom_need_count(key->sdata);
1273	}
1274
1275	ieee80211_key_free(key, false);
1276}
1277EXPORT_SYMBOL_GPL(ieee80211_remove_key);
1278
1279struct ieee80211_key_conf *
1280ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
1281			struct ieee80211_key_conf *keyconf)
1282{
1283	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1284	struct ieee80211_local *local = sdata->local;
1285	struct ieee80211_key *key;
1286	int err;
1287
1288	if (WARN_ON(!local->wowlan))
1289		return ERR_PTR(-EINVAL);
1290
1291	if (WARN_ON(vif->type != NL80211_IFTYPE_STATION))
1292		return ERR_PTR(-EINVAL);
1293
1294	key = ieee80211_key_alloc(keyconf->cipher, keyconf->keyidx,
1295				  keyconf->keylen, keyconf->key,
1296				  0, NULL, NULL);
1297	if (IS_ERR(key))
1298		return ERR_CAST(key);
1299
1300	if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
1301		key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
1302
1303	err = ieee80211_key_link(key, sdata, NULL);
1304	if (err)
1305		return ERR_PTR(err);
1306
1307	return &key->conf;
1308}
1309EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_add);
1310
1311void ieee80211_key_mic_failure(struct ieee80211_key_conf *keyconf)
1312{
1313	struct ieee80211_key *key;
1314
1315	key = container_of(keyconf, struct ieee80211_key, conf);
1316
1317	switch (key->conf.cipher) {
1318	case WLAN_CIPHER_SUITE_AES_CMAC:
1319	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
1320		key->u.aes_cmac.icverrors++;
1321		break;
1322	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
1323	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
1324		key->u.aes_gmac.icverrors++;
1325		break;
1326	default:
1327		/* ignore the others for now, we don't keep counters now */
1328		break;
1329	}
1330}
1331EXPORT_SYMBOL_GPL(ieee80211_key_mic_failure);
1332
1333void ieee80211_key_replay(struct ieee80211_key_conf *keyconf)
1334{
1335	struct ieee80211_key *key;
1336
1337	key = container_of(keyconf, struct ieee80211_key, conf);
1338
1339	switch (key->conf.cipher) {
1340	case WLAN_CIPHER_SUITE_CCMP:
1341	case WLAN_CIPHER_SUITE_CCMP_256:
1342		key->u.ccmp.replays++;
1343		break;
1344	case WLAN_CIPHER_SUITE_AES_CMAC:
1345	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
1346		key->u.aes_cmac.replays++;
1347		break;
1348	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
1349	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
1350		key->u.aes_gmac.replays++;
1351		break;
1352	case WLAN_CIPHER_SUITE_GCMP:
1353	case WLAN_CIPHER_SUITE_GCMP_256:
1354		key->u.gcmp.replays++;
1355		break;
1356	}
1357}
1358EXPORT_SYMBOL_GPL(ieee80211_key_replay);
v4.6
 
   1/*
   2 * Copyright 2002-2005, Instant802 Networks, Inc.
   3 * Copyright 2005-2006, Devicescape Software, Inc.
   4 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
   5 * Copyright 2007-2008	Johannes Berg <johannes@sipsolutions.net>
   6 * Copyright 2013-2014  Intel Mobile Communications GmbH
   7 * Copyright 2015	Intel Deutschland GmbH
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License version 2 as
  11 * published by the Free Software Foundation.
  12 */
  13
  14#include <linux/if_ether.h>
  15#include <linux/etherdevice.h>
  16#include <linux/list.h>
  17#include <linux/rcupdate.h>
  18#include <linux/rtnetlink.h>
  19#include <linux/slab.h>
  20#include <linux/export.h>
  21#include <net/mac80211.h>
 
  22#include <asm/unaligned.h>
  23#include "ieee80211_i.h"
  24#include "driver-ops.h"
  25#include "debugfs_key.h"
  26#include "aes_ccm.h"
  27#include "aes_cmac.h"
  28#include "aes_gmac.h"
  29#include "aes_gcm.h"
  30
  31
  32/**
  33 * DOC: Key handling basics
  34 *
  35 * Key handling in mac80211 is done based on per-interface (sub_if_data)
  36 * keys and per-station keys. Since each station belongs to an interface,
  37 * each station key also belongs to that interface.
  38 *
  39 * Hardware acceleration is done on a best-effort basis for algorithms
  40 * that are implemented in software,  for each key the hardware is asked
  41 * to enable that key for offloading but if it cannot do that the key is
  42 * simply kept for software encryption (unless it is for an algorithm
  43 * that isn't implemented in software).
  44 * There is currently no way of knowing whether a key is handled in SW
  45 * or HW except by looking into debugfs.
  46 *
  47 * All key management is internally protected by a mutex. Within all
  48 * other parts of mac80211, key references are, just as STA structure
  49 * references, protected by RCU. Note, however, that some things are
  50 * unprotected, namely the key->sta dereferences within the hardware
  51 * acceleration functions. This means that sta_info_destroy() must
  52 * remove the key which waits for an RCU grace period.
  53 */
  54
  55static const u8 bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
  56
  57static void assert_key_lock(struct ieee80211_local *local)
  58{
  59	lockdep_assert_held(&local->key_mtx);
  60}
  61
  62static void
  63update_vlan_tailroom_need_count(struct ieee80211_sub_if_data *sdata, int delta)
  64{
  65	struct ieee80211_sub_if_data *vlan;
  66
  67	if (sdata->vif.type != NL80211_IFTYPE_AP)
  68		return;
  69
  70	/* crypto_tx_tailroom_needed_cnt is protected by this */
  71	assert_key_lock(sdata->local);
  72
  73	rcu_read_lock();
  74
  75	list_for_each_entry_rcu(vlan, &sdata->u.ap.vlans, u.vlan.list)
  76		vlan->crypto_tx_tailroom_needed_cnt += delta;
  77
  78	rcu_read_unlock();
  79}
  80
  81static void increment_tailroom_need_count(struct ieee80211_sub_if_data *sdata)
  82{
  83	/*
  84	 * When this count is zero, SKB resizing for allocating tailroom
  85	 * for IV or MMIC is skipped. But, this check has created two race
  86	 * cases in xmit path while transiting from zero count to one:
  87	 *
  88	 * 1. SKB resize was skipped because no key was added but just before
  89	 * the xmit key is added and SW encryption kicks off.
  90	 *
  91	 * 2. SKB resize was skipped because all the keys were hw planted but
  92	 * just before xmit one of the key is deleted and SW encryption kicks
  93	 * off.
  94	 *
  95	 * In both the above case SW encryption will find not enough space for
  96	 * tailroom and exits with WARN_ON. (See WARN_ONs at wpa.c)
  97	 *
  98	 * Solution has been explained at
  99	 * http://mid.gmane.org/1308590980.4322.19.camel@jlt3.sipsolutions.net
 100	 */
 101
 102	assert_key_lock(sdata->local);
 103
 104	update_vlan_tailroom_need_count(sdata, 1);
 105
 106	if (!sdata->crypto_tx_tailroom_needed_cnt++) {
 107		/*
 108		 * Flush all XMIT packets currently using HW encryption or no
 109		 * encryption at all if the count transition is from 0 -> 1.
 110		 */
 111		synchronize_net();
 112	}
 113}
 114
 115static void decrease_tailroom_need_count(struct ieee80211_sub_if_data *sdata,
 116					 int delta)
 117{
 118	assert_key_lock(sdata->local);
 119
 120	WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt < delta);
 121
 122	update_vlan_tailroom_need_count(sdata, -delta);
 123	sdata->crypto_tx_tailroom_needed_cnt -= delta;
 124}
 125
 126static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
 127{
 128	struct ieee80211_sub_if_data *sdata;
 129	struct sta_info *sta;
 130	int ret = -EOPNOTSUPP;
 131
 132	might_sleep();
 133
 134	if (key->flags & KEY_FLAG_TAINTED) {
 135		/* If we get here, it's during resume and the key is
 136		 * tainted so shouldn't be used/programmed any more.
 137		 * However, its flags may still indicate that it was
 138		 * programmed into the device (since we're in resume)
 139		 * so clear that flag now to avoid trying to remove
 140		 * it again later.
 141		 */
 
 
 
 
 
 
 142		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
 143		return -EINVAL;
 144	}
 145
 146	if (!key->local->ops->set_key)
 147		goto out_unsupported;
 148
 149	assert_key_lock(key->local);
 150
 151	sta = key->sta;
 152
 153	/*
 154	 * If this is a per-STA GTK, check if it
 155	 * is supported; if not, return.
 156	 */
 157	if (sta && !(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE) &&
 158	    !ieee80211_hw_check(&key->local->hw, SUPPORTS_PER_STA_GTK))
 159		goto out_unsupported;
 160
 161	if (sta && !sta->uploaded)
 162		goto out_unsupported;
 163
 164	sdata = key->sdata;
 165	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
 166		/*
 167		 * The driver doesn't know anything about VLAN interfaces.
 168		 * Hence, don't send GTKs for VLAN interfaces to the driver.
 169		 */
 170		if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE))
 
 171			goto out_unsupported;
 
 172	}
 173
 174	ret = drv_set_key(key->local, SET_KEY, sdata,
 175			  sta ? &sta->sta : NULL, &key->conf);
 176
 177	if (!ret) {
 178		key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;
 179
 180		if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
 181		      (key->conf.flags & IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 
 182			decrease_tailroom_need_count(sdata, 1);
 183
 184		WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) &&
 185			(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV));
 186
 
 
 
 187		return 0;
 188	}
 189
 190	if (ret != -ENOSPC && ret != -EOPNOTSUPP && ret != 1)
 191		sdata_err(sdata,
 192			  "failed to set key (%d, %pM) to hardware (%d)\n",
 193			  key->conf.keyidx,
 194			  sta ? sta->sta.addr : bcast_addr, ret);
 195
 196 out_unsupported:
 197	switch (key->conf.cipher) {
 198	case WLAN_CIPHER_SUITE_WEP40:
 199	case WLAN_CIPHER_SUITE_WEP104:
 200	case WLAN_CIPHER_SUITE_TKIP:
 201	case WLAN_CIPHER_SUITE_CCMP:
 202	case WLAN_CIPHER_SUITE_CCMP_256:
 
 
 203	case WLAN_CIPHER_SUITE_AES_CMAC:
 204	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 205	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 206	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 207	case WLAN_CIPHER_SUITE_GCMP:
 208	case WLAN_CIPHER_SUITE_GCMP_256:
 209		/* all of these we can do in software - if driver can */
 210		if (ret == 1)
 211			return 0;
 212		if (ieee80211_hw_check(&key->local->hw, SW_CRYPTO_CONTROL))
 213			return -EINVAL;
 214		return 0;
 215	default:
 216		return -EINVAL;
 217	}
 218}
 219
 220static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
 221{
 222	struct ieee80211_sub_if_data *sdata;
 223	struct sta_info *sta;
 224	int ret;
 225
 226	might_sleep();
 227
 228	if (!key || !key->local->ops->set_key)
 229		return;
 230
 231	assert_key_lock(key->local);
 232
 233	if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 234		return;
 235
 236	sta = key->sta;
 237	sdata = key->sdata;
 238
 239	if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
 240	      (key->conf.flags & IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 
 241		increment_tailroom_need_count(sdata);
 242
 
 243	ret = drv_set_key(key->local, DISABLE_KEY, sdata,
 244			  sta ? &sta->sta : NULL, &key->conf);
 245
 246	if (ret)
 247		sdata_err(sdata,
 248			  "failed to remove key (%d, %pM) from hardware (%d)\n",
 249			  key->conf.keyidx,
 250			  sta ? sta->sta.addr : bcast_addr, ret);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 251
 252	key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 253}
 254
 255static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
 256					int idx, bool uni, bool multi)
 257{
 258	struct ieee80211_key *key = NULL;
 259
 260	assert_key_lock(sdata->local);
 261
 262	if (idx >= 0 && idx < NUM_DEFAULT_KEYS)
 263		key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 264
 265	if (uni) {
 266		rcu_assign_pointer(sdata->default_unicast_key, key);
 267		ieee80211_check_fast_xmit_iface(sdata);
 268		drv_set_default_unicast_key(sdata->local, sdata, idx);
 
 269	}
 270
 271	if (multi)
 272		rcu_assign_pointer(sdata->default_multicast_key, key);
 273
 274	ieee80211_debugfs_key_update_default(sdata);
 275}
 276
 277void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx,
 278			       bool uni, bool multi)
 279{
 280	mutex_lock(&sdata->local->key_mtx);
 281	__ieee80211_set_default_key(sdata, idx, uni, multi);
 282	mutex_unlock(&sdata->local->key_mtx);
 283}
 284
 285static void
 286__ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, int idx)
 287{
 288	struct ieee80211_key *key = NULL;
 289
 290	assert_key_lock(sdata->local);
 291
 292	if (idx >= NUM_DEFAULT_KEYS &&
 293	    idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
 294		key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 295
 296	rcu_assign_pointer(sdata->default_mgmt_key, key);
 297
 298	ieee80211_debugfs_key_update_default(sdata);
 299}
 300
 301void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata,
 302				    int idx)
 303{
 304	mutex_lock(&sdata->local->key_mtx);
 305	__ieee80211_set_default_mgmt_key(sdata, idx);
 306	mutex_unlock(&sdata->local->key_mtx);
 307}
 308
 
 
 
 
 
 
 
 
 
 
 
 
 
 309
 310static void ieee80211_key_replace(struct ieee80211_sub_if_data *sdata,
 
 
 
 
 
 
 
 
 
 
 
 311				  struct sta_info *sta,
 312				  bool pairwise,
 313				  struct ieee80211_key *old,
 314				  struct ieee80211_key *new)
 315{
 316	int idx;
 317	bool defunikey, defmultikey, defmgmtkey;
 
 318
 319	/* caller must provide at least one old/new */
 320	if (WARN_ON(!new && !old))
 321		return;
 322
 323	if (new)
 324		list_add_tail_rcu(&new->list, &sdata->key_list);
 325
 326	WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx);
 327
 328	if (old)
 
 
 
 
 
 
 
 329		idx = old->conf.keyidx;
 330	else
 
 
 
 
 
 
 
 
 331		idx = new->conf.keyidx;
 
 
 
 
 
 
 332
 333	if (sta) {
 334		if (pairwise) {
 335			rcu_assign_pointer(sta->ptk[idx], new);
 336			sta->ptk_idx = idx;
 337			ieee80211_check_fast_xmit(sta);
 
 338		} else {
 339			rcu_assign_pointer(sta->gtk[idx], new);
 340		}
 
 
 
 
 
 
 341	} else {
 342		defunikey = old &&
 343			old == key_mtx_dereference(sdata->local,
 344						sdata->default_unicast_key);
 345		defmultikey = old &&
 346			old == key_mtx_dereference(sdata->local,
 347						sdata->default_multicast_key);
 348		defmgmtkey = old &&
 349			old == key_mtx_dereference(sdata->local,
 350						sdata->default_mgmt_key);
 
 
 
 351
 352		if (defunikey && !new)
 353			__ieee80211_set_default_key(sdata, -1, true, false);
 354		if (defmultikey && !new)
 355			__ieee80211_set_default_key(sdata, -1, false, true);
 356		if (defmgmtkey && !new)
 357			__ieee80211_set_default_mgmt_key(sdata, -1);
 
 
 358
 359		rcu_assign_pointer(sdata->keys[idx], new);
 360		if (defunikey && new)
 361			__ieee80211_set_default_key(sdata, new->conf.keyidx,
 362						    true, false);
 363		if (defmultikey && new)
 364			__ieee80211_set_default_key(sdata, new->conf.keyidx,
 365						    false, true);
 366		if (defmgmtkey && new)
 367			__ieee80211_set_default_mgmt_key(sdata,
 368							 new->conf.keyidx);
 
 
 
 369	}
 370
 371	if (old)
 372		list_del_rcu(&old->list);
 
 
 373}
 374
 375struct ieee80211_key *
 376ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
 377		    const u8 *key_data,
 378		    size_t seq_len, const u8 *seq,
 379		    const struct ieee80211_cipher_scheme *cs)
 380{
 381	struct ieee80211_key *key;
 382	int i, j, err;
 383
 384	if (WARN_ON(idx < 0 || idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS))
 
 
 385		return ERR_PTR(-EINVAL);
 386
 387	key = kzalloc(sizeof(struct ieee80211_key) + key_len, GFP_KERNEL);
 388	if (!key)
 389		return ERR_PTR(-ENOMEM);
 390
 391	/*
 392	 * Default to software encryption; we'll later upload the
 393	 * key to the hardware if possible.
 394	 */
 395	key->conf.flags = 0;
 396	key->flags = 0;
 397
 398	key->conf.cipher = cipher;
 399	key->conf.keyidx = idx;
 400	key->conf.keylen = key_len;
 401	switch (cipher) {
 402	case WLAN_CIPHER_SUITE_WEP40:
 403	case WLAN_CIPHER_SUITE_WEP104:
 404		key->conf.iv_len = IEEE80211_WEP_IV_LEN;
 405		key->conf.icv_len = IEEE80211_WEP_ICV_LEN;
 406		break;
 407	case WLAN_CIPHER_SUITE_TKIP:
 408		key->conf.iv_len = IEEE80211_TKIP_IV_LEN;
 409		key->conf.icv_len = IEEE80211_TKIP_ICV_LEN;
 410		if (seq) {
 411			for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 412				key->u.tkip.rx[i].iv32 =
 413					get_unaligned_le32(&seq[2]);
 414				key->u.tkip.rx[i].iv16 =
 415					get_unaligned_le16(seq);
 416			}
 417		}
 418		spin_lock_init(&key->u.tkip.txlock);
 419		break;
 420	case WLAN_CIPHER_SUITE_CCMP:
 421		key->conf.iv_len = IEEE80211_CCMP_HDR_LEN;
 422		key->conf.icv_len = IEEE80211_CCMP_MIC_LEN;
 423		if (seq) {
 424			for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 425				for (j = 0; j < IEEE80211_CCMP_PN_LEN; j++)
 426					key->u.ccmp.rx_pn[i][j] =
 427						seq[IEEE80211_CCMP_PN_LEN - j - 1];
 428		}
 429		/*
 430		 * Initialize AES key state here as an optimization so that
 431		 * it does not need to be initialized for every packet.
 432		 */
 433		key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(
 434			key_data, key_len, IEEE80211_CCMP_MIC_LEN);
 435		if (IS_ERR(key->u.ccmp.tfm)) {
 436			err = PTR_ERR(key->u.ccmp.tfm);
 437			kfree(key);
 438			return ERR_PTR(err);
 439		}
 440		break;
 441	case WLAN_CIPHER_SUITE_CCMP_256:
 442		key->conf.iv_len = IEEE80211_CCMP_256_HDR_LEN;
 443		key->conf.icv_len = IEEE80211_CCMP_256_MIC_LEN;
 444		for (i = 0; seq && i < IEEE80211_NUM_TIDS + 1; i++)
 445			for (j = 0; j < IEEE80211_CCMP_256_PN_LEN; j++)
 446				key->u.ccmp.rx_pn[i][j] =
 447					seq[IEEE80211_CCMP_256_PN_LEN - j - 1];
 448		/* Initialize AES key state here as an optimization so that
 449		 * it does not need to be initialized for every packet.
 450		 */
 451		key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(
 452			key_data, key_len, IEEE80211_CCMP_256_MIC_LEN);
 453		if (IS_ERR(key->u.ccmp.tfm)) {
 454			err = PTR_ERR(key->u.ccmp.tfm);
 455			kfree(key);
 456			return ERR_PTR(err);
 457		}
 458		break;
 459	case WLAN_CIPHER_SUITE_AES_CMAC:
 460	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 461		key->conf.iv_len = 0;
 462		if (cipher == WLAN_CIPHER_SUITE_AES_CMAC)
 463			key->conf.icv_len = sizeof(struct ieee80211_mmie);
 464		else
 465			key->conf.icv_len = sizeof(struct ieee80211_mmie_16);
 466		if (seq)
 467			for (j = 0; j < IEEE80211_CMAC_PN_LEN; j++)
 468				key->u.aes_cmac.rx_pn[j] =
 469					seq[IEEE80211_CMAC_PN_LEN - j - 1];
 470		/*
 471		 * Initialize AES key state here as an optimization so that
 472		 * it does not need to be initialized for every packet.
 473		 */
 474		key->u.aes_cmac.tfm =
 475			ieee80211_aes_cmac_key_setup(key_data, key_len);
 476		if (IS_ERR(key->u.aes_cmac.tfm)) {
 477			err = PTR_ERR(key->u.aes_cmac.tfm);
 478			kfree(key);
 479			return ERR_PTR(err);
 480		}
 481		break;
 482	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 483	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 484		key->conf.iv_len = 0;
 485		key->conf.icv_len = sizeof(struct ieee80211_mmie_16);
 486		if (seq)
 487			for (j = 0; j < IEEE80211_GMAC_PN_LEN; j++)
 488				key->u.aes_gmac.rx_pn[j] =
 489					seq[IEEE80211_GMAC_PN_LEN - j - 1];
 490		/* Initialize AES key state here as an optimization so that
 491		 * it does not need to be initialized for every packet.
 492		 */
 493		key->u.aes_gmac.tfm =
 494			ieee80211_aes_gmac_key_setup(key_data, key_len);
 495		if (IS_ERR(key->u.aes_gmac.tfm)) {
 496			err = PTR_ERR(key->u.aes_gmac.tfm);
 497			kfree(key);
 498			return ERR_PTR(err);
 499		}
 500		break;
 501	case WLAN_CIPHER_SUITE_GCMP:
 502	case WLAN_CIPHER_SUITE_GCMP_256:
 503		key->conf.iv_len = IEEE80211_GCMP_HDR_LEN;
 504		key->conf.icv_len = IEEE80211_GCMP_MIC_LEN;
 505		for (i = 0; seq && i < IEEE80211_NUM_TIDS + 1; i++)
 506			for (j = 0; j < IEEE80211_GCMP_PN_LEN; j++)
 507				key->u.gcmp.rx_pn[i][j] =
 508					seq[IEEE80211_GCMP_PN_LEN - j - 1];
 509		/* Initialize AES key state here as an optimization so that
 510		 * it does not need to be initialized for every packet.
 511		 */
 512		key->u.gcmp.tfm = ieee80211_aes_gcm_key_setup_encrypt(key_data,
 513								      key_len);
 514		if (IS_ERR(key->u.gcmp.tfm)) {
 515			err = PTR_ERR(key->u.gcmp.tfm);
 516			kfree(key);
 517			return ERR_PTR(err);
 518		}
 519		break;
 520	default:
 521		if (cs) {
 522			if (seq_len && seq_len != cs->pn_len) {
 523				kfree(key);
 524				return ERR_PTR(-EINVAL);
 525			}
 526
 527			key->conf.iv_len = cs->hdr_len;
 528			key->conf.icv_len = cs->mic_len;
 529			for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
 530				for (j = 0; j < seq_len; j++)
 531					key->u.gen.rx_pn[i][j] =
 532							seq[seq_len - j - 1];
 533			key->flags |= KEY_FLAG_CIPHER_SCHEME;
 534		}
 535	}
 536	memcpy(key->conf.key, key_data, key_len);
 537	INIT_LIST_HEAD(&key->list);
 538
 539	return key;
 540}
 541
 542static void ieee80211_key_free_common(struct ieee80211_key *key)
 543{
 544	switch (key->conf.cipher) {
 545	case WLAN_CIPHER_SUITE_CCMP:
 546	case WLAN_CIPHER_SUITE_CCMP_256:
 547		ieee80211_aes_key_free(key->u.ccmp.tfm);
 548		break;
 549	case WLAN_CIPHER_SUITE_AES_CMAC:
 550	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 551		ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm);
 552		break;
 553	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 554	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 555		ieee80211_aes_gmac_key_free(key->u.aes_gmac.tfm);
 556		break;
 557	case WLAN_CIPHER_SUITE_GCMP:
 558	case WLAN_CIPHER_SUITE_GCMP_256:
 559		ieee80211_aes_gcm_key_free(key->u.gcmp.tfm);
 560		break;
 561	}
 562	kzfree(key);
 563}
 564
 565static void __ieee80211_key_destroy(struct ieee80211_key *key,
 566				    bool delay_tailroom)
 567{
 568	if (key->local)
 569		ieee80211_key_disable_hw_accel(key);
 570
 571	if (key->local) {
 572		struct ieee80211_sub_if_data *sdata = key->sdata;
 573
 574		ieee80211_debugfs_key_remove(key);
 575
 576		if (delay_tailroom) {
 577			/* see ieee80211_delayed_tailroom_dec */
 578			sdata->crypto_tx_tailroom_pending_dec++;
 579			schedule_delayed_work(&sdata->dec_tailroom_needed_wk,
 580					      HZ/2);
 581		} else {
 582			decrease_tailroom_need_count(sdata, 1);
 583		}
 584	}
 585
 586	ieee80211_key_free_common(key);
 587}
 588
 589static void ieee80211_key_destroy(struct ieee80211_key *key,
 590				  bool delay_tailroom)
 591{
 592	if (!key)
 593		return;
 594
 595	/*
 596	 * Synchronize so the TX path and rcu key iterators
 597	 * can no longer be using this key before we free/remove it.
 598	 */
 599	synchronize_net();
 600
 601	__ieee80211_key_destroy(key, delay_tailroom);
 602}
 603
 604void ieee80211_key_free_unused(struct ieee80211_key *key)
 605{
 606	WARN_ON(key->sdata || key->local);
 607	ieee80211_key_free_common(key);
 608}
 609
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 610int ieee80211_key_link(struct ieee80211_key *key,
 611		       struct ieee80211_sub_if_data *sdata,
 612		       struct sta_info *sta)
 613{
 614	struct ieee80211_local *local = sdata->local;
 615	struct ieee80211_key *old_key;
 616	int idx, ret;
 617	bool pairwise;
 
 
 
 
 
 
 
 618
 619	pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
 620	idx = key->conf.keyidx;
 621	key->local = sdata->local;
 622	key->sdata = sdata;
 623	key->sta = sta;
 624
 625	mutex_lock(&sdata->local->key_mtx);
 
 626
 627	if (sta && pairwise)
 628		old_key = key_mtx_dereference(sdata->local, sta->ptk[idx]);
 629	else if (sta)
 
 
 
 
 
 
 
 
 630		old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]);
 631	else
 632		old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 633
 634	increment_tailroom_need_count(sdata);
 635
 636	ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
 637	ieee80211_key_destroy(old_key, true);
 638
 639	ieee80211_debugfs_key_add(key);
 640
 641	if (!local->wowlan) {
 642		ret = ieee80211_key_enable_hw_accel(key);
 643		if (ret)
 644			ieee80211_key_free(key, true);
 645	} else {
 646		ret = 0;
 647	}
 648
 
 649	mutex_unlock(&sdata->local->key_mtx);
 650
 651	return ret;
 652}
 653
 654void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom)
 655{
 656	if (!key)
 657		return;
 658
 659	/*
 660	 * Replace key with nothingness if it was ever used.
 661	 */
 662	if (key->sdata)
 663		ieee80211_key_replace(key->sdata, key->sta,
 664				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
 665				key, NULL);
 666	ieee80211_key_destroy(key, delay_tailroom);
 667}
 668
 669void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata)
 670{
 671	struct ieee80211_key *key;
 672	struct ieee80211_sub_if_data *vlan;
 673
 674	ASSERT_RTNL();
 675
 676	if (WARN_ON(!ieee80211_sdata_running(sdata)))
 677		return;
 678
 679	mutex_lock(&sdata->local->key_mtx);
 680
 681	WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt ||
 682		     sdata->crypto_tx_tailroom_pending_dec);
 683
 684	if (sdata->vif.type == NL80211_IFTYPE_AP) {
 685		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
 686			WARN_ON_ONCE(vlan->crypto_tx_tailroom_needed_cnt ||
 687				     vlan->crypto_tx_tailroom_pending_dec);
 
 688	}
 689
 690	list_for_each_entry(key, &sdata->key_list, list) {
 691		increment_tailroom_need_count(sdata);
 692		ieee80211_key_enable_hw_accel(key);
 693	}
 694
 695	mutex_unlock(&sdata->local->key_mtx);
 696}
 697
 698void ieee80211_reset_crypto_tx_tailroom(struct ieee80211_sub_if_data *sdata)
 699{
 700	struct ieee80211_sub_if_data *vlan;
 701
 702	mutex_lock(&sdata->local->key_mtx);
 703
 704	sdata->crypto_tx_tailroom_needed_cnt = 0;
 705
 706	if (sdata->vif.type == NL80211_IFTYPE_AP) {
 707		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
 708			vlan->crypto_tx_tailroom_needed_cnt = 0;
 709	}
 710
 711	mutex_unlock(&sdata->local->key_mtx);
 712}
 713
 714void ieee80211_iter_keys(struct ieee80211_hw *hw,
 715			 struct ieee80211_vif *vif,
 716			 void (*iter)(struct ieee80211_hw *hw,
 717				      struct ieee80211_vif *vif,
 718				      struct ieee80211_sta *sta,
 719				      struct ieee80211_key_conf *key,
 720				      void *data),
 721			 void *iter_data)
 722{
 723	struct ieee80211_local *local = hw_to_local(hw);
 724	struct ieee80211_key *key, *tmp;
 725	struct ieee80211_sub_if_data *sdata;
 726
 727	ASSERT_RTNL();
 728
 729	mutex_lock(&local->key_mtx);
 730	if (vif) {
 731		sdata = vif_to_sdata(vif);
 732		list_for_each_entry_safe(key, tmp, &sdata->key_list, list)
 733			iter(hw, &sdata->vif,
 734			     key->sta ? &key->sta->sta : NULL,
 735			     &key->conf, iter_data);
 736	} else {
 737		list_for_each_entry(sdata, &local->interfaces, list)
 738			list_for_each_entry_safe(key, tmp,
 739						 &sdata->key_list, list)
 740				iter(hw, &sdata->vif,
 741				     key->sta ? &key->sta->sta : NULL,
 742				     &key->conf, iter_data);
 743	}
 744	mutex_unlock(&local->key_mtx);
 745}
 746EXPORT_SYMBOL(ieee80211_iter_keys);
 747
 748static void
 749_ieee80211_iter_keys_rcu(struct ieee80211_hw *hw,
 750			 struct ieee80211_sub_if_data *sdata,
 751			 void (*iter)(struct ieee80211_hw *hw,
 752				      struct ieee80211_vif *vif,
 753				      struct ieee80211_sta *sta,
 754				      struct ieee80211_key_conf *key,
 755				      void *data),
 756			 void *iter_data)
 757{
 758	struct ieee80211_key *key;
 759
 760	list_for_each_entry_rcu(key, &sdata->key_list, list) {
 761		/* skip keys of station in removal process */
 762		if (key->sta && key->sta->removed)
 763			continue;
 764		if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 765			continue;
 766
 767		iter(hw, &sdata->vif,
 768		     key->sta ? &key->sta->sta : NULL,
 769		     &key->conf, iter_data);
 770	}
 771}
 772
 773void ieee80211_iter_keys_rcu(struct ieee80211_hw *hw,
 774			     struct ieee80211_vif *vif,
 775			     void (*iter)(struct ieee80211_hw *hw,
 776					  struct ieee80211_vif *vif,
 777					  struct ieee80211_sta *sta,
 778					  struct ieee80211_key_conf *key,
 779					  void *data),
 780			     void *iter_data)
 781{
 782	struct ieee80211_local *local = hw_to_local(hw);
 783	struct ieee80211_sub_if_data *sdata;
 784
 785	if (vif) {
 786		sdata = vif_to_sdata(vif);
 787		_ieee80211_iter_keys_rcu(hw, sdata, iter, iter_data);
 788	} else {
 789		list_for_each_entry_rcu(sdata, &local->interfaces, list)
 790			_ieee80211_iter_keys_rcu(hw, sdata, iter, iter_data);
 791	}
 792}
 793EXPORT_SYMBOL(ieee80211_iter_keys_rcu);
 794
 795static void ieee80211_free_keys_iface(struct ieee80211_sub_if_data *sdata,
 796				      struct list_head *keys)
 797{
 798	struct ieee80211_key *key, *tmp;
 799
 800	decrease_tailroom_need_count(sdata,
 801				     sdata->crypto_tx_tailroom_pending_dec);
 802	sdata->crypto_tx_tailroom_pending_dec = 0;
 803
 804	ieee80211_debugfs_key_remove_mgmt_default(sdata);
 
 805
 806	list_for_each_entry_safe(key, tmp, &sdata->key_list, list) {
 807		ieee80211_key_replace(key->sdata, key->sta,
 808				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
 809				key, NULL);
 810		list_add_tail(&key->list, keys);
 811	}
 812
 813	ieee80211_debugfs_key_update_default(sdata);
 814}
 815
 816void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata,
 817			 bool force_synchronize)
 818{
 819	struct ieee80211_local *local = sdata->local;
 820	struct ieee80211_sub_if_data *vlan;
 821	struct ieee80211_sub_if_data *master;
 822	struct ieee80211_key *key, *tmp;
 823	LIST_HEAD(keys);
 824
 825	cancel_delayed_work_sync(&sdata->dec_tailroom_needed_wk);
 826
 827	mutex_lock(&local->key_mtx);
 828
 829	ieee80211_free_keys_iface(sdata, &keys);
 830
 831	if (sdata->vif.type == NL80211_IFTYPE_AP) {
 832		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
 833			ieee80211_free_keys_iface(vlan, &keys);
 834	}
 835
 836	if (!list_empty(&keys) || force_synchronize)
 837		synchronize_net();
 838	list_for_each_entry_safe(key, tmp, &keys, list)
 839		__ieee80211_key_destroy(key, false);
 840
 841	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
 842		if (sdata->bss) {
 843			master = container_of(sdata->bss,
 844					      struct ieee80211_sub_if_data,
 845					      u.ap);
 846
 847			WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt !=
 848				     master->crypto_tx_tailroom_needed_cnt);
 849		}
 850	} else {
 851		WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt ||
 852			     sdata->crypto_tx_tailroom_pending_dec);
 853	}
 854
 855	if (sdata->vif.type == NL80211_IFTYPE_AP) {
 856		list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
 857			WARN_ON_ONCE(vlan->crypto_tx_tailroom_needed_cnt ||
 858				     vlan->crypto_tx_tailroom_pending_dec);
 859	}
 860
 861	mutex_unlock(&local->key_mtx);
 862}
 863
 864void ieee80211_free_sta_keys(struct ieee80211_local *local,
 865			     struct sta_info *sta)
 866{
 867	struct ieee80211_key *key;
 868	int i;
 869
 870	mutex_lock(&local->key_mtx);
 871	for (i = 0; i < ARRAY_SIZE(sta->gtk); i++) {
 872		key = key_mtx_dereference(local, sta->gtk[i]);
 873		if (!key)
 874			continue;
 875		ieee80211_key_replace(key->sdata, key->sta,
 876				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
 877				key, NULL);
 878		__ieee80211_key_destroy(key, true);
 
 879	}
 880
 881	for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
 882		key = key_mtx_dereference(local, sta->ptk[i]);
 883		if (!key)
 884			continue;
 885		ieee80211_key_replace(key->sdata, key->sta,
 886				key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
 887				key, NULL);
 888		__ieee80211_key_destroy(key, true);
 
 889	}
 890
 891	mutex_unlock(&local->key_mtx);
 892}
 893
 894void ieee80211_delayed_tailroom_dec(struct work_struct *wk)
 895{
 896	struct ieee80211_sub_if_data *sdata;
 897
 898	sdata = container_of(wk, struct ieee80211_sub_if_data,
 899			     dec_tailroom_needed_wk.work);
 900
 901	/*
 902	 * The reason for the delayed tailroom needed decrementing is to
 903	 * make roaming faster: during roaming, all keys are first deleted
 904	 * and then new keys are installed. The first new key causes the
 905	 * crypto_tx_tailroom_needed_cnt to go from 0 to 1, which invokes
 906	 * the cost of synchronize_net() (which can be slow). Avoid this
 907	 * by deferring the crypto_tx_tailroom_needed_cnt decrementing on
 908	 * key removal for a while, so if we roam the value is larger than
 909	 * zero and no 0->1 transition happens.
 910	 *
 911	 * The cost is that if the AP switching was from an AP with keys
 912	 * to one without, we still allocate tailroom while it would no
 913	 * longer be needed. However, in the typical (fast) roaming case
 914	 * within an ESS this usually won't happen.
 915	 */
 916
 917	mutex_lock(&sdata->local->key_mtx);
 918	decrease_tailroom_need_count(sdata,
 919				     sdata->crypto_tx_tailroom_pending_dec);
 920	sdata->crypto_tx_tailroom_pending_dec = 0;
 921	mutex_unlock(&sdata->local->key_mtx);
 922}
 923
 924void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
 925				const u8 *replay_ctr, gfp_t gfp)
 926{
 927	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
 928
 929	trace_api_gtk_rekey_notify(sdata, bssid, replay_ctr);
 930
 931	cfg80211_gtk_rekey_notify(sdata->dev, bssid, replay_ctr, gfp);
 932}
 933EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_notify);
 934
 935void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
 936			      int tid, struct ieee80211_key_seq *seq)
 937{
 938	struct ieee80211_key *key;
 939	const u8 *pn;
 940
 941	key = container_of(keyconf, struct ieee80211_key, conf);
 942
 943	switch (key->conf.cipher) {
 944	case WLAN_CIPHER_SUITE_TKIP:
 945		if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
 946			return;
 947		seq->tkip.iv32 = key->u.tkip.rx[tid].iv32;
 948		seq->tkip.iv16 = key->u.tkip.rx[tid].iv16;
 949		break;
 950	case WLAN_CIPHER_SUITE_CCMP:
 951	case WLAN_CIPHER_SUITE_CCMP_256:
 952		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
 953			return;
 954		if (tid < 0)
 955			pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
 956		else
 957			pn = key->u.ccmp.rx_pn[tid];
 958		memcpy(seq->ccmp.pn, pn, IEEE80211_CCMP_PN_LEN);
 959		break;
 960	case WLAN_CIPHER_SUITE_AES_CMAC:
 961	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
 962		if (WARN_ON(tid != 0))
 963			return;
 964		pn = key->u.aes_cmac.rx_pn;
 965		memcpy(seq->aes_cmac.pn, pn, IEEE80211_CMAC_PN_LEN);
 966		break;
 967	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
 968	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
 969		if (WARN_ON(tid != 0))
 970			return;
 971		pn = key->u.aes_gmac.rx_pn;
 972		memcpy(seq->aes_gmac.pn, pn, IEEE80211_GMAC_PN_LEN);
 973		break;
 974	case WLAN_CIPHER_SUITE_GCMP:
 975	case WLAN_CIPHER_SUITE_GCMP_256:
 976		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
 977			return;
 978		if (tid < 0)
 979			pn = key->u.gcmp.rx_pn[IEEE80211_NUM_TIDS];
 980		else
 981			pn = key->u.gcmp.rx_pn[tid];
 982		memcpy(seq->gcmp.pn, pn, IEEE80211_GCMP_PN_LEN);
 983		break;
 984	}
 985}
 986EXPORT_SYMBOL(ieee80211_get_key_rx_seq);
 987
 988void ieee80211_set_key_rx_seq(struct ieee80211_key_conf *keyconf,
 989			      int tid, struct ieee80211_key_seq *seq)
 990{
 991	struct ieee80211_key *key;
 992	u8 *pn;
 993
 994	key = container_of(keyconf, struct ieee80211_key, conf);
 995
 996	switch (key->conf.cipher) {
 997	case WLAN_CIPHER_SUITE_TKIP:
 998		if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
 999			return;
1000		key->u.tkip.rx[tid].iv32 = seq->tkip.iv32;
1001		key->u.tkip.rx[tid].iv16 = seq->tkip.iv16;
1002		break;
1003	case WLAN_CIPHER_SUITE_CCMP:
1004	case WLAN_CIPHER_SUITE_CCMP_256:
1005		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1006			return;
1007		if (tid < 0)
1008			pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
1009		else
1010			pn = key->u.ccmp.rx_pn[tid];
1011		memcpy(pn, seq->ccmp.pn, IEEE80211_CCMP_PN_LEN);
1012		break;
1013	case WLAN_CIPHER_SUITE_AES_CMAC:
1014	case WLAN_CIPHER_SUITE_BIP_CMAC_256:
1015		if (WARN_ON(tid != 0))
1016			return;
1017		pn = key->u.aes_cmac.rx_pn;
1018		memcpy(pn, seq->aes_cmac.pn, IEEE80211_CMAC_PN_LEN);
1019		break;
1020	case WLAN_CIPHER_SUITE_BIP_GMAC_128:
1021	case WLAN_CIPHER_SUITE_BIP_GMAC_256:
1022		if (WARN_ON(tid != 0))
1023			return;
1024		pn = key->u.aes_gmac.rx_pn;
1025		memcpy(pn, seq->aes_gmac.pn, IEEE80211_GMAC_PN_LEN);
1026		break;
1027	case WLAN_CIPHER_SUITE_GCMP:
1028	case WLAN_CIPHER_SUITE_GCMP_256:
1029		if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
1030			return;
1031		if (tid < 0)
1032			pn = key->u.gcmp.rx_pn[IEEE80211_NUM_TIDS];
1033		else
1034			pn = key->u.gcmp.rx_pn[tid];
1035		memcpy(pn, seq->gcmp.pn, IEEE80211_GCMP_PN_LEN);
1036		break;
1037	default:
1038		WARN_ON(1);
1039		break;
1040	}
1041}
1042EXPORT_SYMBOL_GPL(ieee80211_set_key_rx_seq);
1043
1044void ieee80211_remove_key(struct ieee80211_key_conf *keyconf)
1045{
1046	struct ieee80211_key *key;
1047
1048	key = container_of(keyconf, struct ieee80211_key, conf);
1049
1050	assert_key_lock(key->local);
1051
1052	/*
1053	 * if key was uploaded, we assume the driver will/has remove(d)
1054	 * it, so adjust bookkeeping accordingly
1055	 */
1056	if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
1057		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
1058
1059		if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
1060		      (key->conf.flags & IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
 
1061			increment_tailroom_need_count(key->sdata);
1062	}
1063
1064	ieee80211_key_free(key, false);
1065}
1066EXPORT_SYMBOL_GPL(ieee80211_remove_key);
1067
1068struct ieee80211_key_conf *
1069ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
1070			struct ieee80211_key_conf *keyconf)
1071{
1072	struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1073	struct ieee80211_local *local = sdata->local;
1074	struct ieee80211_key *key;
1075	int err;
1076
1077	if (WARN_ON(!local->wowlan))
1078		return ERR_PTR(-EINVAL);
1079
1080	if (WARN_ON(vif->type != NL80211_IFTYPE_STATION))
1081		return ERR_PTR(-EINVAL);
1082
1083	key = ieee80211_key_alloc(keyconf->cipher, keyconf->keyidx,
1084				  keyconf->keylen, keyconf->key,
1085				  0, NULL, NULL);
1086	if (IS_ERR(key))
1087		return ERR_CAST(key);
1088
1089	if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
1090		key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
1091
1092	err = ieee80211_key_link(key, sdata, NULL);
1093	if (err)
1094		return ERR_PTR(err);
1095
1096	return &key->conf;
1097}
1098EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_add);