CVE-2026-31444

In the Linux kernel, the following vulnerability has been resolved: ksmbd: fix use-after-free and NULL deref in smb_grant_oplock() smb_grant_oplock() has two issues in the oplock publication sequence: 1) opinfo is linked into ci->m_op_list (via opinfo_add) before add_lease_global_list() is called. If add_lease_global_list() fails (kmalloc returns NULL), the error path frees the opinfo via __free_opinfo() while it is still linked in ci->m_op_list. Concurrent m_op_list readers (opinfo_get_list, or direct iteration in smb_break_all_levII_oplock) dereference the freed node. 2) opinfo->o_fp is assigned after add_lease_global_list() publishes the opinfo on the global lease list. A concurrent find_same_lease_key() can walk the lease list and dereference opinfo->o_fp->f_ci while o_fp is still NULL. Fix by restructuring the publication sequence to eliminate post-publish failure: - Set opinfo->o_fp before any list publication (fixes NULL deref). - Preallocate lease_table via alloc_lease_table() before opinfo_add() so add_lease_global_list() becomes infallible after publication. - Keep the original m_op_list publication order (opinfo_add before lease list) so concurrent opens via same_client_has_lease() and opinfo_get_list() still see the in-flight grant. - Use opinfo_put() instead of __free_opinfo() on err_out so that the RCU-deferred free path is used. This also requires splitting add_lease_global_list() to take a preallocated lease_table and changing its return type from int to void, since it can no longer fail.
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:6.6.130:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*

History

11 Nov 2026, 23:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta: ksmbd: corrige uso después de liberación y desreferencia NULL en smb_grant_oplock() smb_grant_oplock() tiene dos problemas en la secuencia de publicación de oplock: 1) opinfo se enlaza en ci -> m_op_list (a través de opinfo_add) antes de que se llame a add_lease_global_list(). Si add_lease_global_list() falla (kmalloc devuelve NULL), la ruta de error libera el opinfo a través de __free_opinfo() mientras aún está enlazado en ci -> m_op_list. Lectores concurrentes de m_op_list (opinfo_get_list, o iteración directa en smb_break_all_levII_oplock) desreferencian el nodo liberado. 2) opinfo -> o_fp se asigna después de que add_lease_global_list() publica el opinfo en la lista global de arrendamientos. Un find_same_lease_key() concurrente puede recorrer la lista de arrendamientos y desreferenciar opinfo -> o_fp -> f_ci mientras o_fp aún es NULL. Se corrige reestructurando la secuencia de publicación para eliminar fallos posteriores a la publicación: - Establecer opinfo -> o_fp antes de cualquier publicación en lista (corrige la desreferencia NULL). - Preasignar lease_table a través de alloc_lease_table() antes de opinfo_add() para que add_lease_global_list() se vuelva infalible después de la publicación. - Mantener el orden de publicación original de m_op_list (opinfo_add antes de la lista de arrendamientos) para que las aperturas concurrentes a través de same_client_has_lease() y opinfo_get_list() aún vean la concesión en curso. - Usar opinfo_put() en lugar de __free_opinfo() en err_out para que se utilice la ruta de liberación diferida por RCU. Esto también requiere dividir add_lease_global_list() para que tome una lease_table preasignada y cambiar su tipo de retorno de int a void, ya que ya no puede fallar.

Information

Published : 2026-04-22 14:16

Updated : 2026-11-11 23:10


NVD link : CVE-2026-31444

Mitre link : CVE-2026-31444

CVE.ORG link : CVE-2026-31444


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-416

Use After Free