CVE-2026-93160: crypto: atmel-ecc - reject hardware ECDH without a public key
In the Linux kernel, the following vulnerability has been resolved:
crypto: atmel-ecc - reject hardware ECDH without a public key
The hardware ECDH path in atmelecdhcomputesharedsecret() uses the private key stored in the device. However, the public key is cached only after atmelecdhsetsecret() successfully generated that private key for the current tfm.
atmelecdhgeneratepublickey() already rejects requests when no public key is cached. Add the same check to atmelecdhcomputesharedsecret() to prevent the device from using a private key that was not generated for the current tfm.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
Apply the Linux kernel fix so the hardware ECDH path in atmel_ecdh_compute_shared_secret() rejects hardware ECDH when no public key is available for the current tfm (as atmel_ecdh_generate_public_key() already does), to prevent use of a cached private key that was not generated.
Event History
Frequently Asked Questions
Which systems are exposed to this issue?
Systems using the Linux kernel's atmel-ecc hardware ECDH path are exposed when a shared-secret computation can be requested for a transform instance that has not successfully generated and cached its own public key.
What condition is required for exploitation?
A hardware ECDH shared-secret operation must be invoked without a public key cached for the current transform. In that state, the device may use a private key that was not generated for that transform.
How can I determine whether the vulnerable condition is present?
The affected condition exists if atmel_ecdh_compute_shared_secret() can proceed when no public key is cached for the current transform. The resolved behavior rejects that request, matching the existing validation in atmel_ecdh_generate_public_key().
What can be done before applying the fix?
Avoid invoking hardware ECDH shared-secret operations unless atmel_ecdh_set_secret() has successfully generated the private key and established a cached public key for the current transform.