]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
fips: fix locking issues
authorPauli <ppzgs1@gmail.com>
Mon, 23 Sep 2024 04:18:22 +0000 (14:18 +1000)
committerPauli <ppzgs1@gmail.com>
Wed, 9 Oct 2024 02:53:10 +0000 (13:53 +1100)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/25498)

providers/implementations/rands/fips_crng_test.c

index 057ae6e35e26d999198d3d5506dd1a9d3bb0dbe1..209a1adb27850b30229e0d51cc9ef43bf65de6af 100644 (file)
@@ -302,24 +302,18 @@ static size_t crng_test_get_seed(void *vcrngt, unsigned char **pout,
     }
 
     /* Grab seed from our parent */
-    if (!crng_test_lock(crngt))
+    if (!lock_parent(crngt))
         return 0;
-    if (!lock_parent(crngt)) {
-        crng_test_unlock(crngt);
-        return 0;
-    }
+
     n = crngt->parent_get_seed(crngt->parent, pout, entropy,
                                min_len, max_len, prediction_resistance,
                                adin, adin_len);
-    unlock_parent(crngt);
-    if (n > 0)
-        r = crng_test(crngt, *pout, n);
-    crng_test_unlock(crngt);
-    if (n > 0 && r > 0)
-        return n;
-    if (crngt->parent_clear_seed != NULL)
+    if (n > 0 && crng_test(crngt, *pout, n) > 0)
+        r = n;
+    else if (crngt->parent_clear_seed != NULL)
         crngt->parent_clear_seed(crngt->parent, *pout, n);
-    return 0;
+    unlock_parent(crngt);
+    return r;
 }
 
 static void crng_test_clear_seed(void *vcrngt,