In the Linux kernel, the following vulnerability has been resolved:
arm64: ptrace: fix partial SETREGSET for NT_ARM_FPMR
Currently fpmr_set() doesn't initialize the temporary 'fpmr' variable, and a SETREGSET call with a length of zero will leave this uninitialized. Consequently an arbitrary value will be written back to target->thread.uw.fpmr, potentially leaking up to 64 bits of memory from the kernel stack. The read is limited to a specific slot on the stack, and the issue does not provide a write mechanism.
Fix this by initializing the temporary value before copying the regset from userspace, as for other regsets (e.g. NT_PRSTATUS, NT_PRFPREG, NT_ARM_SYSTEM_CALL). In the case of a zero-length write, the existing contents of FPMR will be retained.
Before this patch:
| # ./fpmr-test | Attempting to write NT_ARM_FPMR::fpmr = 0x900d900d900d900d | SETREGSET(nt=0x40e, len=8) wrote 8 bytes | | Attempting to read NT_ARM_FPMR::fpmr | GETREGSET(nt=0x40e, len=8) read 8 bytes | Read NT_ARM_FPMR::fpmr = 0x900d900d900d900d | | Attempting to write NT_ARM_FPMR (zero length) | SETREGSET(nt=0x40e, len=0) wrote 0 bytes | | Attempting to read NT_ARM_FPMR::fpmr | GETREGSET(nt=0x40e, len=8) read 8 bytes | Read NT_ARM_FPMR::fpmr = 0xffff800083963d50
After this patch:
| # ./fpmr-test | Attempting to write NT_ARM_FPMR::fpmr = 0x900d900d900d900d | SETREGSET(nt=0x40e, len=8) wrote 8 bytes | | Attempting to read NT_ARM_FPMR::fpmr | GETREGSET(nt=0x40e, len=8) read 8 bytes | Read NT_ARM_FPMR::fpmr = 0x900d900d900d900d | | Attempting to write NT_ARM_FPMR (zero length) | SETREGSET(nt=0x40e, len=0) wrote 0 bytes | | Attempting to read NT_ARM_FPMR::fpmr | GETREGSET(nt=0x40e, len=8) read 8 bytes | Read NT_ARM_FPMR::fpmr = 0x900d900d900d900d
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Jan 11, 2025 |
| Ubuntu | — | Upgrade linux-image-oem-24.04aUpgrade linux-image-oracle-64kUpgrade linux-image-gcpUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-24.04bUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-oracleUpgrade linux-image-virtualUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-realtimeUpgrade linux-image-6.11.0-1013-oracle-64kUpgrade linux-image-lowlatencyUpgrade linux-image-oem-24.04Upgrade linux-image-6.11.0-1011-lowlatency-64kUpgrade linux-image-generic-64kUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.11.0-21-generic-64kUpgrade linux-image-6.11.0-1010-raspiUpgrade linux-image-6.11.0-1017-oemUpgrade linux-image-6.11.0-1011-lowlatencyUpgrade linux-image-azure-fdeUpgrade linux-image-6.11.0-1011-gcp-64kUpgrade linux-image-6.11.0-21-genericUpgrade linux-image-awsUpgrade linux-image-6.11.0-1013-oracleUpgrade linux-image-6.11.0-1012-azureUpgrade linux-image-gcp-64kUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.11.0-1011-awsUpgrade linux-image-raspiUpgrade linux-image-genericUpgrade linux-image-realtime-hwe-24.04Upgrade linux-image-azureUpgrade linux-image-6.11.0-1012-azure-fdeUpgrade linux-image-6.11.0-1011-gcpUpgrade linux-image-6.11.0-1007-realtime | Mar 28, 2025 | Jan 11, 2025 |
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub