File 0759-crypto-Fix-deadlock-race-in-crypto-supports-curves.patch of Package erlang
From fdb53c9ff5cf62be75f1b912c7aeec8915e8a7d2 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 23 Oct 2024 13:19:54 +0200
Subject: [PATCH] crypto: Fix deadlock race in crypto:supports(curves)
Commit 85edb09c595336388737b3beed24f82cb39aaa57 exposed this race
by starting to call get_curve_cnt() lazily, potentially from different
threads at the same time.
---
lib/crypto/c_src/algorithms.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/crypto/c_src/algorithms.c b/lib/crypto/c_src/algorithms.c
index 578f79e4f1..7afa8cb159 100644
--- a/lib/crypto/c_src/algorithms.c
+++ b/lib/crypto/c_src/algorithms.c
@@ -247,16 +247,14 @@ int get_curve_cnt(ErlNifEnv* env, int fips) {
enif_mutex_lock(mtx_init_curve_types);
if (1 == fips) {
- if (algo_curve_fips_cnt >= 0) {
- return algo_curve_fips_cnt;
+ if (algo_curve_fips_cnt < 0) {
+ algo_curve_fips_cnt = init_curves(env, 1);
}
- algo_curve_fips_cnt = init_curves(env, 1);
cnt = algo_curve_fips_cnt;
} else {
- if (algo_curve_cnt >= 0) {
- return algo_curve_cnt;
+ if (algo_curve_cnt < 0) {
+ algo_curve_cnt = init_curves(env, 0);
}
- algo_curve_cnt = init_curves(env, 0);
cnt = algo_curve_cnt;
}
enif_mutex_unlock(mtx_init_curve_types);
--
2.43.0