CVE-2024-53176

In the Linux kernel, the following vulnerability has been resolved: smb: During unmount, ensure all cached dir instances drop their dentry The unmount process (cifs_kill_sb() calling close_all_cached_dirs()) can race with various cached directory operations, which ultimately results in dentries not being dropped and these kernel BUGs: BUG: Dentry ffff88814f37e358{i=1000000000080,n=/} still in use (2) [unmount of cifs cifs] VFS: Busy inodes after unmount of cifs (cifs) ------------[ cut here ]------------ kernel BUG at fs/super.c:661! This happens when a cfid is in the process of being cleaned up when, and has been removed from the cfids->entries list, including: - Receiving a lease break from the server - Server reconnection triggers invalidate_all_cached_dirs(), which removes all the cfids from the list - The laundromat thread decides to expire an old cfid. To solve these problems, dropping the dentry is done in queued work done in a newly-added cfid_put_wq workqueue, and close_all_cached_dirs() flushes that workqueue after it drops all the dentries of which it's aware. This is a global workqueue (rather than scoped to a mount), but the queued work is minimal. The final cleanup work for cleaning up a cfid is performed via work queued in the serverclose_wq workqueue; this is done separate from dropping the dentries so that close_all_cached_dirs() doesn't block on any server operations. Both of these queued works expect to invoked with a cfid reference and a tcon reference to avoid those objects from being freed while the work is ongoing. While we're here, add proper locking to close_all_cached_dirs(), and locking around the freeing of cfid->dentry.
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:*:*:*:*:*:*:*:*

History

08 Oct 2025, 14:39

Type Values Removed Values Added
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 4.7
CWE NVD-CWE-noinfo
First Time Linux
Linux linux Kernel
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: smb: Durante el desmontaje, asegurarse de que todas las instancias de directorio en caché eliminen su dentry El proceso de desmontaje (cifs_kill_sb() llamando a close_all_cached_dirs()) puede competir con varias operaciones de directorio en caché, lo que en última instancia da como resultado que no se eliminen los dentries y estos ERRORES del kernel: ERROR: Dentry ffff88814f37e358{i=1000000000080,n=/} todavía en uso (2) [desmontaje de cifs cifs] VFS: Inodos ocupados después del desmontaje de cifs (cifs) ------------[ corte aquí ]------------ ¡ERROR del kernel en fs/super.c:661! Esto sucede cuando un cfid está en proceso de desinfección y se ha eliminado de la lista cfids->entries, lo que incluye: - Recibir una interrupción de arrendamiento del servidor - La reconexión del servidor activa invalidate_all_cached_dirs(), que elimina todos los cfids de la lista - El hilo de la lavandería decide hacer caducar un cfid antiguo. Para resolver estos problemas, se elimina el dentry en el trabajo en cola realizado en una cola de trabajo cfid_put_wq recién agregada, y close_all_cached_dirs() vacía esa cola de trabajo después de eliminar todos los dentries de los que tiene conocimiento. Esta es una cola de trabajo global (en lugar de tener un alcance de montaje), pero el trabajo en cola es mínimo. El trabajo de desinfección final para limpiar un cfid se realiza a través del trabajo en cola en la cola de trabajo serverclose_wq; esto se hace por separado de la eliminación de los dentries para que close_all_cached_dirs() no bloquee ninguna operación del servidor. Se espera que ambos trabajos en cola se invoquen con una referencia cfid y una referencia tcon para evitar que esos objetos se liberen mientras el trabajo está en curso. Mientras estamos aquí, agregue un bloqueo adecuado a close_all_cached_dirs() y un bloqueo alrededor de la liberación de cfid->dentry.
References () https://git.kernel.org/stable/c/3fa640d035e5ae526769615c35cb9ed4be6e3662 - () https://git.kernel.org/stable/c/3fa640d035e5ae526769615c35cb9ed4be6e3662 - Patch
References () https://git.kernel.org/stable/c/548812afd96982a76a93ba76c0582ea670c40d9e - () https://git.kernel.org/stable/c/548812afd96982a76a93ba76c0582ea670c40d9e - Patch
References () https://git.kernel.org/stable/c/73934e535cffbda1490fa97d82690a0f9aa73e94 - () https://git.kernel.org/stable/c/73934e535cffbda1490fa97d82690a0f9aa73e94 - Patch
References () https://git.kernel.org/stable/c/ff4528bbc82d0d90073751f7b49e7b9e9c7e5638 - () https://git.kernel.org/stable/c/ff4528bbc82d0d90073751f7b49e7b9e9c7e5638 - Patch

27 Dec 2024, 14:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-12-27 14:15

Updated : 2025-10-08 14:39


NVD link : CVE-2024-53176

Mitre link : CVE-2024-53176

CVE.ORG link : CVE-2024-53176


JSON object : View

Products Affected

linux

  • linux_kernel