Ignore this...screwed-up the subject... Will post corrected version immediately...
John On Fri, Feb 17, 2006 at 01:58:01PM -0500, John W. Linville wrote: > The following changes since commit ab479995b191b4256183956c13caabb86331af8e: > Linus Torvalds: > Merge branch 'upstream-linus' of > git://oss.oracle.com/home/sourcebo/git/ocfs2 > > are found in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git > upstream-fixes > > Dan Williams: > wireless/atmel: fix setting TX key only in ENCODEEXT > wireless/atmel: fix Open System authentication process bugs > > drivers/net/wireless/atmel.c | 98 > +++++++++++++++++++++++++----------------- > 1 files changed, 59 insertions(+), 39 deletions(-) > > diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c > index 98a76f1..dfc2401 100644 > --- a/drivers/net/wireless/atmel.c > +++ b/drivers/net/wireless/atmel.c > @@ -1872,7 +1872,7 @@ static int atmel_set_encodeext(struct ne > struct atmel_private *priv = netdev_priv(dev); > struct iw_point *encoding = &wrqu->encoding; > struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; > - int idx, key_len; > + int idx, key_len, alg = ext->alg, set_key = 1; > > /* Determine and validate the key index */ > idx = encoding->flags & IW_ENCODE_INDEX; > @@ -1883,39 +1883,42 @@ static int atmel_set_encodeext(struct ne > } else > idx = priv->default_key; > > - if ((encoding->flags & IW_ENCODE_DISABLED) || > - ext->alg == IW_ENCODE_ALG_NONE) { > - priv->wep_is_on = 0; > - priv->encryption_level = 0; > - priv->pairwise_cipher_suite = CIPHER_SUITE_NONE; > - } > + if (encoding->flags & IW_ENCODE_DISABLED) > + alg = IW_ENCODE_ALG_NONE; > > - if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) > + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { > priv->default_key = idx; > + set_key = ext->key_len > 0 ? 1 : 0; > + } > > - /* Set the requested key */ > - switch (ext->alg) { > - case IW_ENCODE_ALG_NONE: > - break; > - case IW_ENCODE_ALG_WEP: > - if (ext->key_len > 5) { > - priv->wep_key_len[idx] = 13; > - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_128; > - priv->encryption_level = 2; > - } else if (ext->key_len > 0) { > - priv->wep_key_len[idx] = 5; > - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_64; > - priv->encryption_level = 1; > - } else { > + if (set_key) { > + /* Set the requested key first */ > + switch (alg) { > + case IW_ENCODE_ALG_NONE: > + priv->wep_is_on = 0; > + priv->encryption_level = 0; > + priv->pairwise_cipher_suite = CIPHER_SUITE_NONE; > + break; > + case IW_ENCODE_ALG_WEP: > + if (ext->key_len > 5) { > + priv->wep_key_len[idx] = 13; > + priv->pairwise_cipher_suite = > CIPHER_SUITE_WEP_128; > + priv->encryption_level = 2; > + } else if (ext->key_len > 0) { > + priv->wep_key_len[idx] = 5; > + priv->pairwise_cipher_suite = > CIPHER_SUITE_WEP_64; > + priv->encryption_level = 1; > + } else { > + return -EINVAL; > + } > + priv->wep_is_on = 1; > + memset(priv->wep_keys[idx], 0, 13); > + key_len = min ((int)ext->key_len, > priv->wep_key_len[idx]); > + memcpy(priv->wep_keys[idx], ext->key, key_len); > + break; > + default: > return -EINVAL; > } > - priv->wep_is_on = 1; > - memset(priv->wep_keys[idx], 0, 13); > - key_len = min ((int)ext->key_len, priv->wep_key_len[idx]); > - memcpy(priv->wep_keys[idx], ext->key, key_len); > - break; > - default: > - return -EINVAL; > } > > return -EINPROGRESS; > @@ -3061,17 +3064,26 @@ static void authenticate(struct atmel_pr > } > > if (status == C80211_MGMT_SC_Success && priv->wep_is_on) { > + int should_associate = 0; > /* WEP */ > if (trans_seq_no != priv->ExpectedAuthentTransactionSeqNum) > return; > > - if (trans_seq_no == 0x0002 && > - auth->el_id == C80211_MGMT_ElementID_ChallengeText) { > - send_authentication_request(priv, system, > auth->chall_text, auth->chall_text_len); > - return; > + if (system == C80211_MGMT_AAN_OPENSYSTEM) { > + if (trans_seq_no == 0x0002) { > + should_associate = 1; > + } > + } else if (system == C80211_MGMT_AAN_SHAREDKEY) { > + if (trans_seq_no == 0x0002 && > + auth->el_id == C80211_MGMT_ElementID_ChallengeText) > { > + send_authentication_request(priv, system, > auth->chall_text, auth->chall_text_len); > + return; > + } else if (trans_seq_no == 0x0004) { > + should_associate = 1; > + } > } > > - if (trans_seq_no == 0x0004) { > + if (should_associate) { > if(priv->station_was_associated) { > atmel_enter_state(priv, > STATION_STATE_REASSOCIATING); > send_association_request(priv, 1); > @@ -3084,11 +3096,13 @@ static void authenticate(struct atmel_pr > } > } > > - if (status == C80211_MGMT_SC_AuthAlgNotSupported) { > + if (status == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) { > /* Do opensystem first, then try sharedkey */ > - if (system == C80211_MGMT_AAN_OPENSYSTEM) { > + if (system == WLAN_AUTH_OPEN) { > priv->CurrentAuthentTransactionSeqNum = 0x001; > - send_authentication_request(priv, > C80211_MGMT_AAN_SHAREDKEY, NULL, 0); > + priv->exclude_unencrypted = 1; > + send_authentication_request(priv, WLAN_AUTH_SHARED_KEY, > NULL, 0); > + return; > } else if (priv->connect_to_any_BSS) { > int bss_index; > > @@ -3439,10 +3453,13 @@ static void atmel_management_timer(u_lon > priv->AuthenticationRequestRetryCnt = 0; > restart_search(priv); > } else { > + int auth = C80211_MGMT_AAN_OPENSYSTEM; > priv->AuthenticationRequestRetryCnt++; > priv->CurrentAuthentTransactionSeqNum = 0x0001; > mod_timer(&priv->management_timer, jiffies + > MGMT_JIFFIES); > - send_authentication_request(priv, > C80211_MGMT_AAN_OPENSYSTEM, NULL, 0); > + if (priv->wep_is_on && priv->exclude_unencrypted) > + auth = C80211_MGMT_AAN_SHAREDKEY; > + send_authentication_request(priv, auth, NULL, 0); > } > break; > > @@ -3541,12 +3558,15 @@ static void atmel_command_irq(struct atm > priv->station_was_associated = > priv->station_is_associated; > atmel_enter_state(priv, STATION_STATE_READY); > } else { > + int auth = C80211_MGMT_AAN_OPENSYSTEM; > priv->AuthenticationRequestRetryCnt = 0; > atmel_enter_state(priv, > STATION_STATE_AUTHENTICATING); > > mod_timer(&priv->management_timer, jiffies + > MGMT_JIFFIES); > priv->CurrentAuthentTransactionSeqNum = 0x0001; > - send_authentication_request(priv, > C80211_MGMT_AAN_SHAREDKEY, NULL, 0); > + if (priv->wep_is_on && > priv->exclude_unencrypted) > + auth = C80211_MGMT_AAN_SHAREDKEY; > + send_authentication_request(priv, auth, NULL, > 0); > } > return; > } > -- > John W. Linville > [EMAIL PROTECTED] -- John W. Linville [EMAIL PROTECTED] - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html