<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sat, 03 Oct 2026 17:22:14 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-265859</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-265859</link>
      <description>EUVD-2026-265859</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-265859</guid>
    </item>
    <item>
      <title>fkie_cve-2026-23519</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-23519</link>
      <description>&lt;p&gt;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. Prior to 0.4.4, the thumbv6m-none-eabi (Cortex M0, M0+ and M1) compiler emits non-constant time assembly when using cmovnz (portable version). This vulnerability is fixed in 0.4.4.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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. Prior to 0.4.4, the thumbv6m-none-eabi (Cortex M0, M0+ and M1) compiler emits non-constant time assembly when using cmovnz (portable version). This vulnerability is fixed in 0.4.4.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-23519</guid>
    </item>
    <item>
      <title>GHSA-2gqc-6j2q-83qp — RustCrypto Utilities cmov: `thumbv6m-none-eabi` compiler emits non-constant time assembly when using `cmovnz`</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-2gqc-6j2q-83qp</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: cmov&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`thumbv6m-none-eabi` (Cortex M0, M0+ and M1) compiler emits non-constant time assembly when using `cmovnz` (portable version). I did not found any other target with the same behaviour but I did not go through all targets supported by Rust.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;It seems that, [during `mask` computation](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L78), an LLVM optimisation pass is detecting that [`bitnz`](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L13) is returning 0 or 1, that can be interpreted as a boolean. This intermediate value is not masked by a call to `black_box` and thus the subsequent [`.wrapping_sub(1)`](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L78C1-L78C84) can be interpreted as a conditional bitwise conditional not.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;This is an attempt at having a minimal faulty code. In a library crate with an up-to-date `cmov` as only dependency, the content of `src/lib.rs` is:&lt;/p&gt;
&lt;p&gt;```rust
#![no_std]
use cmov::Cmov;&lt;/p&gt;
&lt;p&gt;#[inline(never)]
pub fn test_ct_cmov(a: &amp;amp;mut u8, b: u8, c: u8) {
    a.cmovnz(&amp;amp;b, c);
}
```&lt;/p&gt;
&lt;p&gt;The resulting assembly emitted (shown using `cargo asm --release --target thumbv6m-none-eabi` that uses [`cargo-show-asm`](https://crates.io/crates/cargo-show-asm)):&lt;/p&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;Collapsed assembly&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;```asm
.section .text.not_ct::test_ct_cmov,&amp;#34;ax&amp;#34;,%progbits
	.globl…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: cmov&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`thumbv6m-none-eabi` (Cortex M0, M0+ and M1) compiler emits non-constant time assembly when using `cmovnz` (portable version). I did not found any other target with the same behaviour but I did not go through all targets supported by Rust.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;It seems that, [during `mask` computation](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L78), an LLVM optimisation pass is detecting that [`bitnz`](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L13) is returning 0 or 1, that can be interpreted as a boolean. This intermediate value is not masked by a call to `black_box` and thus the subsequent [`.wrapping_sub(1)`](https://github.com/RustCrypto/utils/blob/9e555db060c80f4669d804f448a524a37d201b32/cmov/src/portable.rs#L78C1-L78C84) can be interpreted as a conditional bitwise conditional not.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;This is an attempt at having a minimal faulty code. In a library crate with an up-to-date `cmov` as only dependency, the content of `src/lib.rs` is:&lt;/p&gt;
&lt;p&gt;```rust
#![no_std]
use cmov::Cmov;&lt;/p&gt;
&lt;p&gt;#[inline(never)]
pub fn test_ct_cmov(a: &amp;amp;mut u8, b: u8, c: u8) {
    a.cmovnz(&amp;amp;b, c);
}
```&lt;/p&gt;
&lt;p&gt;The resulting assembly emitted (shown using `cargo asm --release --target thumbv6m-none-eabi` that uses [`cargo-show-asm`](https://crates.io/crates/cargo-show-asm)):&lt;/p&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;Collapsed assembly&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;```asm
.section .text.not_ct::test_ct_cmov,&amp;#34;ax&amp;#34;,%progbits
	.globl…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-2gqc-6j2q-83qp</guid>
    </item>
    <item>
      <title>RUSTSEC-2026-0003 — Non-constant-time code generation on ARM32 targets</title>
      <link>https://cve.radiocsirt.org/vuln/rustsec-2026-0003</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: cmov&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;While the `cmov` crate has a special backend for `aarch64` which uses special
CSEL instructions, on 32-bit ARM it uses a portable pure Rust fallback
implementation. This implementation uses a combination of bitwise arithmetic
and `core::hint::black_box` to attempt to coerce constant-time code generation
out of the optimizer, but the implementation in v0.4.3 and earlier failed to
do this on 32-bit ARM targets.&lt;/p&gt;
&lt;p&gt;## Impact&lt;/p&gt;
&lt;p&gt;Branch instructions inserted by the LLVM optimizer on 32-bit targets can be
leveraged using various microarchitectural sidechannels like cache timing
attacks to learn secret information that `cmov` is designed to protect.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The following assembly was emitted when using `Cmov::cmovnz`, a function which
implements a conditional move when a provided value is non-zero:&lt;/p&gt;
&lt;p&gt;```asm
    bne  .LBB0_2
    mvns r3, r3
```&lt;/p&gt;
&lt;p&gt;This includes a branch instruction `bne`: Branch if Not Equal.&lt;/p&gt;
&lt;p&gt;## PoC&lt;/p&gt;
&lt;p&gt;The following code reproduces the issue:&lt;/p&gt;
&lt;p&gt;```rust
#![no_std]
use cmov::Cmov;&lt;/p&gt;
&lt;p&gt;#[inline(never)]
pub fn test_ct_cmov(a: &amp;amp;mut u8, b: u8, c: u8) {
    a.cmovnz(&amp;amp;b, c);
}
```&lt;/p&gt;
&lt;p&gt;## Resolution&lt;/p&gt;
&lt;p&gt;`cmov` v0.4.4 includes a portable `black_box`-based tactical mitigation for the
issue which coerced the compiler into producing the expected codegen, and
additionally v0.4.5 added an `asm!` reimplementation of the problematic mask
generation function for ARM32 targets which should guarantee that particular
function never contains a branch on such targets.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: cmov&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;While the `cmov` crate has a special backend for `aarch64` which uses special
CSEL instructions, on 32-bit ARM it uses a portable pure Rust fallback
implementation. This implementation uses a combination of bitwise arithmetic
and `core::hint::black_box` to attempt to coerce constant-time code generation
out of the optimizer, but the implementation in v0.4.3 and earlier failed to
do this on 32-bit ARM targets.&lt;/p&gt;
&lt;p&gt;## Impact&lt;/p&gt;
&lt;p&gt;Branch instructions inserted by the LLVM optimizer on 32-bit targets can be
leveraged using various microarchitectural sidechannels like cache timing
attacks to learn secret information that `cmov` is designed to protect.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The following assembly was emitted when using `Cmov::cmovnz`, a function which
implements a conditional move when a provided value is non-zero:&lt;/p&gt;
&lt;p&gt;```asm
    bne  .LBB0_2
    mvns r3, r3
```&lt;/p&gt;
&lt;p&gt;This includes a branch instruction `bne`: Branch if Not Equal.&lt;/p&gt;
&lt;p&gt;## PoC&lt;/p&gt;
&lt;p&gt;The following code reproduces the issue:&lt;/p&gt;
&lt;p&gt;```rust
#![no_std]
use cmov::Cmov;&lt;/p&gt;
&lt;p&gt;#[inline(never)]
pub fn test_ct_cmov(a: &amp;amp;mut u8, b: u8, c: u8) {
    a.cmovnz(&amp;amp;b, c);
}
```&lt;/p&gt;
&lt;p&gt;## Resolution&lt;/p&gt;
&lt;p&gt;`cmov` v0.4.4 includes a portable `black_box`-based tactical mitigation for the
issue which coerced the compiler into producing the expected codegen, and
additionally v0.4.5 added an `asm!` reimplementation of the problematic mask
generation function for ARM32 targets which should guarantee that particular
function never contains a branch on such targets.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/rustsec-2026-0003</guid>
    </item>
  </channel>
</rss>
