]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipv6: exthdrs: recompute network header pointer once
authorJustin Iurman <justin.iurman@gmail.com>
Tue, 2 Jun 2026 21:30:33 +0000 (23:30 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Jun 2026 02:14:56 +0000 (19:14 -0700)
In ip6_parse_tlv(), recompute the network header pointer once regardless
of the option processed (Hbh or Dest), as missing recomputation for
specific options has caused issues in the past.

Signed-off-by: Justin Iurman <justin.iurman@gmail.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260602213033.12244-1-justin.iurman@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/exthdrs.c

index 43f46ef9c53b48e3eb6c29891fa1cf0cc63ba751..9c677eb1d1a6101e39d085dd929fc12b8d28caf9 100644 (file)
@@ -178,14 +178,10 @@ static bool ip6_parse_tlv(bool hopbyhop,
                                case IPV6_TLV_IOAM:
                                        if (!ipv6_hop_ioam(skb, off))
                                                return false;
-
-                                       nh = skb_network_header(skb);
                                        break;
                                case IPV6_TLV_JUMBO:
                                        if (!ipv6_hop_jumbo(skb, off))
                                                return false;
-
-                                       nh = skb_network_header(skb);
                                        break;
                                case IPV6_TLV_CALIPSO:
                                        if (!ipv6_hop_calipso(skb, off))
@@ -203,8 +199,6 @@ static bool ip6_parse_tlv(bool hopbyhop,
                                case IPV6_TLV_HAO:
                                        if (!ipv6_dest_hao(skb, off))
                                                return false;
-
-                                       nh = skb_network_header(skb);
                                        break;
 #endif
                                default:
@@ -215,6 +209,9 @@ static bool ip6_parse_tlv(bool hopbyhop,
                                }
                        }
                        padlen = 0;
+
+                       /* recompute the network header pointer in case it has changed */
+                       nh = skb_network_header(skb);
                }
                off += optlen;
                len -= optlen;