Avoid potential overflow to the sign bit when shifting left 24 places
authorTomas Mraz <tmraz@fedoraproject.org>
Tue, 19 May 2020 08:51:53 +0000 (10:51 +0200)
committerTomas Mraz <tmraz@fedoraproject.org>
Wed, 20 May 2020 15:58:06 +0000 (17:58 +0200)
Although there are platforms where int is 64 bit, 2GiB large BIGNUMs
instead of 4GiB should be "big enough for everybody".

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/11857)

(cherry picked from commit 1d05eb55caa8965a151360c2469c463ecd990987)

crypto/bn/bn_mpi.c

index bdbe822415c7914c2f87e1150242b7310096ac15..b6e35a8ed947a34bff4a7dfe3659a7db3307f2f7 100644 (file)
@@ -45,7 +45,7 @@ BIGNUM *BN_mpi2bn(const unsigned char *d, int n, BIGNUM *ain)
     int neg = 0;
     BIGNUM *a = NULL;
 
-    if (n < 4) {
+    if (n < 4 || (d[0] & 0x80) != 0) {
         BNerr(BN_F_BN_MPI2BN, BN_R_INVALID_LENGTH);
         return NULL;
     }