Medium · published April 24, 2026
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().
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 2.6.12.1, < 6.1.169 | 6.1.169 |
| linux/linux_kernel | ≥ 6.2, < 6.6.135 | 6.6.135 |
| linux/linux_kernel | ≥ 6.7, < 6.12.82 | 6.12.82 |
| linux/linux_kernel | ≥ 6.13, < 6.18.23 | 6.18.23 |
| linux/linux_kernel | ≥ 6.19, < 6.19.13 | 6.19.13 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |