CVE-2026-63815

Linux kernel (GCP) vulnerabilities

Beschreibung

Im Linux-Kernel wurde die folgende Schwachstelle behoben:

f2fs: Begrenzung von i_inline_xattr_size für Nicht-Inline-XATTR-Inodes

Wenn das Feature flexible_inline_xattr aktiviert ist, lädt do_read_inode() den Wert von i_inline_xattr_size auf dem Datenträger unbedingt:

if (f2fs_sb_has_flexible_inline_xattr(sbi))
    fi->i_inline_xattr_size = le16_to_cpu(ri->i_inline_xattr_size);

jedoch führt sanity_check_inode() nur eine Bereichsprüfung durch, wenn der Inode auch die FI_INLINE_XATTR-Flag gesetzt hat. Ein Inode, der ein Inline-Dentry oder Inline-Daten trägt, aber nicht das FI_INLINE_XATTR-Flag – die normale Anordnung für einen Inline-Verzeichnisinhalt – behält daher einen vollständig vom Angreifer kontrollierbaren Wert von i_inline_xattr_size aus einem manipulierten Bild.

get_inline_xattr_addrs() gibt diesen Wert ohne Flag-Bedingung zurück, sodass er in die Inode-Geometrie einfließt:

MAX_INLINE_DATA()  = 4 * (CUR_ADDRS_PER_INODE - i_inline_xattr_size - 1)
NR_INLINE_DENTRY() = MAX_INLINE_DATA() * BITS_PER_BYTE / (...)
addrs_per_page()   = CUR_ADDRS_PER_INODE - i_inline_xattr_size

Ein großer Wert von i_inline_xattr_size führt dazu, dass sowohl MAX_INLINE_DATA() als auch NR_INLINE_DENTRY() negativ werden. Daher setzt make_dentry_ptr_inline() den Wert von d->max (int) auf einen negativen Wert. Der Inline-Verzeichnis-Durchlauf vergleicht dann eine ungesignierte lange bit_pos mit diesem negativen d->max, das zu einem riesigen ungezähmten Grenzwert hochgestuft wird, und liest weit über den Inline-Bereich hinaus:

while (bit_pos < d->max)        /* fs/f2fs/dir.c */
    ... test_bit_le(bit_pos, d->bitmap) / d->dentry[bit_pos] ...

Das Mounten eines manipulierten Bildes und das Lesen eines solchen Verzeichnisses löst einen Out-of-Bounds-Lesezugriff in f2fs_fill_dentries() aus; der gleiche Unterlauf korruptiert auch ADDRS_PER_INODE für reguläre Dateien.

Validiere i_inline_xattr_size gegen MAX_INLINE_XATTR_SIZE, wann immer das Feature flexible_inline_xattr aktiviert ist – also jedes Mal, wenn der Wert von der Festplatte geladen und verbraucht wird – und halte die untere Grenze MIN_INLINE_XATTR_SIZE für Inodes, die tatsächlich ein Inline-XATTR tragen. Dadurch werden legitime Inodes mit i_inline_xattr_size == 0 weiterhin akzeptiert.

Metriken

Severity
high
kein öffentlicher PoC bekannt
8.4
Quelle: cna-v3
3.6 %
Niedrig — CVE gehört zu den unteren 10 % der heute bewerteten CVEs.
0.1 %
Niedrig — Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
Veröffentlicht
2026-09-07 09:05 UTC

Re-Analyse & Statuswechsel

Chronologie der NVD-Audit-Events für diese CVE — Reanalyses, CVSS-Updates, CPE-Diffs.

  1. CVE Modified2026-08-17 05:17 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Affected: Linux, LinuxLinux, Linux
  2. CVE Modified2026-07-24 15:19 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Reference: https://git.kernel.org/stable/c/3c8d6b4093aea40a20596f452289e7c22d84e6d5
    • Reference: https://git.kernel.org/stable/c/76e1a05cf6d4051931d7fa4ead51a05786a62918
    • Reference: https://git.kernel.org/stable/c/a08ee30dcbeff6b97df75c38c2589603ddde53a6
    • Reference: https://git.kernel.org/stable/c/c3e05522daae4e7348a1ea81eeb321d25aa0fd3b
  3. New CVE Received2026-07-19 12:16 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Affected: Linux, Linux
    • Description: In the Linux kernel, the following vulnerability has been resolved: f2fs: bound i_inline_xattr_size for non-inline-xattr inodes When the flexible_inline_xattr feature is enabled, do_read_inode() loads the on-disk i_inline_xattr_size unconditionally: if (f2fs_sb_has_flexible_inline_xattr(sbi)) fi->i_inline_xattr_size = le16_to_cpu(ri->i_inline_xattr_size); but sanity_check_inode() only range-checks it when the inode also has the FI_INLINE_XATTR flag set. An inode that carries an inline dentry or inline data but not FI_INLINE_XATTR -- the normal layout for an inline directory -- therefore keeps a fully attacker-controlled i_inline_xattr_size from a crafted image. get_inline_xattr_addrs() returns that value with no flag gating, so it feeds the inode geometry: MAX_INLINE_DATA() = 4 * (CUR_ADDRS_PER_INODE - i_inline_xattr_size - 1) NR_INLINE_DENTRY() = MAX_INLINE_DATA() * BITS_PER_BYTE / (...) addrs_per_page() = CUR_ADDRS_PER_INODE - i_inline_xattr_size A large i_inline_xattr_size drives MAX_INLINE_DATA() and NR_INLINE_DENTRY() negative, so make_dentry_ptr_inline() sets d->max (int) to a negative value. The inline directory walk then compares an unsigned long bit_pos against that negative d->max, which is promoted to a huge unsigned bound, and reads far past the inline area: while (bit_pos < d->max) /* fs/f2fs/dir.c */ ... test_bit_le(bit_pos, d->bitmap) / d->dentry[bit_pos] ... Mounting a crafted image and reading such a directory triggers an out-of-bounds read in f2fs_fill_dentries(); the same underflow also corrupts ADDRS_PER_INODE for regular files. Validate i_inline_xattr_size against MAX_INLINE_XATTR_SIZE whenever the flexible_inline_xattr feature is enabled -- i.e. whenever the value is loaded from disk and consumed -- and keep the lower MIN_INLINE_XATTR_SIZE bound gated on inodes that actually carry an inline xattr, so legitimate inodes with i_inline_xattr_size == 0 are still accepted.
    • Reference: https://git.kernel.org/stable/c/16bc237ce3c483b75575abea53cfb639745311ed
    • Reference: https://git.kernel.org/stable/c/2a9f9791653ba5ed3fb45bbffa8d63a7cd5cf706

Betroffene Betriebssysteme

  • linux

    redhat / enterprise_linux10.0

  • linux

    redhat / enterprise_linux7.0

  • linux

    redhat / enterprise_linux8.0

  • linux

    redhat / enterprise_linux9.0

  • linux

    ubuntu / linux-aws-6.8jammy

  • linux

    ubuntu / linux-azureresolute

  • linux

    ubuntu / linux-azuretrusty

  • linux

    ubuntu / linux-azurexenial

  • linux

    ubuntu / linux-azure-4.15bionic

  • linux

    ubuntu / linux-azure-5.4bionic

  • linux

    ubuntu / linux-azure-fdenoble

  • linux

    ubuntu / linux-azure-fderesolute

  • linux

    ubuntu / linux-azure-fde-6.8jammy

  • linux

    ubuntu / linux-azure-fipsbionic

  • linux

    ubuntu / linux-azure-fipsfocal

  • linux

    ubuntu / linux-azure-fipsnoble

  • linux

    ubuntu / linux-fipsjammy

  • linux

    ubuntu / linux-gcp-7.0noble

  • linux

    ubuntu / linux-gkejammy

  • linux

    ubuntu / linux-nvidia-tegranoble

  • linux

    ubuntu / linux-raspinoble

  • linux

    ubuntu / linux-raspi-realtimenoble

  • linux

    linux / linux_kernel2.6.12

  • linux

    linux / linux_kernel2.6.15

Quellen & Referenzen

Verknüpfte CVEs

1392 weitere CVEs anzeigen
IDCVE-2026-63815
Linux kernel (GCP) vulnerabilities — CVE-2026-63815 | NEOSEC Intel