CVE-2026-98531

ipv6: sr: enforce exact attribute length for SEG6_ATTR_DST

State
Published
Severity
Not scored
Published
Oct 18, 2026
Updated
Oct 19, 2026
Reserved
Sep 25, 2026

Read the record on cve.org

Description

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

ipv6: sr: enforce exact attribute length for SEG6_ATTR_DST

In seg6_genl_policy, SEG6_ATTR_DST is defined with .type = NLA_BINARY and .len = sizeof(struct in6_addr). For NLA_BINARY, .len only enforces the maximum payload length and permits shorter payloads (e.g., 0 bytes). When seg6_genl_set_tunsrc() copies sizeof(struct in6_addr) bytes via kmemdup(val, sizeof(*val), GFP_KERNEL), a short SEG6_ATTR_DST attribute triggers a 16-byte out-of-bounds read past skb->tail into uninitialized skb->head memory, which is stored in sdata->tun_src and leaked back to userspace via SEG6_CMD_GET_TUNSRC.

Switch SEG6_ATTR_DST in seg6_genl_policy to NLA_POLICY_EXACT_LEN(sizeof(struct in6_addr)) so that generic netlink validation rejects any attribute whose length is not exactly sizeof(struct in6_addr) with -ERANGE.

Tested in QEMU against Linux 7.3.0-rc3 by sending a SEG6_CMD_SET_TUNSRC Generic Netlink message with a 0-byte SEG6_ATTR_DST attribute followed by SEG6_CMD_GET_TUNSRC. On the unfixed kernel, SEG6_CMD_SET_TUNSRC succeeds (err = 0) and SEG6_CMD_GET_TUNSRC leaks 16 bytes of uninitialized kernel heap memory (tun_src = 836a61ecc4d25a1042a8d60411cfb378); with this patch applied, SEG6_CMD_SET_TUNSRC is rejected by netlink policy validation with -ERANGE (-34) and tun_src remains zeroed.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 050a0aa3c80907b8c60a396b7e04d48d8b1a9e70Affected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 209eefebee54c4a5f01d68b61e8ac9881eca2de9Affected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before e3ac68c1cdc2535d127b2bfd50c263d16c8e4199Affected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 66bf65fa109326e4c4ddeb0b94093379f72838fdAffected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 195813bb7324c338eaba0aaa02b18681ee65b670Affected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 6fcfc362344edea745a69f3a705de50b731f3418Affected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 94214cf0a08dd2c5f37aeeea46078d9dfe8e4a0eAffected
  • 915d7e5e5930b4f01d0971d93b9b25ed17d221aa to before 2d959c75c27f90e9ec489d18ce5ee6b852ad4741Affected
LinuxLinux
  • 4.10Affected
  • before 4.10Not affected
  • 5.10.271 through 5.10.*Not affected
  • 5.15.222 through 5.15.*Not affected
  • 6.1.189 through 6.1.*Not affected
  • 6.6.158 through 6.6.*Not affected
  • 6.12.112 through 6.12.*Not affected
  • 6.18.55 through 6.18.*Not affected
  • 7.2.9 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.