From: Sasha Levin Date: Tue, 17 Feb 2026 18:45:44 +0000 (-0500) Subject: Fixes for all trees X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4861237f146370143cc3fbce83e207f688b943c5;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for all trees Signed-off-by: Sasha Levin --- diff --git a/queue-6.1/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch b/queue-6.1/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch new file mode 100644 index 0000000000..07f2230292 --- /dev/null +++ b/queue-6.1/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch @@ -0,0 +1,106 @@ +From b5287e4bc5dc60627fdf20b5f426ac86d4db15f4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 9 Oct 2024 10:28:21 +0800 +Subject: net: tunnel: make skb_vlan_inet_prepare() return drop reasons + +From: Menglong Dong + +[ Upstream commit 9990ddf47d4168088e2246c3d418bf526e40830d ] + +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 +Reviewed-by: Simon Horman +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/bareudp.c | 4 ++-- + drivers/net/geneve.c | 4 ++-- + include/net/ip_tunnels.h | 13 ++++++++----- + 3 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c +index 54767154de265..cfbc0240126ef 100644 +--- a/drivers/net/bareudp.c ++++ b/drivers/net/bareudp.c +@@ -319,7 +319,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __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) +@@ -385,7 +385,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __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) +diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c +index b31441fc99fc4..6234a3c711c53 100644 +--- a/drivers/net/geneve.c ++++ b/drivers/net/geneve.c +@@ -932,7 +932,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __be16 sport; + int err; + +- if (!skb_vlan_inet_prepare(skb, inner_proto_inherit)) ++ if (skb_vlan_inet_prepare(skb, inner_proto_inherit)) + return -EINVAL; + + sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); +@@ -1031,7 +1031,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __be16 sport; + int err; + +- if (!skb_vlan_inet_prepare(skb, inner_proto_inherit)) ++ if (skb_vlan_inet_prepare(skb, inner_proto_inherit)) + return -EINVAL; + + sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); +diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h +index e93db837412b2..c649192ddbacf 100644 +--- a/include/net/ip_tunnels.h ++++ b/include/net/ip_tunnels.h +@@ -354,11 +354,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb) + + /* 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. +@@ -379,11 +380,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb, + /* 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) +-- +2.51.0 + diff --git a/queue-6.1/series b/queue-6.1/series index 2dd37272e6..b20758e24a 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -61,3 +61,4 @@ f2fs-fix-is_checkpointed-flag-inconsistency-issue-caused-by-concurrent-atomic-co f2fs-fix-to-avoid-uaf-in-f2fs_write_end_io.patch f2fs-fix-out-of-bounds-access-in-sysfs-attribute-read-write.patch usb-serial-option-add-telit-fn920c04-rndis-compositions.patch +net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch diff --git a/queue-6.6/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch b/queue-6.6/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch new file mode 100644 index 0000000000..505821b173 --- /dev/null +++ b/queue-6.6/net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch @@ -0,0 +1,106 @@ +From db6b163b196c9b185461af1e74fd25f1f7dc12b5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 9 Oct 2024 10:28:21 +0800 +Subject: net: tunnel: make skb_vlan_inet_prepare() return drop reasons + +From: Menglong Dong + +[ Upstream commit 9990ddf47d4168088e2246c3d418bf526e40830d ] + +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 +Reviewed-by: Simon Horman +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/bareudp.c | 4 ++-- + drivers/net/geneve.c | 4 ++-- + include/net/ip_tunnels.h | 13 ++++++++----- + 3 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c +index 54767154de265..cfbc0240126ef 100644 +--- a/drivers/net/bareudp.c ++++ b/drivers/net/bareudp.c +@@ -319,7 +319,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __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) +@@ -385,7 +385,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __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) +diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c +index 27761334e1bff..33dae09f7fb22 100644 +--- a/drivers/net/geneve.c ++++ b/drivers/net/geneve.c +@@ -927,7 +927,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __be16 sport; + int err; + +- if (!skb_vlan_inet_prepare(skb, inner_proto_inherit)) ++ if (skb_vlan_inet_prepare(skb, inner_proto_inherit)) + return -EINVAL; + + sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); +@@ -1026,7 +1026,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev, + __be16 sport; + int err; + +- if (!skb_vlan_inet_prepare(skb, inner_proto_inherit)) ++ if (skb_vlan_inet_prepare(skb, inner_proto_inherit)) + return -EINVAL; + + sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); +diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h +index 3d36794cb1899..1051af74285c5 100644 +--- a/include/net/ip_tunnels.h ++++ b/include/net/ip_tunnels.h +@@ -362,11 +362,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb) + + /* 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. +@@ -387,11 +388,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb, + /* 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) +-- +2.51.0 + diff --git a/queue-6.6/series b/queue-6.6/series index 09994d5140..87ca2bd71d 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -36,3 +36,4 @@ f2fs-fix-to-avoid-uaf-in-f2fs_write_end_io.patch f2fs-fix-zoned-block-device-information-initialization.patch f2fs-fix-to-avoid-mapping-wrong-physical-block-for-swapfile.patch usb-serial-option-add-telit-fn920c04-rndis-compositions.patch +net-tunnel-make-skb_vlan_inet_prepare-return-drop-re.patch