CVE-2026-23233 in Linux
Riassunto
di VulDB • 14/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
f2fs: correzione per evitare l'assegnazione errata del blocco fisico per il file di swap
Xiaolong Guo ha segnalato un bug f2fs su Bugzilla [1].
[1] https://bugzilla.kernel.org/show_bug.cgi?id=220951
Citato:
"Quando si utilizza il test di stress dello swap di stress-ng sul filesystem F2FS con kernel 6.6+, il sistema subisce una corruzione dei dati che porta a uno dei seguenti esiti: 1 Errori di corruzione dm-verity e riavvio del dispositivo 2 Errori di corruzione dei nodi F2FS e blocchi durante il boot
Il problema si verifica specificamente quando: 1 Si utilizza un filesystem F2FS (ext4 non è interessato) 2 La dimensione del file swap è inferiore alla dimensione della sezione F2FS (2MB) 3 Il file swap ha una disposizione fisica frammentata (più estensioni non contigue) 4 La versione del kernel è 6.6+ (la 6.1 non è interessata)
La causa radice si trova nella funzione check_swap_activate() in fs/f2fs/data.c. Quando la prima estensione di un piccolo file swap (< 2MB) non è allineata ai limiti delle sezioni, la funzione lo tratta erroneamente come l'ultima estensione, fallendo nell'assegnare le estensioni successive. Ciò comporta una creazione errata dello swap_extent in cui viene mappata solo la prima estensione, causando sovrascritture di scritture successive allo swap su posizioni fisiche errate (dati di altri file).
Passaggi per riprodurre il problema 1 Configurare un dispositivo con partizione userdata formattata F2FS 2 Compilare stress-ng da https://github.com/ColinIanKing/stress-ng 3 Eseguire il test di stress dello swap: (dispositivi Android) adb shell "cd /data/stressng; ./stress-ng-64 --metrics-brief --timeout 60 --swap 0"
Log: 1 Ftrace mostra che nel kernel 6.6, solo la prima estensione viene mappata durante il secondo chiamata a f2fs_map_blocks in check_swap_activate(): stress-ng-swap-8990: f2fs_map_blocks: ino=11002, file offset=0, start blkaddr=0x43143, len=0x1 (Solo 4KB mappati, non l'intero file swap) 2 Nel kernel 6.1, entrambe le estensioni vengono assegnate correttamente: stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=0, start blkaddr=0x13cd4, len=0x1 stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=1, start blkaddr=0x60c84b, len=0xff
Il codice problematico si trova in check_swap_activate(): if ((pblock - SM_I(sbi)->main_blkaddr) % blks_per_sec || nr_pblocks % blks_per_sec || !f2fs_valid_pinned_area(sbi, pblock)) {
bool last_extent = false;
not_aligned++;
nr_pblocks = roundup(nr_pblocks, blks_per_sec); if (cur_lblock + nr_pblocks > sis->max) nr_pblocks -= blks_per_sec;
/*
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.