CVE-2025-38488 (GCVE-0-2025-38488)
Vulnerability from cvelistv5
Published
2025-07-28 11:21
Modified
2025-07-28 11:21
Severity ?
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.
Impacted products
Vendor Product Version
Linux Linux Version: bce966530fd5542bbb422cb45ecb775f7a1a6bc3
Version: 0809fb86ad13b29e1d6d491364fc7ea4fb545995
Version: b0abcd65ec545701b8793e12bc27dc98042b151a
Version: b0abcd65ec545701b8793e12bc27dc98042b151a
Version: b0abcd65ec545701b8793e12bc27dc98042b151a
Version: 8f14a476abba13144df5434871a7225fd29af633
Version: ef51c0d544b1518b35364480317ab6d3468f205d
Version: 538c26d9bf70c90edc460d18c81008a4e555925a
Create a notification for this product.
Show details on NVD website


{
  "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\"}]}}"
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

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…