Browse Source

qcacmn: Avoid possible double skb_pull in no peer stack delivery

skb_set_len and skb_pull operations are done in both
dp_rx_deliver_to_pkt_capture_no_peer and
dp_rx_deliver_to_stack_no_peer. Due to this, in the
issue scenario, EAPOL frame gets dropped in roaming
scenario since qdf_nbuf_is_ipv4_eapol_pkt returns
false.

Fix is to do a skb_push_head operation in
dp_rx_deliver_to_pkt_capture_no_peer API before
exiting.

Change-Id: I071a5248f9f8577c8a21547f67ec53d707dee0be
CRs-Fixed: 2982188
Yeshwanth Sriram Guntuka 4 năm trước cách đây
mục cha
commit
f14c5c6593
1 tập tin đã thay đổi với 3 bổ sung3 xóa
  1. 3 3
      dp/wifi3.0/dp_rx.c

+ 3 - 3
dp/wifi3.0/dp_rx.c

@@ -2130,7 +2130,6 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf,
 	uint16_t peer_id, vdev_id;
 	uint32_t pkt_len = 0;
 	uint8_t *rx_tlv_hdr;
-	uint32_t l2_hdr_offset = 0;
 	struct hal_rx_msdu_metadata msdu_metadata;
 
 	peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf);
@@ -2140,14 +2139,15 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf,
 	msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
 	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad +
 		  soc->rx_pkt_tlv_size;
-	l2_hdr_offset =
-		hal_rx_msdu_end_l3_hdr_padding_get(soc->hal_soc, rx_tlv_hdr);
 
 	qdf_nbuf_set_pktlen(nbuf, pkt_len);
 	dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
 
 	dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf,
 			     HTT_INVALID_VDEV, is_offload, 0);
+
+	qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad +
+			   soc->rx_pkt_tlv_size);
 }
 
 #endif