Ver Fonte

qcacld-3.0: Move change to prevent mac addr modification

Move change Ie0f6f4365b8558a451fa8434832f14aebd56172b
Prevent wds_replace_peer_mac modifying mac addr in skb
to DP component

Change-Id: If2cd52c1949a0eb7d406fd44a01b15bbb18d3a81
CRs-Fixed: 3226191
Amit Mehta há 2 anos atrás
pai
commit
8a36b28308
1 ficheiros alterados com 27 adições e 32 exclusões
  1. 27 32
      components/dp/core/src/wlan_dp_softap_txrx.c

+ 27 - 32
components/dp/core/src/wlan_dp_softap_txrx.c

@@ -441,46 +441,41 @@ void dp_wds_replace_peer_mac(void *soc, struct wlan_dp_intf *dp_intf,
 static QDF_STATUS dp_softap_validate_peer_state(struct wlan_dp_intf *dp_intf,
 						qdf_nbuf_t nbuf)
 {
-	struct qdf_mac_addr *dest_mac_addr, *mac_addr;
-	static struct qdf_mac_addr bcast_mac_addr = QDF_MAC_ADDR_BCAST_INIT;
+	struct qdf_mac_addr *dest_mac_addr;
+	struct qdf_mac_addr mac_addr;
+	enum ol_txrx_peer_state peer_state;
+	void *soc;
 
 	dest_mac_addr = (struct qdf_mac_addr *)(qdf_nbuf_data(nbuf) +
 						QDF_NBUF_DEST_MAC_OFFSET);
 
-	if (QDF_NBUF_CB_GET_IS_MCAST(nbuf))
-		mac_addr = &bcast_mac_addr;
-	else
-		mac_addr = dest_mac_addr;
-
-	if (!QDF_NBUF_CB_GET_IS_BCAST(nbuf) &&
-	    !QDF_NBUF_CB_GET_IS_MCAST(nbuf)) {
-		/* for a unicast frame */
-		enum ol_txrx_peer_state peer_state;
-		void *soc = cds_get_context(QDF_MODULE_ID_SOC);
-
-		QDF_BUG(soc);
-		dp_wds_replace_peer_mac(soc, dp_intf, mac_addr->bytes);
-		peer_state = cdp_peer_state_get(soc, dp_intf->intf_id,
-						mac_addr->bytes);
+	if (QDF_NBUF_CB_GET_IS_BCAST(nbuf) || QDF_NBUF_CB_GET_IS_MCAST(nbuf))
+		return QDF_STATUS_SUCCESS;
+
+	/* for a unicast frame */
+	qdf_copy_macaddr(&mac_addr, dest_mac_addr);
+	soc = cds_get_context(QDF_MODULE_ID_SOC);
+	QDF_BUG(soc);
+	dp_wds_replace_peer_mac(soc, dp_intf, mac_addr.bytes);
+	peer_state = cdp_peer_state_get(soc, dp_intf->intf_id,
+					mac_addr.bytes);
+
+	if (peer_state == OL_TXRX_PEER_STATE_INVALID) {
+		dp_debug_rl("Failed to find right station");
+		return QDF_STATUS_E_FAILURE;
+	}
 
-		if (peer_state == OL_TXRX_PEER_STATE_INVALID) {
-			dp_debug_rl("Failed to find right station");
-			return QDF_STATUS_E_FAILURE;
-		}
+	if (peer_state != OL_TXRX_PEER_STATE_CONN &&
+	    peer_state != OL_TXRX_PEER_STATE_AUTH) {
+		dp_debug_rl("Station not connected yet");
+		return QDF_STATUS_E_FAILURE;
+	}
 
-		if (peer_state != OL_TXRX_PEER_STATE_CONN &&
-		    peer_state != OL_TXRX_PEER_STATE_AUTH) {
-			dp_debug_rl("Station not connected yet");
+	if (peer_state == OL_TXRX_PEER_STATE_CONN) {
+		if (qdf_ntohs(qdf_nbuf_get_protocol(nbuf)) != ETHERTYPE_PAE) {
+			dp_debug_rl("NON-EAPOL packet in non-Authenticated state");
 			return QDF_STATUS_E_FAILURE;
 		}
-
-		if (peer_state == OL_TXRX_PEER_STATE_CONN) {
-			if (qdf_ntohs(qdf_nbuf_get_protocol(nbuf)) !=
-			    ETHERTYPE_PAE) {
-				dp_debug_rl("NON-EAPOL packet in non-Authenticated state");
-				return QDF_STATUS_E_FAILURE;
-			}
-		}
 	}
 	return QDF_STATUS_SUCCESS;
 }