From 871bce312b651cebe2da9fcfc4688f3b49f6895c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Fri, 24 Oct 2025 11:34:33 +0300 Subject: [PATCH] Fix assertion failure from arc4random_uniform with invalid limit When the arc4random_uniform() is called on NetBSD with upper_bound that makes no sense statistically (0 or 1), the call crashes the calling program. Fix this by returning 0 when upper bound is < 2 as does Linux, FreeBSD and NetBSD. (Hint: System CSPRNG should never crash.) --- lib/isc/include/isc/random.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/isc/include/isc/random.h b/lib/isc/include/isc/random.h index efee399095..757a6486a8 100644 --- a/lib/isc/include/isc/random.h +++ b/lib/isc/include/isc/random.h @@ -25,9 +25,10 @@ */ #if HAVE_ARC4RANDOM && !defined(__linux__) -#define isc_random32() arc4random() -#define isc_random_buf(buf, buflen) arc4random_buf(buf, buflen) -#define isc_random_uniform(upper_bound) arc4random_uniform(upper_bound) +#define isc_random32() arc4random() +#define isc_random_buf(buf, buflen) arc4random_buf(buf, buflen) +#define isc_random_uniform(upper_bound) \ + ((upper_bound) < 2 ? 0 : arc4random_uniform(upper_bound)) #else /* HAVE_ARC4RANDOM && !defined(__linux__) */ uint32_t isc_random32(void);