Make it safe to delete entries from an lhash doall callback.
authorjsing <jsing@openbsd.org>
Wed, 24 Jan 2024 14:02:52 +0000 (14:02 +0000)
committerjsing <jsing@openbsd.org>
Wed, 24 Jan 2024 14:02:52 +0000 (14:02 +0000)
commit91a7e77456f38c971cb36ccba7505d36e1ac8b71
treed5b8737d4f34092d00163259724bbef11b2cb968
parent48b5156258b8fd8ea7b97d5221152e4011894969
Make it safe to delete entries from an lhash doall callback.

Currently, the callback cannot safely delete entries as it could lead to
contraction of the hash table, which in turn could lead to doall skipping
entries (and that typically leads to memory leaks). The recommended
workaround is to reach in and fiddle with the hash table internals in
order to prevent contraction, call the doall function and then restore
the internals that were changed.

Rather than just improving our documentation, actually make it safe to
delete entries from an lhash doall callback by pausing contractions prior
to starting the callback loop, then restoring the down load factor and
triggering contraction once completed. This means that callers no longer
need access to change hash table internals in order to achieve this same
behaviour.

ok tb@
lib/libcrypto/lhash/lhash.c
lib/libcrypto/man/lh_new.3