lib: test_hmm: evict device pages on file close to avoid use-after-free
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.1.176, 6.6.140, 6.12.86, 6.18.27, 7.0.4
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: lib: test_hmm: evict device pages on file close to avoid use-after-free Patch series "Minor hmm_test fixes and cleanups". Two bugfixes a cleanup for the HMM kernel selftests. These were mostly reported by Zenghui Yu with special thanks to Lorenzo for analysing and pointing out the problems. This patch (of 3): When dmirror_fops_release() is called it frees the dmirror struct but doesn't migrate device private pages back to system memory first. This leaves those pages with a dangling zone_device_data pointer to the freed dmirror. If a subsequent fault occurs on those pages (eg. during coredump) the dmirror_devmem_fault() callback dereferences the stale pointer causing a kernel panic. This was reported [1] when running mm/ksft_hmm.sh on arm64, where a test failure triggered SIGABRT and the resulting coredump walked the VMAs faulting in the stale device private pages. Fix this by calling dmirror_device_evict_chunk() for each devmem chunk in dmirror_fops_release() to migrate all device private pages back to system memory before freeing the dmirror struct. The function is moved earlier in the file to avoid a forward declaration.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in 234071b4318feaeb27cd2e4e1b16ef6b055adf89; From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in bf477abd448c76bb8ea51c9b4f63a3a17c4b6239; From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in 5846715b6382dd4c6a69b35a56ca6115d33bc2a0; From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in 38f113f81d3f0adc658a4475dd3ecaec985e21d3; From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in 9de1eb0aac2862d6144b8db0ec1388e79f8bc3e1; From b2ef9f5a5cb37643ca5def3516c546457074b882 · fixed in 744dd97752ef1076a8d8672bb0d8aa2c7abc1144
- Linux Linux
5.8
- KernelLinux
From 5.8.0 · fixed in 6.1.176; From 6.2.0 · fixed in 6.6.140; From 6.7.0 · fixed in 6.12.86; From 6.13.0 · fixed in 6.18.27; From 6.19.0 · fixed in 7.0.4