Commit 1e1ea715a6 for openssl.org

commit 1e1ea715a66159450efbcaf655758392f6656d39
Author: Milan Broz <gmazyland@gmail.com>
Date:   Sat Mar 28 12:37:32 2026 +0100

    Use OPENSSL_assert for Windows RCU for missing lock

    If NO_INTERLOCKEDOR64 is define, Windows RCU code must
    use thread locks.

    The lock *must* be provided in that case otherwise it is
    an internal code error, not a runtime error.
    Use OPENSSL_assert here.

    This also fixes several unititialized variable warnings
    as analyzer no longer see this impossible paths in code.

    Signed-off-by: Milan Broz <gmazyland@gmail.com>

    Reviewed-by: Neil Horman <nhorman@openssl.org>
    Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
    Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
    MergeDate: Tue Mar 31 00:28:20 2026
    (Merged from https://github.com/openssl/openssl/pull/30619)

diff --git a/crypto/threads_win.c b/crypto/threads_win.c
index 525c8d432e..feaee7bc2e 100644
--- a/crypto/threads_win.c
+++ b/crypto/threads_win.c
@@ -610,7 +610,8 @@ int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
 int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_write_lock(lock))
         return 0;
     *val += amount;
     *ret = *val;
@@ -630,7 +631,8 @@ int CRYPTO_atomic_add64(uint64_t *val, uint64_t op, uint64_t *ret,
     CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_write_lock(lock))
         return 0;
     *val += op;
     *ret = *val;
@@ -649,7 +651,8 @@ int CRYPTO_atomic_and(uint64_t *val, uint64_t op, uint64_t *ret,
     CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_write_lock(lock))
         return 0;
     *val &= op;
     *ret = *val;
@@ -668,7 +671,8 @@ int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret,
     CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_write_lock(lock))
         return 0;
     *val |= op;
     *ret = *val;
@@ -686,7 +690,8 @@ int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret,
 int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_read_lock(lock))
         return 0;
     *ret = *val;
     if (!CRYPTO_THREAD_unlock(lock))
@@ -702,7 +707,8 @@ int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock)
 int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_read_lock(lock))
         return 0;
     *dst = val;
     if (!CRYPTO_THREAD_unlock(lock))
@@ -718,7 +724,8 @@ int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock)
 int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_read_lock(lock))
         return 0;
     *ret = *val;
     if (!CRYPTO_THREAD_unlock(lock))
@@ -735,7 +742,8 @@ int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock)
 int CRYPTO_atomic_store_int(int *dst, int val, CRYPTO_RWLOCK *lock)
 {
 #if (defined(NO_INTERLOCKEDOR64))
-    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
+    OPENSSL_assert(lock != NULL);
+    if (!CRYPTO_THREAD_read_lock(lock))
         return 0;
     *dst = val;
     if (!CRYPTO_THREAD_unlock(lock))