CVE-2026-80734 in Linuxinfo

Zusammenfassung

von VulDB • 03.09.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

btrfs: Initialisierung der Inode-Mapping-Flags für zwischengespeicherte Inodes

[FEHLER]
Beim Ausführen von generic/795 mit einer Blockgröße von 8K und einer Seitengröße (Page Size) von 4K schlägt der Test immer fehl, wodurch einige ASSERT()-Aufrufe ausgelöst werden, die sich auf die Folio-Größe beziehen:

795 (241074): drop_caches: 3 Assertion fehlgeschlagen: IS_ALIGNED(start, blocksize) && IS_ALIGNED(end + 1, blocksize), in extent_io.c:1404 (blocksize=8192 root=262 ino=258 start=16826368 end=16830463 mapping min order=0) ------------[ cut here ]------------
Kernel-BUG bei extent_io.c:1404! Oops: ungültiger Opcode: 0000 [#1] SMP
CPU: 8 UID: 0 PID: 241105 Comm: fsstress Getäuscht (Tainted): G OE 7.2.0-rc5-custom+ #442 PREEMPT(full) f4bfb352566f3949f29c233ce6f735050a03b245 Getäuscht (Tainted): [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
Hardware-Name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unbekannt 02/02/2022 RIP: 0010:assert_folio_range.cold+0x3d/0x3f [btrfs]
Call-Trace: <TASK> btrfs_read_folio+0x9e/0x170 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3]
prepare_one_folio.constprop.0+0x104/0x2a0 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3]
btrfs_buffered_write+0x285/0xa50 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3]
btrfs_do_write_iter+0x1aa/0x210 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3]
iter_file_splice_write+0x31a/0x540 direct_splice_actor+0x53/0x170 splice_direct_to_actor+0xe9/0x240 do_splice_direct+0x76/0xb0 vfs_copy_file_range+0x1fd/0x630 __x64_sys_copy_file_range+0xf9/0x220 do_syscall_64+0xe1/0x790 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ Ende des Traces 0000000000000000 ]---

Die ASSERT()-Prüfung selbst wurde durch einen späteren Patch hinzugefügt. Der Absturz wird mit diesem neuen Debug-Patch und ohne diese Korrektur ausgelöst.

[URSACHE]
Im obigen Fall ist der Startwert 16826368 korrekt auf 8K ausgerichtet, aber das Ende (16830463 + 1) ist nicht auf 8K ausgerichtet. Darüber hinaus beträgt die minimale Folio-Ordnung des Mappings 0 und nicht der erwartete Wert 1 für eine Blockgröße von 8K bei einer Seitengröße von 4K.

Dies bedeutet, dass bei einigen Inodes btrfs_set_inode_mapping_order() nicht aufgerufen wird.

Der fehlende Aufruf von btrfs_set_inode_mapping_order() tritt für zwischengespeicherte (cached) Inodes durch die folgenden Ereignisse auf:

- btrfs_create_new_inode() wird für Inode X aufgerufen Dies setzt die minimale Folio-Ordnung korrekt für den VFS-Inode.

- btrfs_update_inode() wird für Inode X aufgerufen Dieser Aufruf führt btrfs_delayed_update_inode() aus, um einen delayed_node in root->delayed_nodes xarray zu erstellen.

- Cache/Arbeitsspeicherdruck löschen (Drop cache/memory pressure), wodurch der im Arbeitsspeicher befindliche Inode X verdrängt wird Dadurch wurde der Inode X verdrängt, aber der delayed_node befindet sich weiterhin in root->delayed_nodes zur zukünftigen Wiederverwendung.

- btrfs_iget() für Inode X erneut aufgerufen

btrfs_iget() |- btrfs_iget_locked() | |- iget5_locked_rcu() | Dies erstellt einen neuen vfs_inode für btrfs, dessen Mapping weiterhin die minimale Ordnung als 0 hat. | |- btrfs_read_locked_inode() |- btrfs_fill_inode() | |- btrfs_get_delayed_node() | Dieser findet den vorherigen Knoten und verwendet diesen delayed_node zur Initialisierung des neuen Inodes. | |- filled = true; |- if (filled) goto cache_index; Dies überspringt die Aufrufe von btrfs_update_inode_mapping_flags() und btrfs_set_inode_mapping_order(). Also hat der Inode weiterhin eine minimale Folio-Ordnung, die auf 0 gesetzt ist, anstatt den erforderlichen Wert 1.

Daher wird bei einer späteren Page-Cache-Leseoperation ein Folio erhalten, dessen Größe kleiner als die Blockgröße ist, da das Mapping seine minimale Folio-Ordnung auf 0 und nicht auf 1 setzt, was dann die ASSERT()-Prüfung auslöst.

[KORREKTUR]
Die Aufrufe von btrfs_update_inode_mapping_flags() und btrfs_set_inode_mapping_order() werden unter der Bezeichnung (Label) cache_index verschoben, sodass die Mapping-Flags und die minimale Folio-Ordnung immer festgelegt werden, unabhängig davon, ob es sich um einen zwischengespeicherten Inode handelt.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Zuständig

Linux

Reservieren

26.08.2026

Veröffentlichung

03.09.2026

Moderieren

akzeptiert

Eintrag

VDB-398326

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Interested in the pricing of exploits?

See the underground prices here!