Check the return from BN_sub() in BN_X931_generate_Xpq().
authorPauli <paul.dale@oracle.com>
Sun, 2 Sep 2018 21:37:38 +0000 (07:37 +1000)
committerPauli <paul.dale@oracle.com>
Mon, 3 Sep 2018 00:41:07 +0000 (10:41 +1000)
Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7088)

crypto/bn/bn_x931p.c

index 2331b01943d4e65bbbd95020dc5547a3b9bf9702..a197cdc5f2679ff1b628c3a4dace46a91c845ff0 100644 (file)
@@ -184,8 +184,10 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx)
     for (i = 0; i < 1000; i++) {
         if (!BN_priv_rand(Xq, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY))
             goto err;
     for (i = 0; i < 1000; i++) {
         if (!BN_priv_rand(Xq, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY))
             goto err;
+
         /* Check that |Xp - Xq| > 2^(nbits - 100) */
         /* Check that |Xp - Xq| > 2^(nbits - 100) */
-        BN_sub(t, Xp, Xq);
+        if (!BN_sub(t, Xp, Xq))
+            goto err;
         if (BN_num_bits(t) > (nbits - 100))
             break;
     }
         if (BN_num_bits(t) > (nbits - 100))
             break;
     }