Skip to main content
← All vulnerabilities
CVE-2026-50185GHSA-3RJW-M598-PQ24

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

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 0.5.4
None on Exploit-DB, Metasploit or GitHub
  • Exploitation: poc
  • Automatable: no
  • Technical impact: partial

Summary

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.

Timeline

  1. CVE published
  2. CISA SSVC assessment

    Exploitation: poc · Automatable: no · Technical impact: partial

  3. Record last updated

Affected versions

  • RustCrypto utils

    From 0.1.1 · fixed in 0.5.4

  • cmovcrates.io

    From 0.1.1 · fixed in 0.5.4

References 3

GitHub · RustCrypto/utils