{"id":"CVE-2026-98531","kind":"vulnerability","aliases":["CVE-2026-98531"],"related":[],"title":"Linux kernel: short SEG6 netlink attribute leaks kernel heap memory to userspace","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nipv6: sr: enforce exact attribute length for SEG6_ATTR_DST\n\nIn seg6_genl_policy, SEG6_ATTR_DST is defined with .type = NLA_BINARY and\n.len = sizeof(struct in6_addr). For NLA_BINARY, .len only enforces the\nmaximum payload length and permits shorter payloads (e.g., 0 bytes).\nWhen seg6_genl_set_tunsrc() copies sizeof(struct in6_addr) bytes via\nkmemdup(val, sizeof(*val), GFP_KERNEL), a short SEG6_ATTR_DST attribute\ntriggers a 16-byte out-of-bounds read past skb->tail into uninitialized\nskb->head memory, which is stored in sdata->tun_src and leaked back to\nuserspace via SEG6_CMD_GET_TUNSRC.\n\nSwitch SEG6_ATTR_DST in seg6_genl_policy to\nNLA_POLICY_EXACT_LEN(sizeof(struct in6_addr)) so that generic netlink\nvalidation rejects any attribute whose length is not exactly\nsizeof(struct in6_addr) with -ERANGE.\n\nTested in QEMU against Linux 7.3.0-rc3 by sending a SEG6_CMD_SET_TUNSRC\nGeneric Netlink message with a 0-byte SEG6_ATTR_DST attribute followed\nby SEG6_CMD_GET_TUNSRC. On the unfixed kernel, SEG6_CMD_SET_TUNSRC\nsucceeds (err = 0) and SEG6_CMD_GET_TUNSRC leaks 16 bytes of\nuninitialized kernel heap memory (tun_src =\n836a61ecc4d25a1042a8d60411cfb378); with this patch applied,\nSEG6_CMD_SET_TUNSRC is rejected by netlink policy validation with\n-ERANGE (-34) and tun_src remains zeroed.","summary":"A short SEG6_ATTR_DST netlink attribute makes the kernel copy 16 bytes past the end of a buffer into the SRv6 tunnel source address. That value is then returned to userspace through SEG6_CMD_GET_TUNSRC, leaking uninitialized kernel heap memory.","severity":"low","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["infrastructure","kernel","linux","self-hosted","srv6"],"not_affected_if":["default-config","no-srv6"],"how_to_check":"- `uname -r` and compare against the kernel release that contains the upstream fix for this CVE; the sources do not name the fixed version\n- `lsmod | grep seg6` or `grep -i seg6 /proc/net/ipv6_route` to see whether SRv6 (seg6) support is in use\n- unknown whether the sources name a specific vulnerable version range","fix":"- Update the Linux kernel to a release that includes the upstream commit enforcing exact length for SEG6_ATTR_DST (version not named in the sources)\n- Until patched, restrict Generic Netlink access to the IPv6 SEG6 family to trusted root processes only","status":"open","published_at":"2026-10-18T16:17:04+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","triaged_at":"2026-10-25T05:23:53+00:00","updated_at":"2026-10-25T05:23:53+00:00","category":"infrastructure","confidence":0.6,"triage":{"at":"2026-10-25T05:23:53Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream commit enforcing exact length for SEG6_ATTR_DST (version not named in the sources)\n- Until patched, restrict Generic Netlink access to the IPv6 SEG6 family to trusted root processes only","reach":"local","title":"Linux kernel: short SEG6 netlink attribute leaks kernel heap memory to userspace","impact":"low","summary":"A short SEG6_ATTR_DST netlink attribute makes the kernel copy 16 bytes past the end of a buffer into the SRv6 tunnel source address. That value is then returned to userspace through SEG6_CMD_GET_TUNSRC, leaking uninitialized kernel heap memory.","category":"infrastructure","nicknames":[],"who_cares":["linux","kernel","srv6","self-hosted"],"confidence":0.6,"needs_auth":"yes","worst_case":"local user reads kernel heap memory via SRv6 tunnel source","analyst_note":"Find the upstream fix commit and the first fixed stable kernel version for CVE-2026-98531 on the kernel.org stable mailing list or the NVD entry.","how_to_check":"- `uname -r` and compare against the kernel release that contains the upstream fix for this CVE; the sources do not name the fixed version\n- `lsmod | grep seg6` or `grep -i seg6 /proc/net/ipv6_route` to see whether SRv6 (seg6) support is in use\n- unknown whether the sources name a specific vulnerable version range","needs_analyst":true,"not_affected_if":["no-srv6","default-config"],"who_is_affected":"Systems running a Linux kernel with SRv6 (seg6) Generic Netlink support, where local processes can send SEG6 netlink commands. Hosts that do not use SRv6 or do not allow untrusted local processes to open netlink sockets are less exposed. The sources do not say whether the seg6 module is built in by default.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000748,"input_tokens":3908,"output_tokens":715,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-34':292C '-98531':15A,18A '0':122C,237C,259C '16':37B,150C,266C '7.3.0':223C '836a61ecc4d25a1042a8d60411cfb378':275C 'addr':106C,133C,198C,215C 'address':50B 'appli':279C 'attr':29B,86C,93C,145C,184C,240C 'attribut':6A,32B,82C,147C,206C,242C 'back':174C 'binari':100C,109C 'bound':155C 'buffer':44B 'byte':38B,123C,134C,151C,238C,267C 'cmd':60B,179C,229C,246C,254C,262C,281C 'copi':36B,129C 'cve':13A,16A 'defin':96C 'dst':30B,87C,94C,146C,185C,241C 'e.g':121C 'end':41B 'enforc':80C,112C 'erang':217C,291C 'err':258C 'exact':81C,193C,211C 'follow':73C,243C 'generic':201C,232C 'genl':90C,126C,188C 'get':61B,180C,247C,263C 'gfp':140C 'head':163C 'heap':9A,66B,271C 'host':24B 'in6':105C,132C,197C,214C 'infrastructur':19B 'ipv6':78C 'kernel':2A,8A,20B,35B,65B,71C,141C,252C,270C 'kmemdup':136C 'leak':7A,63B,173C,265C 'len':102C,110C,194C 'length':83C,116C,208C 'linux':1A,21B,70C,222C 'make':33B 'maximum':114C 'memori':10A,67B,164C,272C 'messag':234C 'netlink':5A,31B,202C,233C,287C 'nla':99C,108C,191C 'out-of-bound':152C 'past':39B,157C 'patch':278C 'payload':115C,120C 'permit':118C 'polici':91C,189C,192C,288C 'qemu':220C 'rc3':224C 'read':156C 'reject':204C,285C 'remain':296C 'resolv':77C 'return':55B 'sdata':169C 'seg6':4A,28B,59B,85C,89C,92C,125C,144C,178C,183C,187C,228C,239C,245C,253C,261C,280C 'self':23B 'self-host':22B 'send':226C 'set':127C,230C,255C,282C 'short':3A,27B,143C 'shorter':119C 'sizeof':103C,130C,138C,195C,212C 'skb':158C,162C 'sourc':49B 'sr':79C 'src':171C,274C,295C 'srv6':25B,47B 'store':167C 'struct':104C,131C,196C,213C 'succeed':257C 'switch':182C 'tail':159C 'test':218C 'trigger':148C 'tun':170C,273C,294C 'tunnel':48B 'tunsrc':62B,128C,181C,231C,248C,256C,264C,283C 'type':98C 'unfix':251C 'uniniti':64B,161C,269C 'userspac':12A,57B,176C 'val':137C,139C 'valid':203C,289C 'valu':52B 'via':135C,177C 'vulner':74C 'whose':207C 'zero':297C","nicknames":[],"mitigations":[],"who_affected":"Systems running a Linux kernel with SRv6 (seg6) Generic Netlink support, where local processes can send SEG6 netlink commands. Hosts that do not use SRv6 or do not allow untrusted local processes to open netlink sockets are less exposed. The sources do not say whether the seg6 module is built in by default.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-18T16:17:04+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98531","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98531","severity":null,"published_at":"2026-10-18T16:17:04+00:00","modified_at":"2026-10-19T10:19:08+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","fetched_at":"2026-10-23T22:28:56+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}