From b293afb5ecf2b3ccc950f140f32a083bf78731f8 Mon Sep 17 00:00:00 2001 From: not-matthias Date: Thu, 29 Oct 2026 16:34:40 +0100 Subject: [PATCH] Revert "feat(vex): hide RDRAND and RDSEED from CPUID with --deterministic-rng" This reverts commit 81d73657383e88b0d4e441196eb173d930c5f00b. --- VEX/priv/guest_amd64_toIR.c | 8 ++------ VEX/pub/libvex.h | 3 +-- docs/xml/manual-core.xml | 9 ++++----- none/tests/amd64/deterministic_rng.stdout.exp | 4 ++-- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index 47a99ea52..34ebcbdf9 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -22079,12 +22079,8 @@ Long dis_ESC_0F ( if (fAddr == &amd64g_dirtyhelper_CPUID_avx2 || fAddr == &amd64g_dirtyhelper_CPUID_avx_and_cx16) { Bool hasF16C = (archinfo->hwcaps & VEX_HWCAPS_AMD64_F16C) != 0; - /* A deterministic RNG still serves RDRAND/RDSEED but hides them. */ - Bool advertiseRng = vex_random32 == NULL; - Bool hasRDRAND = advertiseRng - && (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDRAND) != 0; - Bool hasRDSEED = advertiseRng - && (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDSEED) != 0; + Bool hasRDRAND = (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDRAND) != 0; + Bool hasRDSEED = (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDSEED) != 0; args = mkIRExprVec_4(IRExpr_GSPTR(), mkIRExpr_HWord(hasF16C ? 1 : 0), mkIRExpr_HWord(hasRDRAND ? 1 : 0), diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h index 1149038d0..564fe941d 100644 --- a/VEX/pub/libvex.h +++ b/VEX/pub/libvex.h @@ -689,8 +689,7 @@ extern void LibVEX_Init ( ); /* Install before guest execution. NULL preserves host RDRAND/RDSEED. - Otherwise CPUID hides them, and they return bits from this callback, - which runs on the executing guest thread. */ + The callback runs on the executing guest thread and returns 32 random bits. */ extern void LibVEX_SetRandom32 ( UInt (*random32)(void) ); diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml index e7b97474b..d82bea4b8 100644 --- a/docs/xml/manual-core.xml +++ b/docs/xml/manual-core.xml @@ -810,11 +810,10 @@ in most cases. We group the available options by rough categories. /dev/random and /dev/urandom (resolved through /proc/self/fd, so - symlinks count). On amd64, CPUID does not report - RDRAND and - RDSEED. On hosts that support them, - programs that execute them anyway draw from the calling thread's PRNG - stream, which always reports success. On arm64, + symlinks count). On amd64, RDRAND + and RDSEED draw from the calling + thread's PRNG stream and always report success. CPUID still + reports them only when the host supports them. On arm64, RNDR and RNDRRS draw from the same stream and always report success, also on hosts without FEAT_RNG. diff --git a/none/tests/amd64/deterministic_rng.stdout.exp b/none/tests/amd64/deterministic_rng.stdout.exp index a462030cb..cb97b860b 100644 --- a/none/tests/amd64/deterministic_rng.stdout.exp +++ b/none/tests/amd64/deterministic_rng.stdout.exp @@ -1,5 +1,5 @@ -cpuid rdrand: 0 -cpuid rdseed: 0 +cpuid rdrand: 1 +cpuid rdseed: 1 rdrand16: 555555555555d78e rdrand16: 555555555555b519 rdrand32: 00000000131a7a6b