CVE-2022-48733 in Linuxinfo

Zusammenfassung

von VulDB • 25.06.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

btrfs: Behebung eines Use-After-Free nach einem Fehler beim Erstellen einer Snapshot

In ioctl.c:create_snapshot() wird eine Struktur für einen ausstehenden (pending) Snapshot allokiert und anschließend an die Liste der ausstehenden Snapshots des Transaktionskontexts angehängt. Danach wird btrfs_commit_transaction() aufgerufen, und falls dies einen Fehler zurückgibt, springt der Code zur Marke „fail“, wo die Struktur für den ausstehenden Snapshot mit kfree() freigegeben wird. Dies kann zu einem späteren Use-After-Free des ausstehenden Snapshots führen:

1) Wir haben den ausstehenden Snapshot allokiert und ihn an die Liste der ausstehenden Snapshots der Transaktion angehängt;

2) Wir rufen btrfs_commit_transaction() auf, und dieser Aufruf schlägt entweder beim ersten Aufruf von btrfs_run_delayed_refs() oder bei btrfs_start_dirty_block_groups() fehl. In beiden Fällen wird die Transaktion nicht abgebrochen und unser Transaktionshandle wird freigegeben. Wir springen zur Marke „fail“ und geben die Struktur für den ausstehenden Snapshot frei. Die Funktion kehrt zurück, wobei der ausstehende Snapshot weiterhin in der Liste der Transaktion vorhanden ist;

3) Eine andere Aufgabe committet die Transaktion. Diesmal tritt überhaupt kein Fehler auf, und während des Commit-Vorgangs wird ein Zeiger auf die Struktur für den ausstehenden Snapshot verwendet, deren Speicherbereich vom Task zum Erstellen des Snapshots bereits freigegeben wurde, was zu einem Use-After-Free führt.

Dieses Problem hätte eigentlich von smatch erkannt werden können, das folgende Warnung ausgegeben hat:

fs/btrfs/ioctl.c:843 create_snapshot() warn: '&pending_snapshot->list' nicht aus der Liste entfernt

Die Behebung erfolgt dadurch, dass der ioctl-Aufruf zum Erstellen des Snapshots den ausstehenden Snapshot nicht direkt an die Liste der Transaktion anhängt. Stattdessen wird der ausstehende Snapshot am Transaktionshandle angefügt, und erst in btrfs_commit_transaction() wird der Snapshot nur dann an die Liste angehängt, wenn sichergestellt ist, dass ein danach zurückgegebener Fehler zum Abbruch der Transaktion führt. In diesem Fall kann der ioctl-Code den Speicher für den ausstehenden Snapshot sicher freigeben, ohne dass darauf noch zugegriffen werden kann.

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

Veröffentlichung

20.06.2024

Moderieren

akzeptiert

Eintrag

VDB-269202

CPE

bereit

EPSS

0.00230

KEV

nein

Aktivitäten

very low

Quellen

Do you need the next level of professionalism?

Upgrade your account now!