CVE-2026-97589 (GCVE-0-2026-97589)

Vulnerability from cvelistv5 – Published: 2026-09-25 10:22 – Updated: 2026-09-25 14:41
VLAI
Title
s390/crypto: Fix wrong return code to engine in asynch callbacks
Summary
In the Linux kernel, the following vulnerability has been resolved: s390/crypto: Fix wrong return code to engine in asynch callbacks When crypto_finalize_hash_request() or crypto_finalize_skcipher_request() explicitly completes a request, the do_one_request callback must return 0 to indicate successful handling. Returning a negative error code causes the crypto engine to assume the driver failed to take ownership and triggers a second completion via crypto_request_complete(), resulting in a double completion. This pattern occurs in paes_s390.c 4 times and once in phmac_s390.c. Fixed in phmac_do_one_request() and all four paes do_one_request callbacks (ecb, cbc, ctr, xts) by returning 0 after explicit finalization instead of propagating the error code.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 6cd87cb5ef6ca50ae17c371482ceaab1d635e232 , < 972e0d9b7d1d112240ccde1f1be85bf9ffaa1720 (git)
Affected: 6cd87cb5ef6ca50ae17c371482ceaab1d635e232 , < 5480291aa848e19e61175abfd457933516db70c6 (git)
Affected: 6cd87cb5ef6ca50ae17c371482ceaab1d635e232 , < ac1481320110b803ab9b79ab4d2ca11a74fc05f2 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.16
Unaffected: 0 , < 6.16 (semver)
Unaffected: 6.18.53 , ≤ 6.18.* (semver)
Unaffected: 7.2.7 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc3 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/s390/crypto/paes_s390.c",
            "arch/s390/crypto/phmac_s390.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "972e0d9b7d1d112240ccde1f1be85bf9ffaa1720",
              "status": "affected",
              "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
              "versionType": "git"
            },
            {
              "lessThan": "5480291aa848e19e61175abfd457933516db70c6",
              "status": "affected",
              "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
              "versionType": "git"
            },
            {
              "lessThan": "ac1481320110b803ab9b79ab4d2ca11a74fc05f2",
              "status": "affected",
              "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/s390/crypto/paes_s390.c",
            "arch/s390/crypto/phmac_s390.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.16"
            },
            {
              "lessThan": "6.16",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.53",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.7",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.53",
                  "versionStartIncluding": "6.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.7",
                  "versionStartIncluding": "6.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc3",
                  "versionStartIncluding": "6.16",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ns390/crypto: Fix wrong return code to engine in asynch callbacks\n\nWhen crypto_finalize_hash_request() or\ncrypto_finalize_skcipher_request() explicitly completes a request, the\ndo_one_request callback must return 0 to indicate successful\nhandling. Returning a negative error code causes the crypto engine to\nassume the driver failed to take ownership and triggers a second\ncompletion via crypto_request_complete(), resulting in a double\ncompletion. This pattern occurs in paes_s390.c 4 times and once in\nphmac_s390.c.\n\nFixed in phmac_do_one_request() and all four paes do_one_request\ncallbacks (ecb, cbc, ctr, xts) by returning 0 after explicit\nfinalization instead of propagating the error code."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The faulty return is in ecb/cbc/ctr/xts_paes_do_one_request() and phmac_do_one_request(), which run in the crypto engine worker. They are reached through local crypto API users: AF_ALG sockets binding \"ecb(paes)\" etc. (algif_skcipher recvmsg -\u003e ecb_paes_crypt -\u003e engine) or dm-crypt. No remote peer supplies the data that causes the failure.\nAC:H - The double completion fires only when the engine path returns an error. That needs the protected key to be invalidated (-EKEYEXPIRED, e.g. the wrapping key changed) and then re-conversion to fail in paes_convert_key() because the card is busy or offline. AF_ALG blocks setkey while op sockets exist, so the attacker cannot force this state.\nPR:L - AF_ALG socket creation and binding the paes/phmac algorithms need no capability, so a local unprivileged user holding usable key material can push requests through the paes engine path.\nUI:N - No victim action is needed. Once the engine-side failure condition exists, the attacker\u0027s own AF_ALG requests (or ordinary dm-crypt I/O) hit the double completion.\nS:U - The corruption stays within the kernel\u0027s own security authority. There is no guest-to-host or other boundary crossing.\nC:H - crypto_pump_requests() calls crypto_request_complete() a second time after crypto_finalize_skcipher_request(). In AF_ALG the extra complete of ctx-\u003ewait lets a later request\u0027s areq be freed while the engine still processes it, so the engine keeps reading freed memory (use-after-free).\nI:H - The engine\u0027s skcipher walk and cpacf output keep writing into the freed request and scatterlist memory. For dm-crypt, the same bio completes twice. Both are use-after-free writes that can be used for heap corruption.\nA:H - The double completion corrupts request/bio lifetime (double bio end or a use-after-free on the areq), which can crash the kernel or corrupt dm-crypt I/O."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-25T14:41:26.725Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/972e0d9b7d1d112240ccde1f1be85bf9ffaa1720"
        },
        {
          "url": "https://git.kernel.org/stable/c/5480291aa848e19e61175abfd457933516db70c6"
        },
        {
          "url": "https://git.kernel.org/stable/c/ac1481320110b803ab9b79ab4d2ca11a74fc05f2"
        }
      ],
      "title": "s390/crypto: Fix wrong return code to engine in asynch callbacks",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-97589",
    "datePublished": "2026-09-25T10:22:07.441Z",
    "dateReserved": "2026-09-24T16:01:01.157Z",
    "dateUpdated": "2026-09-25T14:41:26.725Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-97589",
      "date": "2026-09-28",
      "epss": "0.00143",
      "percentile": "0.02958"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "arch/s390/crypto/paes_s390.c",
                  "arch/s390/crypto/phmac_s390.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "972e0d9b7d1d112240ccde1f1be85bf9ffaa1720",
                    "status": "affected",
                    "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "5480291aa848e19e61175abfd457933516db70c6",
                    "status": "affected",
                    "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "ac1481320110b803ab9b79ab4d2ca11a74fc05f2",
                    "status": "affected",
                    "version": "6cd87cb5ef6ca50ae17c371482ceaab1d635e232",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "arch/s390/crypto/paes_s390.c",
                  "arch/s390/crypto/phmac_s390.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.16"
                  },
                  {
                    "lessThan": "6.16",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.53",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.7",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc3",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ns390/crypto: Fix wrong return code to engine in asynch callbacks\n\nWhen crypto_finalize_hash_request() or\ncrypto_finalize_skcipher_request() explicitly completes a request, the\ndo_one_request callback must return 0 to indicate successful\nhandling. Returning a negative error code causes the crypto engine to\nassume the driver failed to take ownership and triggers a second\ncompletion via crypto_request_complete(), resulting in a double\ncompletion. This pattern occurs in paes_s390.c 4 times and once in\nphmac_s390.c.\n\nFixed in phmac_do_one_request() and all four paes do_one_request\ncallbacks (ecb, cbc, ctr, xts) by returning 0 after explicit\nfinalization instead of propagating the error code."
          }
        ],
        "id": "CVE-2026-97589",
        "lastModified": "2026-09-25T15:18:00.547",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "HIGH",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.0,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.0,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-25T11:17:10.103",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/5480291aa848e19e61175abfd457933516db70c6"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/972e0d9b7d1d112240ccde1f1be85bf9ffaa1720"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/ac1481320110b803ab9b79ab4d2ca11a74fc05f2"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…