]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ipv6: exthdrs: refresh nh after handling HAO option
authorZhengchuan Liang <zcliangcn@gmail.com>
Fri, 22 May 2026 09:42:26 +0000 (17:42 +0800)
committerJakub Kicinski <kuba@kernel.org>
Mon, 25 May 2026 18:07:40 +0000 (11:07 -0700)
ip6_parse_tlv() caches skb_network_header(skb) in nh while walking
IPv6 TLVs.

ipv6_dest_hao() may call pskb_expand_head() for a cloned skb, which can
move the skb head and invalidate the cached network header pointer.
Refresh nh after ipv6_dest_hao() returns so any trailing padding or TLVs
are parsed from the current skb head.

This matches the existing pattern used in ip6_parse_tlv() after helpers
that can modify skb header storage.

Fixes: a831f5bbc89a ("[IPV6] MIP6: Add inbound interface of home address option.")
Cc: stable@kernel.org
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Co-developed-by: Luxing Yin <tr0jan@lzu.edu.cn>
Signed-off-by: Luxing Yin <tr0jan@lzu.edu.cn>
Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Reviewed-by: Justin Iurman <justin.iurman@gmail.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/7aba1debc2196189172499e5769802b026f8caf8.1779247873.git.zcliangcn@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/exthdrs.c

index cf90f933ca1ada6aa5667fa0fc28b44259f0893f..6d92c02d0e3dc4d81b20b21b61cfcb93046cea1c 100644 (file)
@@ -201,6 +201,8 @@ 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: