From: Andy Polyakov Date: Sun, 20 Nov 2016 22:38:12 +0000 (+0100) Subject: modes/ctr128.c: fix false carry in counter increment procedure. X-Git-Tag: OpenSSL_1_1_0d~105 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=025697a94678005df28055913d0df5d122acecfe;p=oweals%2Fopenssl.git modes/ctr128.c: fix false carry in counter increment procedure. GH issue #1916 affects only big-endian platforms. TLS is not affected, because TLS fragment is never big enough. Reviewed-by: Matt Caswell (cherry picked from commit 76f572ed0469a277d92378848250b7a9705d3071) --- diff --git a/crypto/modes/ctr128.c b/crypto/modes/ctr128.c index b7ffb73ab7..03920b4473 100644 --- a/crypto/modes/ctr128.c +++ b/crypto/modes/ctr128.c @@ -52,7 +52,7 @@ static void ctr128_inc_aligned(unsigned char *counter) --n; d = data[n] += c; /* did addition carry? */ - c = ((d - c) ^ d) >> (sizeof(size_t) * 8 - 1); + c = ((d - c) & ~d) >> (sizeof(size_t) * 8 - 1); } while (n); } #endif