lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 13 Apr 2015 23:47:40 +0200
From:	Mateusz Kulikowski <mateusz.kulikowski@...il.com>
To:	gregkh@...uxfoundation.org
Cc:	Mateusz Kulikowski <mateusz.kulikowski@...il.com>,
	devel@...verdev.osuosl.org, linux-kernel@...r.kernel.org
Subject: [PATCH v2 17/21] staging: rtl8192e: Fix LONG_LINE warnings (conditions)

Rework some conditions to bail out of functions faster therby
decreasing overall indent. This patch should not cause any negative
side effect (except for different execution time).

Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@...il.com>
---
 drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c |   8 +-
 drivers/staging/rtl8192e/rtl8192e/rtl_dm.c     | 197 +++++++++++++------------
 drivers/staging/rtl8192e/rtllib_rx.c           |  99 +++++++------
 drivers/staging/rtl8192e/rtllib_softmac.c      | 128 ++++++++--------
 4 files changed, 216 insertions(+), 216 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
index 6802294..2f21bdc 100644
--- a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
+++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
@@ -932,10 +932,10 @@ start:
 				  rCCK0_TxFilter1, bMaskByte2);
 
 			for (i = 0; i < CCKTxBBGainTableLength; i++) {
-				if (TempCCk == dm_cck_tx_bb_gain[i][0]) {
-					priv->CCKPresentAttentuation_20Mdefault = (u8)i;
-					break;
-				}
+				if (TempCCk != dm_cck_tx_bb_gain[i][0])
+					continue;
+				priv->CCKPresentAttentuation_20Mdefault = (u8)i;
+				break;
 			}
 			priv->CCKPresentAttentuation_40Mdefault = 0;
 			priv->CCKPresentAttentuation_difference = 0;
diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
index d71459f..2f4a96c 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
@@ -2034,9 +2034,6 @@ static void dm_init_rxpath_selection(struct net_device *dev)
 	}
 }
 
-#define PWDB_IN_RANGE	((cur_cck_pwdb < tmp_cck_max_pwdb) &&	\
-			(cur_cck_pwdb > tmp_cck_sec_pwdb))
-
 static void dm_rxpath_sel_byrssi(struct net_device *dev)
 {
 	struct r8192_priv *priv = rtllib_priv(dev);
@@ -2069,53 +2066,60 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
 
 	for (i = 0; i < RF90_PATH_MAX; i++) {
 		if (!DM_RxPathSelTable.DbgMode)
-			DM_RxPathSelTable.rf_rssi[i] = priv->stats.rx_rssi_percentage[i];
-
-		if (priv->brfpath_rxenable[i]) {
-			rf_num++;
-			cur_rf_rssi = DM_RxPathSelTable.rf_rssi[i];
-
-			if (rf_num == 1) {
-				max_rssi_index = min_rssi_index = sec_rssi_index = i;
-				tmp_max_rssi = tmp_min_rssi = tmp_sec_rssi = cur_rf_rssi;
-			} else if (rf_num == 2) {
-				if (cur_rf_rssi >= tmp_max_rssi) {
-					tmp_max_rssi = cur_rf_rssi;
-					max_rssi_index = i;
-				} else {
-					tmp_sec_rssi = tmp_min_rssi = cur_rf_rssi;
-					sec_rssi_index = min_rssi_index = i;
-				}
+			DM_RxPathSelTable.rf_rssi[i] =
+					priv->stats.rx_rssi_percentage[i];
+		if (!priv->brfpath_rxenable[i])
+			continue;
+
+		rf_num++;
+		cur_rf_rssi = DM_RxPathSelTable.rf_rssi[i];
+
+		if (rf_num == 1) {
+			sec_rssi_index = i;
+			max_rssi_index = i;
+			min_rssi_index = i;
+			tmp_sec_rssi = cur_rf_rssi;
+			tmp_max_rssi = cur_rf_rssi;
+			tmp_min_rssi = cur_rf_rssi;
+		} else if (rf_num == 2) {
+			if (cur_rf_rssi >= tmp_max_rssi) {
+				tmp_max_rssi = cur_rf_rssi;
+				max_rssi_index = i;
 			} else {
-				if (cur_rf_rssi > tmp_max_rssi) {
-					tmp_sec_rssi = tmp_max_rssi;
-					sec_rssi_index = max_rssi_index;
-					tmp_max_rssi = cur_rf_rssi;
-					max_rssi_index = i;
-				} else if (cur_rf_rssi == tmp_max_rssi) {
-					tmp_sec_rssi = cur_rf_rssi;
-					sec_rssi_index = i;
-				} else if ((cur_rf_rssi < tmp_max_rssi) &&
-					   (cur_rf_rssi > tmp_sec_rssi)) {
+				tmp_sec_rssi = cur_rf_rssi;
+				tmp_min_rssi = cur_rf_rssi;
+				sec_rssi_index = i;
+				min_rssi_index = i;
+			}
+		} else {
+			if (cur_rf_rssi > tmp_max_rssi) {
+				tmp_sec_rssi = tmp_max_rssi;
+				sec_rssi_index = max_rssi_index;
+				tmp_max_rssi = cur_rf_rssi;
+				max_rssi_index = i;
+			} else if (cur_rf_rssi == tmp_max_rssi) {
+				tmp_sec_rssi = cur_rf_rssi;
+				sec_rssi_index = i;
+			} else if ((cur_rf_rssi < tmp_max_rssi) &&
+				   (cur_rf_rssi > tmp_sec_rssi)) {
+				tmp_sec_rssi = cur_rf_rssi;
+				sec_rssi_index = i;
+			} else if (cur_rf_rssi == tmp_sec_rssi) {
+				if (tmp_sec_rssi == tmp_min_rssi) {
 					tmp_sec_rssi = cur_rf_rssi;
 					sec_rssi_index = i;
-				} else if (cur_rf_rssi == tmp_sec_rssi) {
-					if (tmp_sec_rssi == tmp_min_rssi) {
-						tmp_sec_rssi = cur_rf_rssi;
-						sec_rssi_index = i;
-					}
-				} else if ((cur_rf_rssi < tmp_sec_rssi) &&
-					   (cur_rf_rssi > tmp_min_rssi)) {
-					;
-				} else if (cur_rf_rssi == tmp_min_rssi) {
-					if (tmp_sec_rssi == tmp_min_rssi) {
-						tmp_min_rssi = cur_rf_rssi;
-						min_rssi_index = i;
-					}
-				} else if (cur_rf_rssi < tmp_min_rssi) {
+				}
+			} else if ((cur_rf_rssi < tmp_sec_rssi) &&
+				   (cur_rf_rssi > tmp_min_rssi)) {
+				;
+			} else if (cur_rf_rssi == tmp_min_rssi) {
+				if (tmp_sec_rssi == tmp_min_rssi) {
 					tmp_min_rssi = cur_rf_rssi;
 					min_rssi_index = i;
 				}
+			} else if (cur_rf_rssi < tmp_min_rssi) {
+				tmp_min_rssi = cur_rf_rssi;
+				min_rssi_index = i;
 			}
 		}
 	}
@@ -2123,66 +2127,63 @@ static void dm_rxpath_sel_byrssi(struct net_device *dev)
 	rf_num = 0;
 	if (DM_RxPathSelTable.cck_method == CCK_Rx_Version_2) {
 		for (i = 0; i < RF90_PATH_MAX; i++) {
-			if (priv->brfpath_rxenable[i]) {
-				rf_num++;
-				cur_cck_pwdb =
-					 DM_RxPathSelTable.cck_pwdb_sta[i];
+			if (!priv->brfpath_rxenable[i])
+				continue;
 
-				if (rf_num == 1) {
+			rf_num++;
+			cur_cck_pwdb = DM_RxPathSelTable.cck_pwdb_sta[i];
+
+			if (rf_num == 1) {
+				cck_rx_ver2_max_index = i;
+				cck_rx_ver2_min_index = i;
+				cck_rx_ver2_sec_index = i;
+				tmp_cck_max_pwdb = cur_cck_pwdb;
+				tmp_cck_min_pwdb = cur_cck_pwdb;
+				tmp_cck_sec_pwdb = cur_cck_pwdb;
+				continue;
+			}
+
+			if (rf_num == 2) {
+				if (cur_cck_pwdb >= tmp_cck_max_pwdb) {
+					tmp_cck_max_pwdb = cur_cck_pwdb;
 					cck_rx_ver2_max_index = i;
+				} else {
+					tmp_cck_sec_pwdb = cur_cck_pwdb;
+					tmp_cck_min_pwdb = cur_cck_pwdb;
+					cck_rx_ver2_sec_index = i;
 					cck_rx_ver2_min_index = i;
+				}
+				continue;
+			}
+
+			if (cur_cck_pwdb > tmp_cck_max_pwdb) {
+				tmp_cck_sec_pwdb = tmp_cck_max_pwdb;
+				cck_rx_ver2_sec_index = cck_rx_ver2_max_index;
+				tmp_cck_max_pwdb = cur_cck_pwdb;
+				cck_rx_ver2_max_index = i;
+			} else if (cur_cck_pwdb == tmp_cck_max_pwdb) {
+				tmp_cck_sec_pwdb = cur_cck_pwdb;
+				cck_rx_ver2_sec_index = i;
+			} else if ((cur_cck_pwdb < tmp_cck_max_pwdb) &&
+				   (cur_cck_pwdb > tmp_cck_sec_pwdb)) {
+				tmp_cck_sec_pwdb = cur_cck_pwdb;
+				cck_rx_ver2_sec_index = i;
+			} else if (cur_cck_pwdb == tmp_cck_sec_pwdb) {
+				if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb) {
+					tmp_cck_sec_pwdb = cur_cck_pwdb;
 					cck_rx_ver2_sec_index = i;
-					tmp_cck_max_pwdb = cur_cck_pwdb;
+				}
+			} else if ((cur_cck_pwdb < tmp_cck_sec_pwdb) &&
+				   (cur_cck_pwdb > tmp_cck_min_pwdb)) {
+				;
+			} else if (cur_cck_pwdb == tmp_cck_min_pwdb) {
+				if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb) {
 					tmp_cck_min_pwdb = cur_cck_pwdb;
-					tmp_cck_sec_pwdb = cur_cck_pwdb;
-				} else if (rf_num == 2) {
-					if (cur_cck_pwdb >= tmp_cck_max_pwdb) {
-						tmp_cck_max_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_max_index = i;
-					} else {
-						tmp_cck_sec_pwdb = cur_cck_pwdb;
-						tmp_cck_min_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_sec_index = i;
-						cck_rx_ver2_min_index = i;
-					}
-				} else {
-					if (cur_cck_pwdb > tmp_cck_max_pwdb) {
-						tmp_cck_sec_pwdb =
-							 tmp_cck_max_pwdb;
-						cck_rx_ver2_sec_index =
-							 cck_rx_ver2_max_index;
-						tmp_cck_max_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_max_index = i;
-					} else if (cur_cck_pwdb ==
-						   tmp_cck_max_pwdb) {
-						tmp_cck_sec_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_sec_index = i;
-					} else if (PWDB_IN_RANGE) {
-						tmp_cck_sec_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_sec_index = i;
-					} else if (cur_cck_pwdb ==
-						   tmp_cck_sec_pwdb) {
-						if (tmp_cck_sec_pwdb ==
-						    tmp_cck_min_pwdb) {
-							tmp_cck_sec_pwdb =
-								 cur_cck_pwdb;
-							cck_rx_ver2_sec_index =
-								 i;
-						}
-					} else if ((cur_cck_pwdb < tmp_cck_sec_pwdb) &&
-						   (cur_cck_pwdb > tmp_cck_min_pwdb)) {
-						;
-					} else if (cur_cck_pwdb == tmp_cck_min_pwdb) {
-						if (tmp_cck_sec_pwdb == tmp_cck_min_pwdb) {
-							tmp_cck_min_pwdb = cur_cck_pwdb;
-							cck_rx_ver2_min_index = i;
-						}
-					} else if (cur_cck_pwdb < tmp_cck_min_pwdb) {
-						tmp_cck_min_pwdb = cur_cck_pwdb;
-						cck_rx_ver2_min_index = i;
-					}
+					cck_rx_ver2_min_index = i;
 				}
-
+			} else if (cur_cck_pwdb < tmp_cck_min_pwdb) {
+				tmp_cck_min_pwdb = cur_cck_pwdb;
+				cck_rx_ver2_min_index = i;
 			}
 		}
 	}
diff --git a/drivers/staging/rtl8192e/rtllib_rx.c b/drivers/staging/rtl8192e/rtllib_rx.c
index 5371667..a66d8dc 100644
--- a/drivers/staging/rtl8192e/rtllib_rx.c
+++ b/drivers/staging/rtl8192e/rtllib_rx.c
@@ -1256,51 +1256,52 @@ static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee,
 	for (i = 0; i < rxb->nr_subframes; i++) {
 		struct sk_buff *sub_skb = rxb->subframes[i];
 
-		if (sub_skb) {
-			/* convert hdr + possible LLC headers into Ethernet header */
-			ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7];
-			if (sub_skb->len >= 8 &&
-				((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 &&
-				ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
-				memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) {
-				/* remove RFC1042 or Bridge-Tunnel encapsulation and
-				 * replace EtherType
-				 */
-				skb_pull(sub_skb, SNAP_SIZE);
-				ether_addr_copy_unaligned(skb_push(sub_skb,
-								   ETH_ALEN),
-							  src);
-				ether_addr_copy_unaligned(skb_push(sub_skb,
-								   ETH_ALEN),
-							  dst);
-			} else {
-				u16 len;
-				/* Leave Ethernet header part of hdr and full payload */
-				len = sub_skb->len;
-				memcpy(skb_push(sub_skb, 2), &len, 2);
-				ether_addr_copy_unaligned(skb_push(sub_skb,
-								   ETH_ALEN),
-							  src);
-				ether_addr_copy_unaligned(skb_push(sub_skb,
-								   ETH_ALEN),
-							  dst);
-			}
+		if (!sub_skb)
+			continue;
+
+		/* convert hdr + possible LLC headers into Ethernet header */
+		ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7];
+		if (sub_skb->len >= 8 &&
+		    ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 &&
+		      ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
+		     memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0
+		   )) {
+			/* remove RFC1042 or Bridge-Tunnel encapsulation and
+			 * replace EtherType
+			 */
+			skb_pull(sub_skb, SNAP_SIZE);
+			ether_addr_copy_unaligned(skb_push(sub_skb, ETH_ALEN),
+						  src);
+			ether_addr_copy_unaligned(skb_push(sub_skb, ETH_ALEN),
+						  dst);
+		} else {
+			u16 len;
+			/* Leave Ethernet header part of
+			 * hdr and full payload
+			 */
+			len = sub_skb->len;
+			memcpy(skb_push(sub_skb, 2), &len, 2);
+			ether_addr_copy_unaligned(skb_push(sub_skb, ETH_ALEN),
+						  src);
+			ether_addr_copy_unaligned(skb_push(sub_skb, ETH_ALEN),
+						  dst);
+		}
 
-			ieee->stats.rx_packets++;
-			ieee->stats.rx_bytes += sub_skb->len;
+		ieee->stats.rx_packets++;
+		ieee->stats.rx_bytes += sub_skb->len;
 
-			if (is_multicast_ether_addr(dst))
-				ieee->stats.multicast++;
+		if (is_multicast_ether_addr(dst))
+			ieee->stats.multicast++;
 
-			/* Indicate the packets to upper layer */
-			memset(sub_skb->cb, 0, sizeof(sub_skb->cb));
-			sub_skb->protocol = eth_type_trans(sub_skb, dev);
-			sub_skb->dev = dev;
-			sub_skb->dev->stats.rx_packets++;
-			sub_skb->dev->stats.rx_bytes += sub_skb->len;
-			sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
-			netif_rx(sub_skb);
-		}
+		/* Indicate the packets to upper layer */
+		memset(sub_skb->cb, 0, sizeof(sub_skb->cb));
+		sub_skb->protocol = eth_type_trans(sub_skb, dev);
+		sub_skb->dev = dev;
+		sub_skb->dev->stats.rx_packets++;
+		sub_skb->dev->stats.rx_bytes += sub_skb->len;
+		/* 802.11 crc not sufficient */
+		sub_skb->ip_summed = CHECKSUM_NONE;
+		netif_rx(sub_skb);
 	}
 	kfree(rxb);
 }
@@ -1722,13 +1723,13 @@ static int rtllib_parse_qos_info_param_IE(struct rtllib_info_element
 
 		rc = rtllib_read_qos_param_element(&param_element,
 						   info_element);
-		if (rc == 0) {
-			rtllib_qos_convert_ac_to_parameters(&param_element,
-							       &(network->qos_data));
-			network->flags |= NETWORK_HAS_QOS_PARAMETERS;
-			network->qos_data.param_count =
-			    param_element.info_element.ac_info & 0x0F;
-		}
+		if (rc != 0)
+			return rc;
+		rtllib_qos_convert_ac_to_parameters(&param_element,
+						    &(network->qos_data));
+		network->flags |= NETWORK_HAS_QOS_PARAMETERS;
+		network->qos_data.param_count =
+				param_element.info_element.ac_info & 0x0F;
 	}
 
 	if (rc == 0) {
diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
index 3c62638..65e8dbe 100644
--- a/drivers/staging/rtl8192e/rtllib_softmac.c
+++ b/drivers/staging/rtl8192e/rtllib_softmac.c
@@ -2246,79 +2246,77 @@ inline int rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
 	u8 *ies;
 	struct rtllib_assoc_response_frame *assoc_resp;
 	struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *) skb->data;
+	struct rtllib_network *network;
 
 	RTLLIB_DEBUG_MGMT("received [RE]ASSOCIATION RESPONSE (%d)\n",
 			  WLAN_FC_GET_STYPE(header->frame_ctl));
 
-	if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
+	if (!((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) &&
 	     ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATED &&
-	     (ieee->iw_mode == IW_MODE_INFRA)) {
-		errcode = assoc_parse(ieee, skb, &aid);
-		if (0 == errcode) {
-			struct rtllib_network *network =
-				 kzalloc(sizeof(struct rtllib_network),
-				 GFP_ATOMIC);
-
-			if (!network)
-				return 1;
-			ieee->state = RTLLIB_LINKED;
-			ieee->assoc_id = aid;
-			ieee->softmac_stats.rx_ass_ok++;
-			/* station support qos */
-			/* Let the register setting default with Legacy station */
-			assoc_resp = (struct rtllib_assoc_response_frame *)skb->data;
-			if (ieee->current_network.qos_data.supported == 1) {
-				if (rtllib_parse_info_param(ieee, assoc_resp->info_element,
-							rx_stats->len - sizeof(*assoc_resp),
-							network, rx_stats)) {
-					kfree(network);
-					return 1;
-				}
-				memcpy(ieee->pHTInfo->PeerHTCapBuf,
-				       network->bssht.bdHTCapBuf,
-				       network->bssht.bdHTCapLen);
-				memcpy(ieee->pHTInfo->PeerHTInfoBuf,
-				       network->bssht.bdHTInfoBuf,
-				       network->bssht.bdHTInfoLen);
-				if (ieee->handle_assoc_response != NULL)
-					ieee->handle_assoc_response(ieee->dev,
-						 (struct rtllib_assoc_response_frame *)header,
-						 network);
-			}
-			kfree(network);
+	     (ieee->iw_mode == IW_MODE_INFRA)))
+		return 0;
 
-			kfree(ieee->assocresp_ies);
-			ieee->assocresp_ies = NULL;
-			ies = &(assoc_resp->info_element[0].id);
-			ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
-			ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len,
-						      GFP_ATOMIC);
-			if (ieee->assocresp_ies)
-				memcpy(ieee->assocresp_ies, ies,
-				       ieee->assocresp_ies_len);
-			else {
-				netdev_info(ieee->dev,
-					    "%s()Warning: can't alloc memory for assocresp_ies\n",
-					    __func__);
-				ieee->assocresp_ies_len = 0;
-			}
-			rtllib_associate_complete(ieee);
-		} else {
-			/* aid could not been allocated */
-			ieee->softmac_stats.rx_ass_err++;
-			netdev_info(ieee->dev,
-				    "Association response status code 0x%x\n",
-				    errcode);
-			RTLLIB_DEBUG_MGMT(
-				"Association response status code 0x%x\n",
-				errcode);
-			if (ieee->AsocRetryCount < RT_ASOC_RETRY_LIMIT)
-				queue_delayed_work_rsl(ieee->wq,
-					 &ieee->associate_procedure_wq, 0);
-			else
-				rtllib_associate_abort(ieee);
+	errcode = assoc_parse(ieee, skb, &aid);
+	if (errcode) {
+		/* aid could not been allocated */
+		ieee->softmac_stats.rx_ass_err++;
+		netdev_info(ieee->dev,
+			    "Association response status code 0x%x\n",
+			    errcode);
+		RTLLIB_DEBUG_MGMT("Association response status code 0x%x\n",
+				  errcode);
+		if (ieee->AsocRetryCount < RT_ASOC_RETRY_LIMIT)
+			queue_delayed_work_rsl(ieee->wq,
+					       &ieee->associate_procedure_wq,
+					       0);
+		else
+			rtllib_associate_abort(ieee);
+		return 0;
+	}
+
+	network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC);
+	if (!network)
+		return 1;
+
+	ieee->state = RTLLIB_LINKED;
+	ieee->assoc_id = aid;
+	ieee->softmac_stats.rx_ass_ok++;
+	/* station support qos */
+	/* Let the register setting default with Legacy station */
+	assoc_resp = (struct rtllib_assoc_response_frame *)skb->data;
+	if (ieee->current_network.qos_data.supported == 1) {
+		if (rtllib_parse_info_param(ieee, assoc_resp->info_element,
+					    rx_stats->len - sizeof(*assoc_resp),
+					    network, rx_stats)) {
+			kfree(network);
+			return 1;
 		}
+		memcpy(ieee->pHTInfo->PeerHTCapBuf, network->bssht.bdHTCapBuf,
+		       network->bssht.bdHTCapLen);
+		memcpy(ieee->pHTInfo->PeerHTInfoBuf, network->bssht.bdHTInfoBuf,
+		       network->bssht.bdHTInfoLen);
+		if (ieee->handle_assoc_response != NULL)
+			ieee->handle_assoc_response(ieee->dev,
+				 (struct rtllib_assoc_response_frame *)header,
+				 network);
+	}
+	kfree(network);
+
+	kfree(ieee->assocresp_ies);
+	ieee->assocresp_ies = NULL;
+	ies = &(assoc_resp->info_element[0].id);
+	ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
+	ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len,
+				      GFP_ATOMIC);
+	if (ieee->assocresp_ies) {
+		memcpy(ieee->assocresp_ies, ies, ieee->assocresp_ies_len);
+	} else {
+		netdev_info(ieee->dev,
+			    "%s()Warning: can't alloc memory for assocresp_ies\n",
+			    __func__);
+		ieee->assocresp_ies_len = 0;
 	}
+	rtllib_associate_complete(ieee);
 	return 0;
 }
 
-- 
1.8.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ