[9.20] fix: nil: Fast fail a validator deadlock

Fail with a specific error code if we detect a deadlock in the validator.

Closes #5769

Backport of MR !11622

Merge branch 'backport-5769-deadlock-validator-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11702
This commit is contained in:
Matthijs Mekking 2026-03-17 15:17:04 +00:00
commit 28d468ce12
3 changed files with 4 additions and 2 deletions

View file

@ -973,7 +973,7 @@ create_fetch(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
if (check_deadlock(val, name, type, NULL, NULL)) {
validator_log(val, ISC_LOG_DEBUG(3),
"deadlock found (create_fetch)");
return DNS_R_NOVALIDSIG;
return ISC_R_DEADLOCK;
}
if ((val->options & DNS_VALIDATOR_NOCDFLAG) != 0) {
@ -1017,7 +1017,7 @@ create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
if (check_deadlock(val, name, type, rdataset, sig)) {
validator_log(val, ISC_LOG_DEBUG(3),
"deadlock found (create_validator)");
return DNS_R_NOVALIDSIG;
return ISC_R_DEADLOCK;
}
/* OK to clear other options, but preserve NOCDFLAG and NONTA. */

View file

@ -96,6 +96,7 @@ typedef enum isc_result {
ISC_R_HTTP2ALPNERROR, /*%< ALPN for HTTP/2 failed */
ISC_R_DOTALPNERROR, /*%< ALPN for DoT failed */
ISC_R_INVALIDPROTO, /*%< invalid protocol */
ISC_R_DEADLOCK, /*%< deadlock found */
DNS_R_LABELTOOLONG,
DNS_R_BADESCAPE,

View file

@ -96,6 +96,7 @@ static const char *description[ISC_R_NRESULTS] = {
[ISC_R_HTTP2ALPNERROR] = "ALPN for HTTP/2 failed",
[ISC_R_DOTALPNERROR] = "ALPN for DoT failed",
[ISC_R_INVALIDPROTO] = "invalid protocol",
[ISC_R_DEADLOCK] = "deadlock found",
[DNS_R_LABELTOOLONG] = "label too long",
[DNS_R_BADESCAPE] = "bad escape",