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
This commit is contained in:

committed by
Madan Koyyalamudi

parent
43c413bc3b
commit
f14c5c6593
@@ -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;
|
uint16_t peer_id, vdev_id;
|
||||||
uint32_t pkt_len = 0;
|
uint32_t pkt_len = 0;
|
||||||
uint8_t *rx_tlv_hdr;
|
uint8_t *rx_tlv_hdr;
|
||||||
uint32_t l2_hdr_offset = 0;
|
|
||||||
struct hal_rx_msdu_metadata msdu_metadata;
|
struct hal_rx_msdu_metadata msdu_metadata;
|
||||||
|
|
||||||
peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf);
|
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);
|
msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
|
||||||
pkt_len = msdu_len + msdu_metadata.l3_hdr_pad +
|
pkt_len = msdu_len + msdu_metadata.l3_hdr_pad +
|
||||||
soc->rx_pkt_tlv_size;
|
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);
|
qdf_nbuf_set_pktlen(nbuf, pkt_len);
|
||||||
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
dp_rx_skip_tlvs(soc, nbuf, msdu_metadata.l3_hdr_pad);
|
||||||
|
|
||||||
dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf,
|
dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf,
|
||||||
HTT_INVALID_VDEV, is_offload, 0);
|
HTT_INVALID_VDEV, is_offload, 0);
|
||||||
|
|
||||||
|
qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad +
|
||||||
|
soc->rx_pkt_tlv_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user