CVE-2025-21739

In the Linux kernel, the following vulnerability has been resolved: scsi: ufs: core: Fix use-after free in init error and remove paths devm_blk_crypto_profile_init() registers a cleanup handler to run when the associated (platform-) device is being released. For UFS, the crypto private data and pointers are stored as part of the ufs_hba's data structure 'struct ufs_hba::crypto_profile'. This structure is allocated as part of the underlying ufshcd and therefore Scsi_host allocation. During driver release or during error handling in ufshcd_pltfrm_init(), this structure is released as part of ufshcd_dealloc_host() before the (platform-) device associated with the crypto call above is released. Once this device is released, the crypto cleanup code will run, using the just-released 'struct ufs_hba::crypto_profile'. This causes a use-after-free situation: Call trace: kfree+0x60/0x2d8 (P) kvfree+0x44/0x60 blk_crypto_profile_destroy_callback+0x28/0x70 devm_action_release+0x1c/0x30 release_nodes+0x6c/0x108 devres_release_all+0x98/0x100 device_unbind_cleanup+0x20/0x70 really_probe+0x218/0x2d0 In other words, the initialisation code flow is: platform-device probe ufshcd_pltfrm_init() ufshcd_alloc_host() scsi_host_alloc() allocation of struct ufs_hba creation of scsi-host devices devm_blk_crypto_profile_init() devm registration of cleanup handler using platform-device and during error handling of ufshcd_pltfrm_init() or during driver removal: ufshcd_dealloc_host() scsi_host_put() put_device(scsi-host) release of struct ufs_hba put_device(platform-device) crypto cleanup handler To fix this use-after free, change ufshcd_alloc_host() to register a devres action to automatically cleanup the underlying SCSI device on ufshcd destruction, without requiring explicit calls to ufshcd_dealloc_host(). This way: * the crypto profile and all other ufs_hba-owned resources are destroyed before SCSI (as they've been registered after) * a memleak is plugged in tc-dwc-g210-pci.c remove() as a side-effect * EXPORT_SYMBOL_GPL(ufshcd_dealloc_host) can be removed fully as it's not needed anymore * no future drivers using ufshcd_alloc_host() could ever forget adding the cleanup
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:6.14:rc1:*:*:*:*:*:*

History

24 Mar 2025, 17:12

Type Values Removed Values Added
CPE cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: scsi: ufs: core: Fix use-after free in init error and remove paths devm_blk_crypto_profile_init() registra un controlador de depuración para ejecutarse cuando se libera el dispositivo (de plataforma) asociado. Para UFS, los datos privados de cifrado y los punteros se almacenan como parte de la estructura de datos de ufs_hba 'struct ufs_hba::crypto_profile'. Esta estructura se asigna como parte de la asignación subyacente de ufshcd y, por lo tanto, de Scsi_host. Durante el lanzamiento del controlador o durante la gestión de errores en ufshcd_pltfrm_init(), esta estructura se libera como parte de ufshcd_dealloc_host() antes de que se libere el dispositivo (de plataforma) asociado con la llamada criptográfica anterior. Una vez que se libera este dispositivo, se ejecutará el código de depuración criptográfica, utilizando el 'struct ufs_hba::crypto_profile' recién publicado. Esto provoca una situación de use after free: Call trace: kfree+0x60/0x2d8 (P) kvfree+0x44/0x60 blk_crypto_profile_destroy_callback+0x28/0x70 devm_action_release+0x1c/0x30 release_nodes+0x6c/0x108 devres_release_all+0x98/0x100 device_unbind_cleanup+0x20/0x70 really_probe+0x218/0x2d0 In other words, the initialisation code flow is: platform-device probe ufshcd_pltfrm_init() ufshcd_alloc_host() scsi_host_alloc() allocation of struct ufs_hba creation of scsi-host devices devm_blk_crypto_profile_init() devm registration of cleanup handler using platform-device and during error handling of ufshcd_pltfrm_init() or during driver removal: ufshcd_dealloc_host() scsi_host_put() put_device(scsi-host) release of struct ufs_hba put_device(platform-device) crypto cleanup handler To fix this use-after free, change ufshcd_alloc_host() para registrar una acción devres para limpiar automáticamente el dispositivo SCSI subyacente en la destrucción de ufshcd, sin requerir llamadas explícitas a ufshcd_dealloc_host(). De esta manera: * el perfil criptográfico y todos los demás recursos propiedad de ufs_hba se destruyen antes de SCSI (ya que se registraron después) * se conecta una fuga de memoria en tc-dwc-g210-pci.c remove() como efecto secundario * EXPORT_SYMBOL_GPL(ufshcd_dealloc_host) se puede eliminar por completo ya que ya no es necesario * ningún controlador futuro que use ufshcd_alloc_host() podría olvidarse de agregar la depuración
First Time Linux linux Kernel
Linux
References () https://git.kernel.org/stable/c/0c77c0d754fe83cb154715fcfec6c3faef94f207 - () https://git.kernel.org/stable/c/0c77c0d754fe83cb154715fcfec6c3faef94f207 - Patch
References () https://git.kernel.org/stable/c/9c185beae09a3eb85f54777edafa227f7e03075d - () https://git.kernel.org/stable/c/9c185beae09a3eb85f54777edafa227f7e03075d - Patch
References () https://git.kernel.org/stable/c/f8fb2403ddebb5eea0033d90d9daae4c88749ada - () https://git.kernel.org/stable/c/f8fb2403ddebb5eea0033d90d9daae4c88749ada - Patch

27 Feb 2025, 19:15

Type Values Removed Values Added
CWE CWE-416
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 7.8

27 Feb 2025, 03:15

Type Values Removed Values Added
New CVE

Information

Published : 2025-02-27 03:15

Updated : 2025-03-24 17:12


NVD link : CVE-2025-21739

Mitre link : CVE-2025-21739

CVE.ORG link : CVE-2025-21739


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-416

Use After Free