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
2022-06-21 17:21:08 +05:30
提交者 Madan Koyyalamudi
父节点 7998d39c59
当前提交 8a36b28308

查看文件

@@ -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))
return QDF_STATUS_SUCCESS;
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);
/* 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);
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");
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) {
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 &&
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) {
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;
}