CVE-2026-64359

Linux kernel (GCP) vulnerabilities

Beschreibung

Im Linux-Kernel wurde folgende Schwachstelle behoben:

nilfs2: Ablehnung von CLEAN_SEGMENTS ioctl mit außerhalb des Bereichs liegenden Segmentnummern

Syzbot meldete eine blockierte Aufgabe in nilfs_transaction_begin(), bei der mehrere Aufgaben, die chmod() auf einer nilfs2-Mount durchführten, über 143 Sekunden warteten, um das ns_segctor_sem für Lesezugriff zu erhalten:

INFO: task syz.0.17:5918 blockiert für mehr als 143 Sekunden.
Call Trace:
 schedule+0x164/0x360
 rwsem_down_read_slowpath+0x6d9/0x940
 down_read+0x99/0x2e0
 nilfs_transaction_begin+0x364/0x710 fs/nilfs2/segment.c:221
 nilfs_setattr+0x124/0x2c0 fs/nilfs2/inode.c:921
 notify_change+0xc1a/0xf40
 chmod_common+0x273/0x4a0
 do_fchmodat+0x12d/0x230

Der Schreiber, der das ns_segctor_sem hielt, war ein gleichzeitiger Aufrufer von NILFS_IOCTL_CLEAN_SEGMENTS, festgehalten in printk während er Warnungen pro Element aus nilfs_sufile_updatev() emittierte:

__nilfs_msg+0x373/0x450 fs/nilfs2/super.c:78
 nilfs_sufile_updatev+0x21c/0x6d0 fs/nilfs2/sufile.c:186
 nilfs_sufile_freev fs/nilfs2/sufile.h:93 [inline]
 nilfs_free_segments fs/nilfs2/segment.c:1140 [inline]
 nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1261 [inline]
 nilfs_segctor_do_construct+0x1f55/0x76c0
 nilfs_clean_segments+0x3bd/0xa50
 nilfs_ioctl_clean_segments fs/nilfs2/ioctl.c:922 [inline]
 nilfs_ioctl+0x261f/0x2780

Die Ursache ist, dass die vom Benutzer bereitgestellten Segmentnummern nicht validiert werden, bevor nilfs_clean_segments() mit der Arbeit beginnt; die Bereichsprüfung für jedes segnum erfolgt tief in der Aufrufkette durch nilfs_sufile_updatev(), das eine nilfs_warn() pro ungültigem Eintrag emittiert und dabei immer noch den segctor-Lock sowie das sufile mi_sem hält. Unter Last (wiederholte Aufrufe über mehrere Mounts, die den globalen printk-Pfad sättigen), führt die kumulierte Latenz von printk dazu, dass das ns_segctor_sem lange genug gehalten wird, um den hung_task Watchdog auszulösen und gleichzeitige Operationen wie chmod(), die das ns_segctor_sem für Lesezugriff benötigen, zu blockieren.

Die Behebung erfolgt durch Validierung des Inhalts von kbufs[4] in nilfs_clean_segments() unmittelbar nach dem Erwerb von ns_segctor_sem über nilfs_transaction_lock(). Das Halten von ns_segctor_sem serialisiert die Überprüfung gegen nilfs_ioctl_resize(), das ns_nsegments ändern kann, sodass die Validierung einen konsistenten Wert verwendet. Außerhalb des Bereichs liegende Segmentnummern werden mit -EINVAL abgelehnt, bevor irgendwelche segmentbereinigende Arbeit beginnt, so dass die ungültigen Einträge nie den pro-Element-Diagnosepfad innerhalb von nilfs_sufile_updatev() erreichen.

Metriken

Severity
high
kein öffentlicher PoC bekannt
7.1
Quelle: cna-v3
2.3 %
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. New CVE Received2026-07-25 10:17 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Affected: Linux, Linux
    • Description: In the Linux kernel, the following vulnerability has been resolved: nilfs2: reject CLEAN_SEGMENTS ioctl with out-of-range segment numbers Syzbot reported a hung task in nilfs_transaction_begin() where multiple tasks performing chmod() on a nilfs2 mount blocked for over 143 seconds waiting to acquire ns_segctor_sem for read: INFO: task syz.0.17:5918 blocked for more than 143 seconds. Call Trace: schedule+0x164/0x360 rwsem_down_read_slowpath+0x6d9/0x940 down_read+0x99/0x2e0 nilfs_transaction_begin+0x364/0x710 fs/nilfs2/segment.c:221 nilfs_setattr+0x124/0x2c0 fs/nilfs2/inode.c:921 notify_change+0xc1a/0xf40 chmod_common+0x273/0x4a0 do_fchmodat+0x12d/0x230 The writer holding ns_segctor_sem was a concurrent NILFS_IOCTL_CLEAN_SEGMENTS caller, stuck inside printk while emitting per-element warnings from nilfs_sufile_updatev(): __nilfs_msg+0x373/0x450 fs/nilfs2/super.c:78 nilfs_sufile_updatev+0x21c/0x6d0 fs/nilfs2/sufile.c:186 nilfs_sufile_freev fs/nilfs2/sufile.h:93 [inline] nilfs_free_segments fs/nilfs2/segment.c:1140 [inline] nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1261 [inline] nilfs_segctor_do_construct+0x1f55/0x76c0 nilfs_clean_segments+0x3bd/0xa50 nilfs_ioctl_clean_segments fs/nilfs2/ioctl.c:922 [inline] nilfs_ioctl+0x261f/0x2780 The root cause is that user-supplied segment numbers are not validated before nilfs_clean_segments() begins doing work; the range check on each segnum is performed deep inside the call chain by nilfs_sufile_updatev(), which emits a nilfs_warn() per invalid entry while still holding the segctor lock and the sufile mi_sem. Under load (repeated invocations across multiple mounts saturating the global printk path), the cumulative printk latency keeps ns_segctor_sem held long enough to trip the hung_task watchdog, blocking concurrent operations such as chmod() that need ns_segctor_sem for read. Fix by validating the contents of kbufs[4] in nilfs_clean_segments() immediately after acquiring ns_segctor_sem via nilfs_transaction_lock(). Holding ns_segctor_sem serializes the check against nilfs_ioctl_resize(), which can modify ns_nsegments, so the validation uses a consistent value. Out-of-range segment numbers are rejected with -EINVAL before any segment-cleaning work begins, so the bad entries never reach the per-element diagnostic path inside nilfs_sufile_updatev().
    • Reference: https://git.kernel.org/stable/c/0789f0a6710713254a08f3a7d2ecbb6d1cbcf0aa
    • Reference: https://git.kernel.org/stable/c/0e7a690fe435f8d5ea3feb7c1d8d73ba7e8b8aa9

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-64359
Linux kernel (GCP) vulnerabilities — CVE-2026-64359 | NEOSEC Intel