diff mbox series

[net] nfp: ensure skb network header is set for packet redirect

Message ID 20190609004803.9018-1-jakub.kicinski@netronome.com
State Accepted
Delegated to: David Miller
Headers show
Series [net] nfp: ensure skb network header is set for packet redirect | expand

Commit Message

Jakub Kicinski June 9, 2019, 12:48 a.m. UTC
From: John Hurley <john.hurley@netronome.com>

Packets received at the NFP driver may be redirected to egress of another
netdev (e.g. in the case of OvS internal ports). On the egress path, some
processes, like TC egress hooks, may expect the network header offset
field in the skb to be correctly set. If this is not the case there is
potential for abnormal behaviour and even the triggering of BUG() calls.

Set the skb network header field before the mac header pull when doing a
packet redirect.

Fixes: 27f54b582567 ("nfp: allow fallback packets from non-reprs")
Signed-off-by: John Hurley <john.hurley@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
 drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 +
 1 file changed, 1 insertion(+)

Comments

David Miller June 10, 2019, 3:08 a.m. UTC | #1
From: Jakub Kicinski <jakub.kicinski@netronome.com>
Date: Sat,  8 Jun 2019 17:48:03 -0700

> From: John Hurley <john.hurley@netronome.com>
> 
> Packets received at the NFP driver may be redirected to egress of another
> netdev (e.g. in the case of OvS internal ports). On the egress path, some
> processes, like TC egress hooks, may expect the network header offset
> field in the skb to be correctly set. If this is not the case there is
> potential for abnormal behaviour and even the triggering of BUG() calls.
> 
> Set the skb network header field before the mac header pull when doing a
> packet redirect.
> 
> Fixes: 27f54b582567 ("nfp: allow fallback packets from non-reprs")
> Signed-off-by: John Hurley <john.hurley@netronome.com>
> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>

Applied.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index b82b684f52ce..36a3bd30cfd9 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -1867,6 +1867,7 @@  static int nfp_net_rx(struct nfp_net_rx_ring *rx_ring, int budget)
 			napi_gro_receive(&rx_ring->r_vec->napi, skb);
 		} else {
 			skb->dev = netdev;
+			skb_reset_network_header(skb);
 			__skb_push(skb, ETH_HLEN);
 			dev_queue_xmit(skb);
 		}