Skip to content
This repository has been archived by the owner on Jun 17, 2024. It is now read-only.

Commit

Permalink
idpf: fix kernel panic on unknown packet types
Browse files Browse the repository at this point in the history
In the very rare case where a packet type is unknown to the driver,
idpf_rx_process_skb_fields would return early without calling
eth_type_trans to set the skb protocol / the network layer handler.
This is especially problematic if tcpdump is running when such a
packet is received, i.e. it would cause a kernel panic.

Instead, call eth_type_trans for every single packet, even when
the packet type is unknown.

Fixes: 3a8845a ("idpf: add RX splitq napi poll support")
Reported-by: Balazs Nemeth <[email protected]>
Signed-off-by: Joshua Hay <[email protected]>
Reviewed-by: Jesse Brandeburg <[email protected]>
Reviewed-by: Przemek Kitszel <[email protected]>
Tested-by: Salvatore Daniele <[email protected]>
Signed-off-by: Pavan Kumar Linga <[email protected]>
Tested-by: Krishneil Singh <[email protected]>
Signed-off-by: Tony Nguyen <[email protected]>
  • Loading branch information
jahay1 authored and anguy11 committed Apr 3, 2024
1 parent 8edfc7a commit dd19e82
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/net/ethernet/intel/idpf/idpf_txrx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2941,6 +2941,8 @@ static int idpf_rx_process_skb_fields(struct idpf_queue *rxq,
rx_ptype = le16_get_bits(rx_desc->ptype_err_fflags0,
VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_M);

skb->protocol = eth_type_trans(skb, rxq->vport->netdev);

decoded = rxq->vport->rx_ptype_lkup[rx_ptype];
/* If we don't know the ptype we can't do anything else with it. Just
* pass it up the stack as-is.
Expand All @@ -2951,8 +2953,6 @@ static int idpf_rx_process_skb_fields(struct idpf_queue *rxq,
/* process RSS/hash */
idpf_rx_hash(rxq, skb, rx_desc, &decoded);

skb->protocol = eth_type_trans(skb, rxq->vport->netdev);

if (le16_get_bits(rx_desc->hdrlen_flags,
VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_M))
return idpf_rx_rsc(rxq, skb, rx_desc, &decoded);
Expand Down

0 comments on commit dd19e82

Please sign in to comment.