I see skb->transport_header being advanced at line 61 :
/* Pass the frame on. */
skb->transport_header += 5;
Note that setting the transport header (conditionally or not) inNot too sure about that, but I don't have specifics. Non-IP stacks are probably all ancient, but some might care.
__netif_receive_skb()
is probably a mistake. Only network (ipv4, ipv6) handlers can possibly
know the concept
of transport header.
Hopefully at some point we can remove this defensive code.
diff --git a/net/core/dev.c b/net/core/dev.c
index c7f3dea3e0eb9eb05865e49dd7a8535afb974149..b6722e11ee4e171e6a2f379fc1d0197dfcb1a842
100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5474,8 +5474,6 @@ static int __netif_receive_skb_core(struct
sk_buff **pskb, bool pfmemalloc,
orig_dev = skb->dev;
skb_reset_network_header(skb);
- if (!skb_transport_header_was_set(skb))
- skb_reset_transport_header(skb);
skb_reset_mac_len(skb);
pt_prev = NULL;