CVE-2025-38488 (GCVE-0-2025-38488)
Vulnerability from cvelistv5
Published
2025-07-28 11:21
Modified
2025-07-28 11:21
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
smb: client: fix use-after-free in crypt_message when using async crypto
The CVE-2024-50047 fix removed asynchronous crypto handling from
crypt_message(), assuming all crypto operations are synchronous.
However, when hardware crypto accelerators are used, this can cause
use-after-free crashes:
crypt_message()
// Allocate the creq buffer containing the req
creq = smb2_get_aead_req(..., &req);
// Async encryption returns -EINPROGRESS immediately
rc = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req);
// Free creq while async operation is still in progress
kvfree_sensitive(creq, ...);
Hardware crypto modules often implement async AEAD operations for
performance. When crypto_aead_encrypt/decrypt() returns -EINPROGRESS,
the operation completes asynchronously. Without crypto_wait_req(),
the function immediately frees the request buffer, leading to crashes
when the driver later accesses the freed memory.
This results in a use-after-free condition when the hardware crypto
driver later accesses the freed request structure, leading to kernel
crashes with NULL pointer dereferences.
The issue occurs because crypto_alloc_aead() with mask=0 doesn't
guarantee synchronous operation. Even without CRYPTO_ALG_ASYNC in
the mask, async implementations can be selected.
Fix by restoring the async crypto handling:
- DECLARE_CRYPTO_WAIT(wait) for completion tracking
- aead_request_set_callback() for async completion notification
- crypto_wait_req() to wait for operation completion
This ensures the request buffer isn't freed until the crypto operation
completes, whether synchronous or asynchronous, while preserving the
CVE-2024-50047 fix.
References
Impacted products
Vendor | Product | Version | ||
---|---|---|---|---|
► | Linux | Linux |
Version: bce966530fd5542bbb422cb45ecb775f7a1a6bc3 Version: 0809fb86ad13b29e1d6d491364fc7ea4fb545995 Version: b0abcd65ec545701b8793e12bc27dc98042b151a Version: b0abcd65ec545701b8793e12bc27dc98042b151a Version: b0abcd65ec545701b8793e12bc27dc98042b151a Version: 8f14a476abba13144df5434871a7225fd29af633 Version: ef51c0d544b1518b35364480317ab6d3468f205d Version: 538c26d9bf70c90edc460d18c81008a4e555925a |
|
{ "containers": { "cna": { "affected": [ { "defaultStatus": "unaffected", "product": "Linux", "programFiles": [ "fs/smb/client/smb2ops.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThan": "9a1d3e8d40f151c2d5a5f40c410e6e433f62f438", "status": "affected", "version": "bce966530fd5542bbb422cb45ecb775f7a1a6bc3", "versionType": "git" }, { "lessThan": "15a0a5de49507062bc3be4014a403d8cea5533de", "status": "affected", "version": "0809fb86ad13b29e1d6d491364fc7ea4fb545995", "versionType": "git" }, { "lessThan": "2a76bc2b24ed889a689fb1c9015307bf16aafb5b", "status": "affected", "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "versionType": "git" }, { "lessThan": "8ac90f6824fc44d2e55a82503ddfc95defb19ae0", "status": "affected", "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "versionType": "git" }, { "lessThan": "b220bed63330c0e1733dc06ea8e75d5b9962b6b6", "status": "affected", "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "versionType": "git" }, { "status": "affected", "version": "8f14a476abba13144df5434871a7225fd29af633", "versionType": "git" }, { "status": "affected", "version": "ef51c0d544b1518b35364480317ab6d3468f205d", "versionType": "git" }, { "status": "affected", "version": "538c26d9bf70c90edc460d18c81008a4e555925a", "versionType": "git" } ] }, { "defaultStatus": "affected", "product": "Linux", "programFiles": [ "fs/smb/client/smb2ops.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "status": "affected", "version": "6.12" }, { "lessThan": "6.12", "status": "unaffected", "version": "0", "versionType": "semver" }, { "lessThanOrEqual": "6.1.*", "status": "unaffected", "version": "6.1.147", "versionType": "semver" }, { "lessThanOrEqual": "6.6.*", "status": "unaffected", "version": "6.6.100", "versionType": "semver" }, { "lessThanOrEqual": "6.12.*", "status": "unaffected", "version": "6.12.40", "versionType": "semver" }, { "lessThanOrEqual": "6.15.*", "status": "unaffected", "version": "6.15.8", "versionType": "semver" }, { "lessThanOrEqual": "*", "status": "unaffected", "version": "6.16", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "cpeMatch": [ { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.1.147", "versionStartIncluding": "6.1.128", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.6.100", "versionStartIncluding": "6.6.57", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.12.40", "versionStartIncluding": "6.12", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.15.8", "versionStartIncluding": "6.12", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.16", "versionStartIncluding": "6.12", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.10.237", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.15.181", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.11.4", "vulnerable": true } ], "negate": false, "operator": "OR" } ] } ], "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix use-after-free in crypt_message when using async crypto\n\nThe CVE-2024-50047 fix removed asynchronous crypto handling from\ncrypt_message(), assuming all crypto operations are synchronous.\nHowever, when hardware crypto accelerators are used, this can cause\nuse-after-free crashes:\n\n crypt_message()\n // Allocate the creq buffer containing the req\n creq = smb2_get_aead_req(..., \u0026req);\n\n // Async encryption returns -EINPROGRESS immediately\n rc = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req);\n\n // Free creq while async operation is still in progress\n kvfree_sensitive(creq, ...);\n\nHardware crypto modules often implement async AEAD operations for\nperformance. When crypto_aead_encrypt/decrypt() returns -EINPROGRESS,\nthe operation completes asynchronously. Without crypto_wait_req(),\nthe function immediately frees the request buffer, leading to crashes\nwhen the driver later accesses the freed memory.\n\nThis results in a use-after-free condition when the hardware crypto\ndriver later accesses the freed request structure, leading to kernel\ncrashes with NULL pointer dereferences.\n\nThe issue occurs because crypto_alloc_aead() with mask=0 doesn\u0027t\nguarantee synchronous operation. Even without CRYPTO_ALG_ASYNC in\nthe mask, async implementations can be selected.\n\nFix by restoring the async crypto handling:\n- DECLARE_CRYPTO_WAIT(wait) for completion tracking\n- aead_request_set_callback() for async completion notification\n- crypto_wait_req() to wait for operation completion\n\nThis ensures the request buffer isn\u0027t freed until the crypto operation\ncompletes, whether synchronous or asynchronous, while preserving the\nCVE-2024-50047 fix." } ], "providerMetadata": { "dateUpdated": "2025-07-28T11:21:52.085Z", "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux" }, "references": [ { "url": "https://git.kernel.org/stable/c/9a1d3e8d40f151c2d5a5f40c410e6e433f62f438" }, { "url": "https://git.kernel.org/stable/c/15a0a5de49507062bc3be4014a403d8cea5533de" }, { "url": "https://git.kernel.org/stable/c/2a76bc2b24ed889a689fb1c9015307bf16aafb5b" }, { "url": "https://git.kernel.org/stable/c/8ac90f6824fc44d2e55a82503ddfc95defb19ae0" }, { "url": "https://git.kernel.org/stable/c/b220bed63330c0e1733dc06ea8e75d5b9962b6b6" } ], "title": "smb: client: fix use-after-free in crypt_message when using async crypto", "x_generator": { "engine": "bippy-1.2.0" } } }, "cveMetadata": { "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "assignerShortName": "Linux", "cveId": "CVE-2025-38488", "datePublished": "2025-07-28T11:21:52.085Z", "dateReserved": "2025-04-16T04:51:24.021Z", "dateUpdated": "2025-07-28T11:21:52.085Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2025-38488\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-07-28T12:15:30.857\",\"lastModified\":\"2025-07-29T14:14:29.590\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nsmb: client: fix use-after-free in crypt_message when using async crypto\\n\\nThe CVE-2024-50047 fix removed asynchronous crypto handling from\\ncrypt_message(), assuming all crypto operations are synchronous.\\nHowever, when hardware crypto accelerators are used, this can cause\\nuse-after-free crashes:\\n\\n crypt_message()\\n // Allocate the creq buffer containing the req\\n creq = smb2_get_aead_req(..., \u0026req);\\n\\n // Async encryption returns -EINPROGRESS immediately\\n rc = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req);\\n\\n // Free creq while async operation is still in progress\\n kvfree_sensitive(creq, ...);\\n\\nHardware crypto modules often implement async AEAD operations for\\nperformance. When crypto_aead_encrypt/decrypt() returns -EINPROGRESS,\\nthe operation completes asynchronously. Without crypto_wait_req(),\\nthe function immediately frees the request buffer, leading to crashes\\nwhen the driver later accesses the freed memory.\\n\\nThis results in a use-after-free condition when the hardware crypto\\ndriver later accesses the freed request structure, leading to kernel\\ncrashes with NULL pointer dereferences.\\n\\nThe issue occurs because crypto_alloc_aead() with mask=0 doesn\u0027t\\nguarantee synchronous operation. Even without CRYPTO_ALG_ASYNC in\\nthe mask, async implementations can be selected.\\n\\nFix by restoring the async crypto handling:\\n- DECLARE_CRYPTO_WAIT(wait) for completion tracking\\n- aead_request_set_callback() for async completion notification\\n- crypto_wait_req() to wait for operation completion\\n\\nThis ensures the request buffer isn\u0027t freed until the crypto operation\\ncompletes, whether synchronous or asynchronous, while preserving the\\nCVE-2024-50047 fix.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: smb: cliente: correcci\u00f3n del use-after-free en crypt_message al usar criptograf\u00eda as\u00edncrona. La correcci\u00f3n CVE-2024-50047 elimin\u00f3 el manejo de criptograf\u00eda as\u00edncrona de crypt_message(), asumiendo que todas las operaciones de criptograf\u00eda son s\u00edncronas. Sin embargo, cuando se usan aceleradores de criptograf\u00eda de hardware, esto puede causar fallos de use-after-free: crypt_message() // Asignar el b\u00fafer creq que contiene la solicitud creq = smb2_get_aead_req(..., \u0026amp;req); // El cifrado as\u00edncrono devuelve -EINPROGRESS inmediatamente rc = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req); // Liberar creq mientras la operaci\u00f3n as\u00edncrona a\u00fan est\u00e1 en progreso kvfree_sensitive(creq, ...); Los m\u00f3dulos de criptograf\u00eda de hardware a menudo implementan operaciones AEAD as\u00edncronas para mejorar el rendimiento. Cuando crypto_aead_encrypt/decrypt() devuelve -EINPROGRESS, la operaci\u00f3n se completa de forma as\u00edncrona. Sin crypto_wait_req(), la funci\u00f3n libera inmediatamente el b\u00fafer de solicitud, lo que provoca fallos cuando el controlador accede posteriormente a la memoria liberada. Esto genera una condici\u00f3n de use-after-free cuando el controlador de cifrado de hardware accede posteriormente a la estructura de solicitud liberada, lo que provoca fallos del kernel con desreferencias de punteros NULL. El problema se produce porque crypto_alloc_aead() con mask=0 no garantiza la operaci\u00f3n s\u00edncrona. Incluso sin CRYPTO_ALG_ASYNC en la m\u00e1scara, se pueden seleccionar implementaciones as\u00edncronas. Soluci\u00f3n restaurando el manejo de criptograf\u00eda as\u00edncrona: - DECLARE_CRYPTO_WAIT(wait) para seguimiento de finalizaci\u00f3n - aead_request_set_callback() para notificaci\u00f3n de finalizaci\u00f3n as\u00edncrona - crypto_wait_req() para esperar a que se complete la operaci\u00f3n Esto garantiza que el b\u00fafer de solicitud no se libere hasta que se complete la operaci\u00f3n de criptograf\u00eda, ya sea sincr\u00f3nica o asincr\u00f3nica, al tiempo que se conserva la correcci\u00f3n CVE-2024-50047.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/15a0a5de49507062bc3be4014a403d8cea5533de\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/2a76bc2b24ed889a689fb1c9015307bf16aafb5b\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/8ac90f6824fc44d2e55a82503ddfc95defb19ae0\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/9a1d3e8d40f151c2d5a5f40c410e6e433f62f438\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b220bed63330c0e1733dc06ea8e75d5b9962b6b6\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}" } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…