From 3d999be7b987c848feda718cfcfcdc005ddf670d Mon Sep 17 00:00:00 2001 From: "tobhe@openbsd.org" Date: Wed, 30 Dec 2020 14:13:28 +0000 Subject: [PATCH] upstream: Use int64_t for intermediate values in int32_MINMAX to prevent signed 32-bit integer overflow. Found by and ok djm@ ok markus@ OpenBSD-Commit-ID: 4f0704768e34cf45fdd792bac4011c6971881bb3 --- int32_minmax.inc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 int32_minmax.inc diff --git a/int32_minmax.inc b/int32_minmax.inc new file mode 100644 index 000000000..2f6ff5195 --- /dev/null +++ b/int32_minmax.inc @@ -0,0 +1,20 @@ +/* $OpenBSD: int32_minmax.inc,v 1.1 2020/12/30 14:13:28 tobhe Exp $ */ + +/* + * Public Domain, Authors: + * - Daniel J. Bernstein + * - Chitchanok Chuengsatiansup + * - Tanja Lange + * - Christine van Vredendaal + */ + +#define int32_MINMAX(a,b) \ +do { \ + int64_t ab = (int64_t)b ^ (int64_t)a; \ + int64_t c = (int64_t)b - (int64_t)a; \ + c ^= ab & (c ^ b); \ + c >>= 31; \ + c &= ab; \ + a ^= c; \ + b ^= c; \ +} while(0)