Take 'env' reference before async calling perform_reopen()

The 'env' pointer is passed to an async function without taking
a reference first, which can potentially cause a use-after-free
error. Take a reference, then detach in the async function.
This commit is contained in:
Aram Sargsyan 2026-03-17 11:23:22 +00:00 committed by Arаm Sаrgsyаn
parent 4ac3a6520e
commit 48d7401f0d

View file

@ -682,6 +682,8 @@ perform_reopen(void *arg) {
LOCK(&env->reopen_lock);
env->reopen_queued = false;
UNLOCK(&env->reopen_lock);
dns_dtenv_detach(&env);
}
/*%
@ -713,6 +715,7 @@ check_file_size_and_maybe_reopen(dns_dtenv_t *env) {
* Send an event to roll the output file, then disallow output file
* rolling until the roll we queue is completed.
*/
dns_dtenv_ref(env);
isc_async_run(env->loop, perform_reopen, env);
env->reopen_queued = true;