mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
ensure distinct query id for parallel A and AAAA queries in resolver
assuming a reasonable realtime clock, res_mkquery is highly unlikely to generate the same query id twice in a row, but it's possible with a very low-resolution system clock or under extreme delay of forward progress. when it happens, res_msend fails to wait for both answers, and instead stops listening after getting two answers to the same query (A or AAAA). to avoid this, increment one byte of the second query's id if it matches the first query's. don't bother checking if the second byte is also equal, since it doesn't matter; we just need to ensure that at least one byte is distinct.
This commit is contained in:
parent
8974ef2124
commit
6c858d6fd4
1 changed files with 3 additions and 0 deletions
|
@ -155,6 +155,9 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static
|
|||
if (qlens[nq] == -1)
|
||||
return EAI_NONAME;
|
||||
qbuf[nq][3] = 0; /* don't need AD flag */
|
||||
/* Ensure query IDs are distinct. */
|
||||
if (nq && qbuf[nq][0] == qbuf[0][0])
|
||||
qbuf[nq][0]++;
|
||||
nq++;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue