CVE-2024-35797

mm: cachestat: fix two shmem bugs

State
Published
Severity
7.1 High
Published
May 17, 2024
Updated
Aug 5, 2026
Reserved
May 17, 2024

Read the record on cve.org

Description

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

mm: cachestat: fix two shmem bugs

When cachestat on shmem races with swapping and invalidation, there are two possible bugs:

1) A swapin error can have resulted in a poisoned swap entry in the shmem inode's xarray. Calling get_shadow_from_swap_cache() on it will result in an out-of-bounds access to swapper_spaces[].

Validate the entry with non_swap_entry() before going further.

2) When we find a valid swap entry in the shmem's inode, the shadow entry in the swapcache might not exist yet: swap IO is still in progress and we're before __remove_mapping; swapin, invalidation, or swapoff have removed the shadow from swapcache after we saw the shmem swap entry.

This will send a NULL to workingset_test_recent(). The latter purely operates on pointer bits, so it won't crash - node 0, memcg ID 0, eviction timestamp 0, etc. are all valid inputs - but it's a bogus test. In theory that could result in a false "recently evicted" count.

Such a false positive wouldn't be the end of the world. But for code clarity and (future) robustness, be explicit about this case.

Bail on get_shadow_from_swap_cache() returning NULL.

Scores

CVSSScoreVectorSource
3.17.1 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:HLinux
3.15.3 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LCISA-ADP

Weaknesses

Affected Products

ProductVersions
LinuxLinux
  • cf264e1329fb0307e044f7675849f9f38b44c11a to before b79f9e1ff27c994a4c452235ba09e672ec698e23Affected
  • cf264e1329fb0307e044f7675849f9f38b44c11a to before d962f6c583458037dc7e529659b2b02b9dd3d94bAffected
  • cf264e1329fb0307e044f7675849f9f38b44c11a to before 24a0e73d544439bb9329fbbafac44299e548a677Affected
  • cf264e1329fb0307e044f7675849f9f38b44c11a to before d5d39c707a4cf0bcc84680178677b97aa2cb2627Affected
LinuxLinux
  • 6.5Affected
  • before 6.5Not affected
  • 6.6.24 through 6.6.*Not affected
  • 6.7.12 through 6.7.*Not affected
  • 6.8.3 through 6.8.*Not affected
  • 6.9 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.