]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Feb 2026 11:55:19 +0000 (12:55 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Feb 2026 11:55:19 +0000 (12:55 +0100)
added patches:
net-tunnel-make-skb_vlan_inet_prepare-return-drop-reasons.patch
series

queue-6.12/net-tunnel-make-skb_vlan_inet_prepare-return-drop-reasons.patch [new file with mode: 0644]
queue-6.12/series [new file with mode: 0644]

diff --git a/queue-6.12/net-tunnel-make-skb_vlan_inet_prepare-return-drop-reasons.patch b/queue-6.12/net-tunnel-make-skb_vlan_inet_prepare-return-drop-reasons.patch
new file mode 100644 (file)
index 0000000..b2f258f
--- /dev/null
@@ -0,0 +1,110 @@
+From 9990ddf47d4168088e2246c3d418bf526e40830d Mon Sep 17 00:00:00 2001
+From: Menglong Dong <menglong8.dong@gmail.com>
+Date: Wed, 9 Oct 2024 10:28:21 +0800
+Subject: net: tunnel: make skb_vlan_inet_prepare() return drop reasons
+
+From: Menglong Dong <menglong8.dong@gmail.com>
+
+commit 9990ddf47d4168088e2246c3d418bf526e40830d upstream.
+
+Make skb_vlan_inet_prepare return the skb drop reasons, which is just
+what pskb_may_pull_reason() returns. Meanwhile, adjust all the call of
+it.
+
+Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Eric Dumazet <edumazet@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/bareudp.c          |    4 ++--
+ drivers/net/geneve.c           |    4 ++--
+ drivers/net/vxlan/vxlan_core.c |    2 +-
+ include/net/ip_tunnels.h       |   13 ++++++++-----
+ 4 files changed, 13 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/bareudp.c
++++ b/drivers/net/bareudp.c
+@@ -317,7 +317,7 @@ static int bareudp_xmit_skb(struct sk_bu
+       __be32 saddr;
+       int err;
+-      if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
++      if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
+               return -EINVAL;
+       if (!sock)
+@@ -387,7 +387,7 @@ static int bareudp6_xmit_skb(struct sk_b
+       __be16 sport;
+       int err;
+-      if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
++      if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
+               return -EINVAL;
+       if (!sock)
+--- a/drivers/net/geneve.c
++++ b/drivers/net/geneve.c
+@@ -827,7 +827,7 @@ static int geneve_xmit_skb(struct sk_buf
+       __be16 sport;
+       int err;
+-      if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
++      if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
+               return -EINVAL;
+       if (!gs4)
+@@ -937,7 +937,7 @@ static int geneve6_xmit_skb(struct sk_bu
+       __be16 sport;
+       int err;
+-      if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
++      if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
+               return -EINVAL;
+       if (!gs6)
+--- a/drivers/net/vxlan/vxlan_core.c
++++ b/drivers/net/vxlan/vxlan_core.c
+@@ -2381,7 +2381,7 @@ void vxlan_xmit_one(struct sk_buff *skb,
+       __be32 vni = 0;
+       no_eth_encap = flags & VXLAN_F_GPE && skb->protocol != htons(ETH_P_TEB);
+-      if (!skb_vlan_inet_prepare(skb, no_eth_encap))
++      if (skb_vlan_inet_prepare(skb, no_eth_encap))
+               goto drop;
+       old_iph = ip_hdr(skb);
+--- a/include/net/ip_tunnels.h
++++ b/include/net/ip_tunnels.h
+@@ -467,11 +467,12 @@ static inline bool pskb_inet_may_pull(st
+ /* Variant of pskb_inet_may_pull().
+  */
+-static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,
+-                                       bool inner_proto_inherit)
++static inline enum skb_drop_reason
++skb_vlan_inet_prepare(struct sk_buff *skb, bool inner_proto_inherit)
+ {
+       int nhlen = 0, maclen = inner_proto_inherit ? 0 : ETH_HLEN;
+       __be16 type = skb->protocol;
++      enum skb_drop_reason reason;
+       /* Essentially this is skb_protocol(skb, true)
+        * And we get MAC len.
+@@ -492,11 +493,13 @@ static inline bool skb_vlan_inet_prepare
+       /* For ETH_P_IPV6/ETH_P_IP we make sure to pull
+        * a base network header in skb->head.
+        */
+-      if (!pskb_may_pull(skb, maclen + nhlen))
+-              return false;
++      reason = pskb_may_pull_reason(skb, maclen + nhlen);
++      if (reason)
++              return reason;
+       skb_set_network_header(skb, maclen);
+-      return true;
++
++      return SKB_NOT_DROPPED_YET;
+ }
+ static inline int ip_encap_hlen(struct ip_tunnel_encap *e)
diff --git a/queue-6.12/series b/queue-6.12/series
new file mode 100644 (file)
index 0000000..059800f
--- /dev/null
@@ -0,0 +1 @@
+net-tunnel-make-skb_vlan_inet_prepare-return-drop-reasons.patch