---
id: CVE-2026-31664
title: |-
  In the Linux kernel, the following vulnerability has been resolved:

  xfrm: clear trailing padding in build_polexpire()

  build_expire() clears the trailing padding bytes of struct
  xfrm_user_expire after setting the hard field via memset_a…
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  xfrm: clear trailing padding in build_polexpire()

  build_expire() clears the trailing padding bytes of struct
  xfrm_user_expire after setting the hard field via memset_a…
severity: medium
cvss: 5.5
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'
vendor: linux
product: linux_kernel
affected:
  - 'linux_kernel >= 2.6.12.1, < 6.1.169'
  - 'linux_kernel >= 6.2, < 6.6.135'
  - 'linux_kernel >= 6.7, < 6.12.82'
  - 'linux_kernel >= 6.13, < 6.18.23'
  - 'linux_kernel >= 6.19, < 6.19.13'
  - linux_kernel = 2.6.12
  - linux_kernel = 7.0
patched:
  - linux_kernel 6.19.13
published: '2026-04-24'
updated: '2026-10-15'
sourceUpdated: '2026-10-15T02:19:15.327'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-31664'
references:
  - url: 'https://git.kernel.org/stable/c/71a98248c63c535eaa4d4c22f099b68d902006d0'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/a5127501c8d30b5728791b1e340284ca5c9cc4bd'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/ac6985903db047eaff54db929e4bf6b06782788e'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/b1dfd6b27df35ef4f87825aa5f607378d23ff0f2'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/c221ed63a2769a0af8bd849dfe25740048f34ef4'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/e1af65c669ebb1666c54576614c01a7f9ffcfff6'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/e6f4ffe8596947a595c9544e73a73adcb0568b88'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/eda30846ea54f8ed218468e5480c8305ca645e37'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://cert-portal.siemens.com/productcert/html/ssa-019113.html'
    label: 0b142b55-0307-4c5a-b3c9-f314f3fb7c5e
  - url: 'https://cert-portal.siemens.com/productcert/html/ssa-082556.html'
    label: 0b142b55-0307-4c5a-b3c9-f314f3fb7c5e
  - url: 'https://cert-portal.siemens.com/productcert/html/ssa-457936.html'
    label: 0b142b55-0307-4c5a-b3c9-f314f3fb7c5e
tags:
  - nvd
  - cve.org
epss: 0.0012
epssPercentile: 0.01824
ingestedAt: '2026-09-08T15:33:26.989Z'
---

## Overview

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

xfrm: clear trailing padding in build_polexpire()

build_expire() clears the trailing padding bytes of struct
xfrm_user_expire after setting the hard field via memset_after(),
but the analogous function build_polexpire() does not do this for
struct xfrm_user_polexpire.

The padding bytes after the __u8 hard field are left
uninitialized from the heap allocation, and are then sent to
userspace via netlink multicast to XFRMNLGRP_EXPIRE listeners,
leaking kernel heap memory contents.

Add the missing memset_after() call, matching build_expire().

## Affected

- `linux_kernel >= 2.6.12.1, < 6.1.169`
- `linux_kernel >= 6.2, < 6.6.135`
- `linux_kernel >= 6.7, < 6.12.82`
- `linux_kernel >= 6.13, < 6.18.23`
- `linux_kernel >= 6.19, < 6.19.13`
- `linux_kernel = 2.6.12`
- `linux_kernel = 7.0`

## Remediation

Upgrade past the affected range:

- `linux_kernel 6.19.13`
