Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b69e69d authored by John W. Linville's avatar John W. Linville
Browse files

Merge branch 'upstream-fixes'

parents 750b50ab 73451379
Loading
Loading
Loading
Loading
+59 −39
Original line number Diff line number Diff line
@@ -1872,7 +1872,7 @@ static int atmel_set_encodeext(struct net_device *dev,
	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,19 +1883,21 @@ static int atmel_set_encodeext(struct net_device *dev,
	} 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) {
	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) {
@@ -1917,6 +1919,7 @@ static int atmel_set_encodeext(struct net_device *dev,
		default:
			return -EINVAL;
		}
	}

	return -EINPROGRESS;
}
@@ -3061,17 +3064,26 @@ static void authenticate(struct atmel_private *priv, u16 frame_len)
	}

	if (status == C80211_MGMT_SC_Success && priv->wep_is_on) {
		int should_associate = 0;
		/* WEP */
		if (trans_seq_no != priv->ExpectedAuthentTransactionSeqNum)
			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_private *priv, u16 frame_len)
		}
	}

	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_long a)
			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 atmel_private *priv)
				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;
		}