diff mbox

[mac80211] iwlwifi: don't install GTKs for IBSS vifs on resume

Message ID 1385846658-2294-1-git-send-email-antonio@meshcoding.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Antonio Quartulli Nov. 30, 2013, 9:24 p.m. UTC
From: Antonio Quartulli <antonio@open-mesh.com>

When performing keys reprogramming on HW resume, GTKs
belonging to IBSS stations should be skipped and not
installed onto the device.

Such keys are not installed by set_key() and the same
behaviour has to be kept on reprogramming (mac80211
is already performing enc/dec in SW for those keys).

Signed-off-by: Antonio Quartulli <antonio@open-mesh.com>
---

* compiled tested only *

 drivers/net/wireless/iwlwifi/dvm/lib.c | 5 +++++
 drivers/net/wireless/iwlwifi/mvm/d3.c  | 5 +++++
 2 files changed, 10 insertions(+)

Comments

Emmanuel Grumbach Dec. 1, 2013, 8:39 a.m. UTC | #1
>
> When performing keys reprogramming on HW resume, GTKs
> belonging to IBSS stations should be skipped and not
> installed onto the device.
>
> Such keys are not installed by set_key() and the same
> behaviour has to be kept on reprogramming (mac80211
> is already performing enc/dec in SW for those keys).
>
> Signed-off-by: Antonio Quartulli <antonio@open-mesh.com>
> ---
>
> * compiled tested only *
>
>  drivers/net/wireless/iwlwifi/dvm/lib.c | 5 +++++
>  drivers/net/wireless/iwlwifi/mvm/d3.c  | 5 +++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/drivers/net/wireless/iwlwifi/dvm/lib.c b/drivers/net/wireless/iwlwifi/dvm/lib.c
> index 3d5bdc4..96be24d 100644
> --- a/drivers/net/wireless/iwlwifi/dvm/lib.c
> +++ b/drivers/net/wireless/iwlwifi/dvm/lib.c
> @@ -929,6 +929,11 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw,
>         u16 p1k[IWLAGN_P1K_SIZE];
>         int ret, i;
>
> +       /* Group keys for IBSS interfaces are not stored in HW */
> +       if (vif->type == NL80211_IFTYPE_ADHOC &&
> +           !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
> +               return;
> +
>         mutex_lock(&priv->mutex);
>
>         if ((key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
> diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c
> index 6f45966..53182e6 100644
> --- a/drivers/net/wireless/iwlwifi/mvm/d3.c
> +++ b/drivers/net/wireless/iwlwifi/mvm/d3.c
> @@ -156,6 +156,11 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
>         u16 p1k[IWL_P1K_SIZE];
>         int ret, i;
>
> +       /* Group keys for IBSS interfaces are not stored in HW */
> +       if (vif->type == NL80211_IFTYPE_ADHOC &&
> +           !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
> +               return;
> +
>         mutex_lock(&mvm->mutex);

This is WoWLAN code - so you I must miss something here...
We don't support IBSS in WoWLAN (thinking about it even makes me feel bad).
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Antonio Quartulli Dec. 1, 2013, 9:39 a.m. UTC | #2
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/12/13 09:39, Emmanuel Grumbach wrote:
>> +       /* Group keys for IBSS interfaces are not stored in HW
>> */ +       if (vif->type == NL80211_IFTYPE_ADHOC && +
>> !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) +
>> return; +

Well, my knowledge about WoWLAN is really poor (in particular for what
concern IWLWIFI). I think I should have sent this as RFC first.

So isn't it possible to reach this point with a key that satisfies
that condition? If so, we are fine :)


Cheers,

- -- 
Antonio Quartulli
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iEYEARECAAYFAlKbA9kACgkQpGgxIkP9cwdLPgCfbzHDFGPl73p/a+d0Tf2nEt3t
iPwAmwTxQLYqb9fji3Ld58vgXdsl/Yrw
=sgjH
-----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Emmanuel Grumbach Dec. 1, 2013, 5:57 p.m. UTC | #3
On 12/01/2013 11:39 AM, Antonio Quartulli wrote:
> On 01/12/13 09:39, Emmanuel Grumbach wrote:
>>> +       /* Group keys for IBSS interfaces are not stored in HW
>>> */ +       if (vif->type == NL80211_IFTYPE_ADHOC && +
>>> !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) +
>>> return; +
> 
> Well, my knowledge about WoWLAN is really poor (in particular for what
> concern IWLWIFI). I think I should have sent this as RFC first.
> 
> So isn't it possible to reach this point with a key that satisfies
> that condition? If so, we are fine :)
> 

No - because in WoWLAN we will never have IBSS configured.
WoWLAN supports (currently) BSS only - I am not even sure we want to
have P2P Client there.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/iwlwifi/dvm/lib.c b/drivers/net/wireless/iwlwifi/dvm/lib.c
index 3d5bdc4..96be24d 100644
--- a/drivers/net/wireless/iwlwifi/dvm/lib.c
+++ b/drivers/net/wireless/iwlwifi/dvm/lib.c
@@ -929,6 +929,11 @@  static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw,
 	u16 p1k[IWLAGN_P1K_SIZE];
 	int ret, i;
 
+	/* Group keys for IBSS interfaces are not stored in HW */
+	if (vif->type == NL80211_IFTYPE_ADHOC &&
+	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
+		return;
+
 	mutex_lock(&priv->mutex);
 
 	if ((key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c
index 6f45966..53182e6 100644
--- a/drivers/net/wireless/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/iwlwifi/mvm/d3.c
@@ -156,6 +156,11 @@  static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
 	u16 p1k[IWL_P1K_SIZE];
 	int ret, i;
 
+	/* Group keys for IBSS interfaces are not stored in HW */
+	if (vif->type == NL80211_IFTYPE_ADHOC &&
+	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
+		return;
+
 	mutex_lock(&mvm->mutex);
 
 	switch (key->cipher) {