net: warn if transport header was not set
authorEric Dumazet <edumazet@google.com>
Tue, 10 May 2022 03:57:39 +0000 (20:57 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 May 2022 11:44:16 +0000 (12:44 +0100)
Make sure skb_transport_header() and skb_transport_offset() uses
are not fooled if the transport header has not been set.

This change will likely expose existing bugs in linux networking stacks.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h

index 5296b2c37f620207a15b9cf1fe1be65fda18ef0f..b91d225fdc134d0ee9a6714a19a404988fbed0b6 100644 (file)
@@ -42,6 +42,7 @@
 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
 #include <linux/netfilter/nf_conntrack_common.h>
 #endif
+#include <net/net_debug.h>
 
 /**
  * DOC: skb checksums
@@ -2904,6 +2905,7 @@ static inline bool skb_transport_header_was_set(const struct sk_buff *skb)
 
 static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
 {
+       DEBUG_NET_WARN_ON_ONCE(!skb_transport_header_was_set(skb));
        return skb->head + skb->transport_header;
 }