CVE-2026-50185

RustCrypto Cmov/CmovEq on aarch64 can produce wrong results if high-bits of registers are set

State
Published
Severity
2.0 Low
Published
Jul 17, 2026
Updated
Jul 20, 2026
Reserved
Jun 3, 2026

Read the record on cve.org

Description

RustCrypto CMOV provides conditional move CPU intrinsics which are guaranteed on major platforms to execute in constant-time and not be rewritten as branches by the compiler. From 0.1.1 until 0.5.4, the aarch64 implementations of Cmov and CmovEq in cmov/src/backends/aarch64.rs assume high bits are zero-extended when loading values smaller than a register, so set high bits such as [8..] in a Cmov selector or [16..] of self or other in the u16 and i16 CmovEq implementations can cause left.cmovz(&right, condition) to produce incorrect output. This issue is fixed in version 0.5.4.

Scores

CVSSScoreVectorSource
4.02.0 LowCVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:NGitHub_M

Weaknesses

  • CWE-758 Reliance on Undefined, Unspecified, or Implementation-Defined Behavior

Affected Products

ProductVersions
utilsRustCrypto
  • >= 0.1.1, < 0.5.4Affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.