CVE-2026-89563: ip6_tunnel: use skb_cow_head() in ip6_tnl_xmit()

Published Sep 11, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

ip6tunnel: use skbcowhead() in ip6tnlxmit()

ip6tnlxmit() may need to expand headroom before it can push the outer IPv6 and optional encap headers. It currently does that with skbreallocheadroom(), copies skb->sk ownership, consumes the original skb, and then continues processing with the replacement skb kept only in its local variable.

That is safe only if the helper cannot fail afterwards. But this helper still has post-reallocation error exits. collectmd tunnels reject non-NONE encap after the replacement, and ip6tnlencap() can also fail later. In those cases the helper returns an error to its callers while the caller still only has the original skb pointer.

Both ip6tnlstartxmit() and the IPv6 GRE paths free the caller skb on error, so they can end up freeing an skb that ip6tnlxmit() already consumed.

Use skbcowhead() instead. It provides the required headroom and writability without privately replacing the caller-owned skb, so later error returns cannot leave callers with a stale pointer.

The Ethernet users, ip6gretap and ip6erspan, clear IFFTXSKBSHARING and already call skbcowhead() before entering ip6tnlxmit(). They do not rely on the removed skbshared() reallocation. This also makes the IPv6 tunnel path consistent with iptunnelxmit().

Event History

Sep 11, 2026
CVE Published
via MITRE·07:44 PM
Data Sourced
via MITRE·07:44 PM
Description

Frequently Asked Questions

1

Which packet paths can trigger the stale-SKB error handling issue?

The affected callers named are ip6_tnl_start_xmit() and the IPv6 GRE paths. They may free the caller-owned skb after ip6_tnl_xmit() returns an error, even though the prior headroom reallocation may already have consumed that skb.

2

What conditions are needed for the problematic error path?

ip6_tnl_xmit() must need to expand packet headroom and then encounter an error after skb_realloc_headroom() has replaced the skb. Documented post-reallocation failures include collect_md tunnels using a non-NONE encapsulation and failures from ip6_tnl_encap().

3

Do the Ethernet tunnel users follow the same vulnerable handling?

The description identifies ip6gretap and ip6erspan as already clearing IFF_TX_SKB_SHARING and calling skb_cow_head() before transmission. That avoids privately replacing the caller-owned skb in the manner described for the affected paths.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203