| From foo@baz Wed Nov 21 13:17:56 CET 2018 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Sat, 17 Nov 2018 21:57:02 -0800 |
| Subject: net-gro: reset skb->pkt_type in napi_reuse_skb() |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit 33d9a2c72f086cbf1087b2fd2d1a15aa9df14a7f ] |
| |
| eth_type_trans() assumes initial value for skb->pkt_type |
| is PACKET_HOST. |
| |
| This is indeed the value right after a fresh skb allocation. |
| |
| However, it is possible that GRO merged a packet with a different |
| value (like PACKET_OTHERHOST in case macvlan is used), so |
| we need to make sure napi->skb will have pkt_type set back to |
| PACKET_HOST. |
| |
| Otherwise, valid packets might be dropped by the stack because |
| their pkt_type is not PACKET_HOST. |
| |
| napi_reuse_skb() was added in commit 96e93eab2033 ("gro: Add |
| internal interfaces for VLAN"), but this bug always has |
| been there. |
| |
| Fixes: 96e93eab2033 ("gro: Add internal interfaces for VLAN") |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/dev.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/net/core/dev.c |
| +++ b/net/core/dev.c |
| @@ -4756,6 +4756,10 @@ static void napi_reuse_skb(struct napi_s |
| skb->vlan_tci = 0; |
| skb->dev = napi->dev; |
| skb->skb_iif = 0; |
| + |
| + /* eth_type_trans() assumes pkt_type is PACKET_HOST */ |
| + skb->pkt_type = PACKET_HOST; |
| + |
| skb->encapsulation = 0; |
| skb_shinfo(skb)->gso_type = 0; |
| skb->truesize = SKB_TRUESIZE(skb_end_offset(skb)); |