mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-06 10:56:54 +07:00
mwifiex: avoid processing RX packets with invalid length
If rx_len received in interface header from FW is more than RX buffer size, skb_put for such length results into skb_panic. Avoid this by not processing such packets. We just print a warning for such packets and free skb. Reviewed-by: Paul Stewart <pstew@chromium.org> Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: Marc Yang <yangyang@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
3c99832d74
commit
42a028aa95
@ -1271,12 +1271,20 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
|
||||
*/
|
||||
pkt_len = *((__le16 *)skb_data->data);
|
||||
rx_len = le16_to_cpu(pkt_len);
|
||||
skb_put(skb_data, rx_len);
|
||||
dev_dbg(adapter->dev,
|
||||
"info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n",
|
||||
card->rxbd_rdptr, wrptr, rx_len);
|
||||
skb_pull(skb_data, INTF_HEADER_LEN);
|
||||
mwifiex_handle_rx_packet(adapter, skb_data);
|
||||
if (WARN_ON(rx_len <= INTF_HEADER_LEN ||
|
||||
rx_len > MWIFIEX_RX_DATA_BUF_SIZE)) {
|
||||
dev_err(adapter->dev,
|
||||
"Invalid RX len %d, Rd=%#x, Wr=%#x\n",
|
||||
rx_len, card->rxbd_rdptr, wrptr);
|
||||
dev_kfree_skb_any(skb_data);
|
||||
} else {
|
||||
skb_put(skb_data, rx_len);
|
||||
dev_dbg(adapter->dev,
|
||||
"info: RECV DATA: Rd=%#x, Wr=%#x, Len=%d\n",
|
||||
card->rxbd_rdptr, wrptr, rx_len);
|
||||
skb_pull(skb_data, INTF_HEADER_LEN);
|
||||
mwifiex_handle_rx_packet(adapter, skb_data);
|
||||
}
|
||||
|
||||
skb_tmp = dev_alloc_skb(MWIFIEX_RX_DATA_BUF_SIZE);
|
||||
if (!skb_tmp) {
|
||||
|
Loading…
Reference in New Issue
Block a user