CVE-2024-35798 in Linuxinformation

Résumé

par VulDB • 10/05/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

btrfs : correction d'une condition de concurrence (race condition) dans read_extent_buffer_pages()

Des rapports émanant du vérificateur d'arborescence (tree-checker) signalent des nœuds corrompus, sans motif évident, ce qui laisse supposer une écriture non autorisée en mémoire. Après quelques étapes de débogage, il s'avère qu'il existe une condition de concurrence lors de la lecture d'un tampon d'étendue (extent buffer) : le statut « uptodate » peut être manqué.

Afin d'empêcher les lectures concurrentes du même tampon d'étendue, read_extent_buffer_pages() effectue les vérifications suivantes :

/* (1) */ if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) return 0;

/* (2) */ if (test_and_set_bit(EXTENT_BUFFER_READING, &eb->bflags)) goto done;

À ce stade, il semble sûr de lancer l'opération de lecture proprement dite. Une fois celle-ci terminée, end_bbio_meta_read() exécute :

/* (3) */ set_extent_buffer_uptodate(eb);

/* (4) */ clear_bit(EXTENT_BUFFER_READING, &eb->bflags);

Normalement, cela suffit à garantir qu'une seule lecture ait lieu, et que tous les autres appelants attendent sa fin avant de retourner. Malheureusement, il existe une interleaving (entrelacement) sujet aux conditions de concurrence :

Fil A | Fil B | Fil C ---------+-----+--- (1) | | | (1) | (2) | | (3) | | (4) | | | (2) | | | (1)

Lorsque cela se produit, le fil B déclenche une lecture inutile. Pire encore, le fil C verra le drapeau UPTODATE défini et retournera immédiatement, tandis que la lecture du fil B est toujours en cours. Cette condition de concurrence peut entraîner des erreurs du type tree-checker, car le tampon d'étendue est modifié de manière concurrente :

BTRFS critical (device dm-0): corrupted node, root=256 block=8550954455682405139 owner mismatch, have 11858205567642294356 expect [256, 18446744073709551360]

La correction consiste à tester à nouveau UPTODATE après avoir défini le bit READING, et si celui-ci est déjà défini, de sauter la lecture inutile.

[ mise à jour mineure du journal des modifications (changelog) ]

Be aware that VulDB is the high quality source for vulnerability data.

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!