From: Andrew Dinh Date: Tue, 4 Mar 2025 15:32:56 +0000 (+0700) Subject: Fix RCU TODOs X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7097d2e00ea9f0119a5e42f13a51487fb1e67aa3;p=thirdparty%2Fopenssl.git Fix RCU TODOs - Update allocate_new_qp_group to take unsigned int - Move id_ctr in rcu_lock_st for better stack alignment Reviewed-by: Tomas Mraz Reviewed-by: Bernd Edlinger Reviewed-by: Neil Horman (Merged from https://github.com/openssl/openssl/pull/26972) --- diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c index 6b8fc258dc7..c0598c5a616 100644 --- a/crypto/threads_pthread.c +++ b/crypto/threads_pthread.c @@ -217,13 +217,12 @@ struct rcu_lock_st { /* The context we are being created against */ OSSL_LIB_CTX *ctx; - /* rcu generation counter for in-order retirement */ - uint32_t id_ctr; - - /* TODO: can be moved before id_ctr for better alignment */ /* Array of quiescent points for synchronization */ struct rcu_qp *qp_group; + /* rcu generation counter for in-order retirement */ + uint32_t id_ctr; + /* Number of elements in qp_group array */ uint32_t group_count; @@ -422,10 +421,8 @@ static void retire_qp(CRYPTO_RCU_LOCK *lock, struct rcu_qp *qp) pthread_mutex_unlock(&lock->alloc_lock); } -/* TODO: count should be unsigned, e.g uint32_t */ -/* a negative value could result in unexpected behaviour */ static struct rcu_qp *allocate_new_qp_group(CRYPTO_RCU_LOCK *lock, - int count) + uint32_t count) { struct rcu_qp *new = OPENSSL_zalloc(sizeof(*new) * count); diff --git a/crypto/threads_win.c b/crypto/threads_win.c index 084125b4aad..72f54f118c9 100644 --- a/crypto/threads_win.c +++ b/crypto/threads_win.c @@ -83,13 +83,12 @@ struct rcu_lock_st { /* The context we are being created against */ OSSL_LIB_CTX *ctx; - /* rcu generation counter for in-order retirement */ - uint32_t id_ctr; - - /* TODO: can be moved before id_ctr for better alignment */ /* Array of quiescent points for synchronization */ struct rcu_qp *qp_group; + /* rcu generation counter for in-order retirement */ + uint32_t id_ctr; + /* Number of elements in qp_group array */ uint32_t group_count; @@ -124,10 +123,8 @@ struct rcu_lock_st { CRYPTO_RWLOCK *rw_lock; }; -/* TODO: count should be unsigned, e.g uint32_t */ -/* a negative value could result in unexpected behaviour */ static struct rcu_qp *allocate_new_qp_group(struct rcu_lock_st *lock, - int count) + uint32_t count) { struct rcu_qp *new = OPENSSL_zalloc(sizeof(*new) * count);