CVE-2022-49850 in Linuxinfo

Zusammenfassung

von VulDB • 29.05.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

nilfs2: Behebung einer Deadlock-Situation in nilfs_count_free_blocks()

Ein Semaphore-Deadlock kann auftreten, wenn nilfs_get_block() eine Metadaten-Korruption erkennt, während Datenblöcke gesucht werden, und gleichzeitig eine Superblock-Writeback-Operation stattfindet:

task 1 task 2 ------ ------ * Eine Dateioperation * nilfs_truncate() nilfs_get_block() down_read(rwsem A) <-- nilfs_bmap_lookup_contig() ... generic_shutdown_super() nilfs_put_super() * Vorbereitung zum Schreiben des Superblocks * down_write(rwsem B) <-- nilfs_cleanup_super() * Erkennung einer B-Baum-Korruption * nilfs_set_log_cursor() nilfs_bmap_convert_error() nilfs_count_free_blocks() __nilfs_error() down_read(rwsem A) <-- nilfs_set_error() down_write(rwsem B) <--

*** DEADLOCK ***

Hierbei sperrt nilfs_get_block() rwsem A (= NILFS_MDT(dat_inode)->mi_sem) mit einem Leselock und ruft dann nilfs_bmap_lookup_contig() auf. Wenn dieser Aufruf aufgrund einer Metadaten-Korruption fehlschlägt, wird __nilfs_error() aus nilfs_bmap_convert_error() innerhalb des gesperrten Abschnitts aufgerufen.

Da __nilfs_error() nilfs_set_error() aufruft, sofern das Dateisystem nicht schreibgeschützt ist, und nilfs_set_error() versucht, rwsem B (= nilfs->ns_sem) mit einem Schreiblock zu sperren, um den Superblock exklusiv zurückzuschreiben, erfolgt die hierarchische Lock-Akquise in der Reihenfolge rwsem A -> rwsem B.

Wenn nun ein anderer Task beginnt, den Superblock zu aktualisieren, kann er während der oben genannten Lock-Sequenz rwsem B mit einem Schreiblock sperren und in einen Deadlock geraten, wenn er versucht, in nilfs_count_free_blocks() rwsem A mit einem Leselock zu sperren.

Es besteht jedoch tatsächlich kein Bedarf, rwsem A in nilfs_count_free_blocks() zu sperren, da diese Funktion innerhalb des gesperrten Abschnitts lediglich eine einzelne Ganzzahldatenstruktur aus einer gemeinsam genutzten Struktur mit nilfs_sufile_get_ncleansegs() liest. Dies war bereits nach dem Commit aa474a220180 („nilfs2: add local variable to cache the number of clean segments“) der Fall, also selbst noch bevor dieser Bug eingeführt wurde.

Daher wird das Deadlock-Problem dadurch behoben, dass das Semaphore in nilfs_count_free_blocks() einfach nicht gesperrt wird.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Zuständig

Linux

Reservieren

01.05.2025

Veröffentlichung

01.05.2025

Moderieren

akzeptiert

Eintrag

VDB-307079

CPE

bereit

EPSS

0.00141

KEV

nein

Aktivitäten

very low

Quellen

Want to stay up to date on a daily basis?

Enable the mail alert feature now!