CVE-2024-50229

In the Linux kernel, the following vulnerability has been resolved: nilfs2: fix potential deadlock with newly created symlinks Syzbot reported that page_symlink(), called by nilfs_symlink(), triggers memory reclamation involving the filesystem layer, which can result in circular lock dependencies among the reader/writer semaphore nilfs->ns_segctor_sem, s_writers percpu_rwsem (intwrite) and the fs_reclaim pseudo lock. This is because after commit 21fc61c73c39 ("don't put symlink bodies in pagecache into highmem"), the gfp flags of the page cache for symbolic links are overwritten to GFP_KERNEL via inode_nohighmem(). This is not a problem for symlinks read from the backing device, because the __GFP_FS flag is dropped after inode_nohighmem() is called. However, when a new symlink is created with nilfs_symlink(), the gfp flags remain overwritten to GFP_KERNEL. Then, memory allocation called from page_symlink() etc. triggers memory reclamation including the FS layer, which may call nilfs_evict_inode() or nilfs_dirty_inode(). And these can cause a deadlock if they are called while nilfs->ns_segctor_sem is held: Fix this issue by dropping the __GFP_FS flag from the page cache GFP flags of newly created symlinks in the same way that nilfs_new_inode() and __nilfs_read_inode() do, as a workaround until we adopt nofs allocation scope consistently or improve the locking constraints.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:4.4.116:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:*

History

13 Nov 2024, 18:35

Type Values Removed Values Added
CWE CWE-667
First Time Linux linux Kernel
Linux
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:4.4.116:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
References () https://git.kernel.org/stable/c/1246d86e7bbde265761932c6e2dce28c69cdcb91 - () https://git.kernel.org/stable/c/1246d86e7bbde265761932c6e2dce28c69cdcb91 - Patch
References () https://git.kernel.org/stable/c/58c7f44c7b9e5ac7e3b1e5da2572ed7767a12f38 - () https://git.kernel.org/stable/c/58c7f44c7b9e5ac7e3b1e5da2572ed7767a12f38 - Patch
References () https://git.kernel.org/stable/c/69548bb663fcb63f9ee0301be808a36b9d78dac3 - () https://git.kernel.org/stable/c/69548bb663fcb63f9ee0301be808a36b9d78dac3 - Patch
References () https://git.kernel.org/stable/c/9aa5d43ac4cace8fb9bd964ff6c23f599dc3cd24 - () https://git.kernel.org/stable/c/9aa5d43ac4cace8fb9bd964ff6c23f599dc3cd24 - Patch
References () https://git.kernel.org/stable/c/a1686db1e59f8fc016c4c9361e2119dd206f479a - () https://git.kernel.org/stable/c/a1686db1e59f8fc016c4c9361e2119dd206f479a - Patch
References () https://git.kernel.org/stable/c/b3a033e3ecd3471248d474ef263aadc0059e516a - () https://git.kernel.org/stable/c/b3a033e3ecd3471248d474ef263aadc0059e516a - Patch
References () https://git.kernel.org/stable/c/c72e0df0b56c1166736dc8eb62070ebb12591447 - () https://git.kernel.org/stable/c/c72e0df0b56c1166736dc8eb62070ebb12591447 - Patch
References () https://git.kernel.org/stable/c/cc38c596e648575ce58bfc31623a6506eda4b94a - () https://git.kernel.org/stable/c/cc38c596e648575ce58bfc31623a6506eda4b94a - Patch

12 Nov 2024, 13:56

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: nilfs2: arregla un potencial bloqueo con enlaces simbólicos recién creados Syzbot informó que page_symlink(), llamado por nilfs_symlink(), activa la recuperación de memoria que involucra la capa del sistema de archivos, lo que puede resultar en dependencias de bloqueo circular entre el semáforo de lectura/escritura nilfs->ns_segctor_sem, s_writers percpu_rwsem (intwrite) y el pseudobloqueo fs_reclaim. Esto se debe a que después de el commit 21fc61c73c39 ("no poner cuerpos de enlaces simbólicos en pagecache en highmem"), las banderas gfp de la caché de páginas para enlaces simbólicos se sobrescriben a GFP_KERNEL a través de inode_nohighmem(). Esto no es un problema para los enlaces simbólicos leídos desde el dispositivo de respaldo, porque la bandera __GFP_FS se descarta después de que se llama a inode_nohighmem(). Sin embargo, cuando se crea un nuevo enlace simbólico con nilfs_symlink(), los indicadores gfp permanecen sobrescritos en GFP_KERNEL. Luego, la asignación de memoria llamada desde page_symlink(), etc., activa la recuperación de memoria, incluida la capa FS, que puede llamar a nilfs_evict_inode() o nilfs_dirty_inode(). Y estos pueden causar un bloqueo si se los llama mientras se mantiene nilfs->ns_segctor_sem: solucione este problema eliminando el indicador __GFP_FS de los indicadores GFP de la caché de páginas de los enlaces simbólicos recién creados de la misma manera que lo hacen nilfs_new_inode() y __nilfs_read_inode(), como workaround hasta que adoptemos el alcance de asignación de nofs de manera consistente o mejoremos las restricciones de bloqueo.

09 Nov 2024, 11:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-11-09 11:15

Updated : 2024-11-13 18:35


NVD link : CVE-2024-50229

Mitre link : CVE-2024-50229

CVE.ORG link : CVE-2024-50229


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-667

Improper Locking