Cloudanix VulnDB

CVE-2024-57952

Medium · 5.5

CVSS

5.5

EPSS

0.2%

Published

Feb 12, 2025

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A Linux kernel bug can cause some files to stop appearing in folder listings on 32-bit computers after the system has been running for weeks.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The vulnerability causes directory entries to vanish from readdir/getdents output on 32-bit systems once the offset allocator wraps, because offset_readdir incorrectly compares dentry offsets as monotonic values instead of opaque cookies, hiding entries whose offsets exceed the wrapped next_offset.

Why it matters to the business

Applications relying on complete directory enumeration may miss files or subdirectories persistently, leading to incomplete backups, failed searches, and operational issues primarily on 32-bit Linux deployments.

How an attack unfolds

No active attacker exploitation is involved; the issue surfaces naturally after sufficient directory operations cause the offset allocator to wrap on 32-bit platforms, at which point existing entries stop appearing in listings while remaining accessible by direct lookup.

How to fix it

Apply the fix by upgrading the Linux kernel to a version containing commit 9e9e710f68bac49bd9b587823c077d06363440e0; rebuild and reboot affected systems.

How to confirm the fix worked

Verify the kernel source includes commit 9e9e710f68bac49bd9b587823c077d06363440e0, then exercise directory operations over time on 32-bit builds to confirm entries remain visible after offset wrap.

Typical attack path

  1. Run a 32-bit Linux kernel using the simple_offset directory mechanism
  2. Perform repeated directory creation and enumeration until the offset allocator wraps
  3. Observe that previously created entries no longer appear in readdir output

How to detect it

Review application logs and user reports for missing directory entries on 32-bit systems; correlate with prolonged uptime and high directory churn rates.

What your security team should do

  • Prioritize upgrade on all 32-bit Linux systems within the next maintenance window
  • Test directory enumeration workloads on representative 32-bit hardware before broad rollout
  • Document the regression timeline for any LTS kernels still using the reverted change

The record

In the Linux kernel, the following vulnerability has been resolved: Revert "libfs: fix infinite directory reads for offset dir" The current directory offset allocator (based on mtree_alloc_cyclic) stores the next offset value to return in octx->next_offset. This mechanism typically returns values that increase monotonically over time. Eventually, though, the newly allocated offset value wraps back to a low number (say, 2) which is smaller than other already- allocated offset values. Yu Kuai <yukuai3@huawei.com> reports that, after commit 64a7ce76fb90 ("libfs: fix infinite directory reads for offset dir"), if a directory's offset allocator wraps, existing entries are no longer visible via readdir/getdents because offset_readdir() stops listing entries once an entry's offset is larger than octx->next_offset. These entries vanish persistently -- they can be looked up, but will never again appear in readdir(3) output. The reason for this is that the commit treats directory offsets as monotonically increasing integer values rather than opaque cookies, and introduces this comparison: if (dentry2offset(dentry) >= last_index) { On 64-bit platforms, the directory offset value upper bound is 2^63 - 1. Directory offsets will monotonically increase for millions of years without wrapping. On 32-bit platforms, however, LONG_MAX is 2^31 - 1. The allocator can wrap after only a few weeks (at worst). Revert commit 64a7ce76fb90 ("libfs: fix infinite directory reads for offset dir") to prepare for a fix that can work properly on 32-bit systems and might apply to recent LTS kernels where shmem employs the simple_offset mechanism.

Affected packages

Ecosystem Package Introduced Fixed
Debian:11 linux 0 No fix
Debian:12 linux 0 No fix
Debian:13 linux 0 6.12.12-1
Linux Kernel 6.11.0 6.12.12
openSUSE:Leap 16.0 dtb-aarch64 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-64kb 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-default 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-default-base 0 6.12.0-160000.6.1.160000.2.4
openSUSE:Leap 16.0 kernel-docs 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-kvmsmall 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-obs-build 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-obs-qa 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-rt 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-source 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-syms 0 6.12.0-160000.6.1
openSUSE:Leap 16.0 kernel-zfcpdump 0 6.12.0-160000.6.1

Related vulnerabilities