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;
|
||||
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
|
||||
|
Reference in New Issue
Block a user