mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 05:57:52 +00:00
fix: dev: Don't ignore the local port number in dns_dispatch_add() for TCP
The dns_dispatch_add() function registers the 'resp' entry in 'disp->mgr->qids' hash table with 'resp->port' being 0, but in tcp_recv_success(), when looking up an entry in the hash table after a successfully received data the port is used, so if the local port was set (i.e. it was not 0) it fails to find the entry and results in an unexpected error. Set the 'resp->port' to the given local port value extracted from 'disp->local'. Closes #4969 Merge branch '4969-dispatch-tcp-source-port-bug-fix' into 'main' See merge request isc-projects/bind9!9576
This commit is contained in:
commit
41f4c620c2
@ -1140,6 +1140,20 @@ else
|
||||
fi
|
||||
|
||||
if [ -x "$MDIG" ]; then
|
||||
n=$((n + 1))
|
||||
echo_i "checking mdig +tcp works with a source address and port ($n)"
|
||||
ret=0
|
||||
# When running more than once in quick succession with a source address#port,
|
||||
# we can get a "response failed with address not available" error because
|
||||
# the address#port is still busy, but we are not interested in that error,
|
||||
# as we are only looking for the unexpected error case, that's why we ignore
|
||||
# the return code from mdig, but we check for the unexpected error message
|
||||
# using grep. See GitLab #4969.
|
||||
mdig_with_opts -b "10.53.0.3#${EXTRAPORT8}" +tcp @10.53.0.3 example >dig.out.test$n 2>&1 || true
|
||||
grep -F "unexpected error" dig.out.test$n >/dev/null && ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
n=$((n + 1))
|
||||
echo_i "check that mdig handles malformed option '+ednsopt=:' gracefully ($n)"
|
||||
ret=0
|
||||
|
@ -1433,6 +1433,7 @@ dns_dispatch_add(dns_dispatch_t *disp, isc_loop_t *loop,
|
||||
dns_dispentry_t *resp = isc_mem_get(disp->mctx, sizeof(*resp));
|
||||
*resp = (dns_dispentry_t){
|
||||
.timeout = timeout,
|
||||
.port = localport,
|
||||
.peer = *dest,
|
||||
.loop = loop,
|
||||
.connected = connected,
|
||||
|
Loading…
x
Reference in New Issue
Block a user