From: tobhe@openbsd.org Date: Wed, 30 Dec 2020 14:13:28 +0000 (+0000) Subject: upstream: Use int64_t for intermediate values in int32_MINMAX to X-Git-Tag: V_8_5_P1~141 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d999be7b987c848feda718cfcfcdc005ddf670d;p=thirdparty%2Fopenssh-portable.git 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 --- 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)