Loading include/net/mac80211.h +13 −0 Original line number Diff line number Diff line Loading @@ -3222,6 +3222,19 @@ void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf, void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf, struct sk_buff *skb, u8 *p2k); /** * ieee80211_aes_cmac_calculate_k1_k2 - calculate the AES-CMAC sub keys * * This function computes the two AES-CMAC sub-keys, based on the * previously installed master key. * * @keyconf: the parameter passed with the set key * @k1: a buffer to be filled with the 1st sub-key * @k2: a buffer to be filled with the 2nd sub-key */ void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, u8 *k1, u8 *k2); /** * struct ieee80211_key_seq - key sequence counter * Loading net/mac80211/aes_cmac.c +17 −0 Original line number Diff line number Diff line Loading @@ -126,3 +126,20 @@ void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm) { crypto_free_cipher(tfm); } void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, u8 *k1, u8 *k2) { u8 l[AES_BLOCK_SIZE] = {}; struct ieee80211_key *key = container_of(keyconf, struct ieee80211_key, conf); crypto_cipher_encrypt_one(key->u.aes_cmac.tfm, l, l); memcpy(k1, l, AES_BLOCK_SIZE); gf_mulx(k1); memcpy(k2, k1, AES_BLOCK_SIZE); gf_mulx(k2); } EXPORT_SYMBOL(ieee80211_aes_cmac_calculate_k1_k2); net/mac80211/main.c +1 −1 Original line number Diff line number Diff line Loading @@ -751,7 +751,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) if (comb->num_different_channels > 1) return -EINVAL; } } else { /* * WDS is currently prohibited when channel contexts are used * because there's no clear definition of which channel WDS Loading net/mac80211/mesh.c +5 −4 Original line number Diff line number Diff line Loading @@ -703,8 +703,10 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, &elems); /* ignore beacons from secure mesh peers if our security is off */ if (elems.rsn_len && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) /* ignore non-mesh or secure / unsecure mismatch */ if ((!elems.mesh_id || !elems.mesh_config) || (elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) || (!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)) return; if (elems.ds_params && elems.ds_params_len == 1) Loading @@ -717,8 +719,7 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) return; if (elems.mesh_id && elems.mesh_config && mesh_matches_local(sdata, &elems)) if (mesh_matches_local(sdata, &elems)) mesh_neighbour_update(sdata, mgmt->sa, &elems); if (ifmsh->sync_ops) Loading net/mac80211/mlme.c +4 −5 Original line number Diff line number Diff line Loading @@ -2433,7 +2433,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, struct ieee80211_chanctx_conf *chanctx_conf; struct ieee80211_channel *chan; u32 changed = 0; bool erp_valid, directed_tim = false; bool erp_valid; u8 erp_value = 0; u32 ncrc; u8 *bssid; Loading Loading @@ -2564,11 +2564,10 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, len - baselen, &elems, care_about_ies, ncrc); if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, ifmgd->aid); if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { bool directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, ifmgd->aid); if (directed_tim) { if (local->hw.conf.dynamic_ps_timeout > 0) { if (local->hw.conf.flags & IEEE80211_CONF_PS) { Loading Loading
include/net/mac80211.h +13 −0 Original line number Diff line number Diff line Loading @@ -3222,6 +3222,19 @@ void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf, void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf, struct sk_buff *skb, u8 *p2k); /** * ieee80211_aes_cmac_calculate_k1_k2 - calculate the AES-CMAC sub keys * * This function computes the two AES-CMAC sub-keys, based on the * previously installed master key. * * @keyconf: the parameter passed with the set key * @k1: a buffer to be filled with the 1st sub-key * @k2: a buffer to be filled with the 2nd sub-key */ void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, u8 *k1, u8 *k2); /** * struct ieee80211_key_seq - key sequence counter * Loading
net/mac80211/aes_cmac.c +17 −0 Original line number Diff line number Diff line Loading @@ -126,3 +126,20 @@ void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm) { crypto_free_cipher(tfm); } void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, u8 *k1, u8 *k2) { u8 l[AES_BLOCK_SIZE] = {}; struct ieee80211_key *key = container_of(keyconf, struct ieee80211_key, conf); crypto_cipher_encrypt_one(key->u.aes_cmac.tfm, l, l); memcpy(k1, l, AES_BLOCK_SIZE); gf_mulx(k1); memcpy(k2, k1, AES_BLOCK_SIZE); gf_mulx(k2); } EXPORT_SYMBOL(ieee80211_aes_cmac_calculate_k1_k2);
net/mac80211/main.c +1 −1 Original line number Diff line number Diff line Loading @@ -751,7 +751,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) if (comb->num_different_channels > 1) return -EINVAL; } } else { /* * WDS is currently prohibited when channel contexts are used * because there's no clear definition of which channel WDS Loading
net/mac80211/mesh.c +5 −4 Original line number Diff line number Diff line Loading @@ -703,8 +703,10 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, &elems); /* ignore beacons from secure mesh peers if our security is off */ if (elems.rsn_len && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) /* ignore non-mesh or secure / unsecure mismatch */ if ((!elems.mesh_id || !elems.mesh_config) || (elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) || (!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)) return; if (elems.ds_params && elems.ds_params_len == 1) Loading @@ -717,8 +719,7 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) return; if (elems.mesh_id && elems.mesh_config && mesh_matches_local(sdata, &elems)) if (mesh_matches_local(sdata, &elems)) mesh_neighbour_update(sdata, mgmt->sa, &elems); if (ifmsh->sync_ops) Loading
net/mac80211/mlme.c +4 −5 Original line number Diff line number Diff line Loading @@ -2433,7 +2433,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, struct ieee80211_chanctx_conf *chanctx_conf; struct ieee80211_channel *chan; u32 changed = 0; bool erp_valid, directed_tim = false; bool erp_valid; u8 erp_value = 0; u32 ncrc; u8 *bssid; Loading Loading @@ -2564,11 +2564,10 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, len - baselen, &elems, care_about_ies, ncrc); if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, ifmgd->aid); if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { bool directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, ifmgd->aid); if (directed_tim) { if (local->hw.conf.dynamic_ps_timeout > 0) { if (local->hw.conf.flags & IEEE80211_CONF_PS) { Loading