mirror of
https://github.com/openssl/openssl.git
synced 2025-04-06 20:20:50 +08:00
Convert hashtable to using ossl_rcu_deref on lookup
The new hashtable has an issue on non-64 bit builds. We use CRYPTO_atomic_load to load a pointer value when doing lookups, but that API relies on the expectation that pointers are 64 bits wide. On 32 bit systems, we try to load 64 bits using CRYPTO_atomic_load into a 32 bit pointer, which overruns our stack Fix this by no longer using CRYPTO_atomic_load for value fetches from the hashtable. Instead use ossl_rcu_deref, whcih operates on void pointers and is safe on all arches Reviewed-by: Paul Dale <ppzgs1@gmail.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24682)
This commit is contained in:
parent
b1e7bc5bdf
commit
2c7cae53bc
@ -639,8 +639,7 @@ HT_VALUE *ossl_ht_get(HT *h, HT_KEY *key)
|
||||
CRYPTO_atomic_load(&md->neighborhoods[neigh_idx].entries[j].hash,
|
||||
&ehash, h->atomic_lock);
|
||||
if (compare_hash(hash, ehash)) {
|
||||
CRYPTO_atomic_load((uint64_t *)&md->neighborhoods[neigh_idx].entries[j].value,
|
||||
(uint64_t *)&vidx, h->atomic_lock);
|
||||
vidx = ossl_rcu_deref(&md->neighborhoods[neigh_idx].entries[j].value);
|
||||
ret = (HT_VALUE *)vidx;
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user