[PATCH 2/5] dirmngr: hkp: avoid race condition when some hosts die
Werner Koch
wk at gnupg.org
Tue Nov 1 12:06:06 CET 2016
On Tue, 1 Nov 2016 01:33, dkg at fifthhorseman.net said:
> Multiple threads may write to hosttable[x]->dead while
> select_random_host() is running. For example, a housekeeping thread
Nope. Please look at the code:
for (idx=0, tblsize=0; (pidx = table[idx]) != -1; idx++)
if (hosttable[pidx] && !hosttable[pidx]->dead)
tblsize++;
if (!tblsize)
return -1; /* No hosts. */
tbl = xtrymalloc (tblsize * sizeof *tbl);
if (!tbl)
return -1;
for (idx=0, tblsize=0; (pidx = table[idx]) != -1; idx++)
if (hosttable[pidx] && !hosttable[pidx]->dead)
tbl[tblsize++] = pidx;
if (tblsize == 1) /* Save a get_uint_nonce. */
pidx = tbl[0];
else
pidx = tbl[get_uint_nonce () % tblsize];
and explain where you see a syscall which may switch to another thread.
Neither xtrymalloc nor get_unit_nonce are such syscalls or supposed to
use nPth wrapper syscalls.
I agree that the use of get_unit_nonce is a bit fragile because we can't
immediatly see how it is implemented and thus would be better to get its
value at the start of the function.
Shalom-Salam,
Werner
--
Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 194 bytes
Desc: not available
URL: </pipermail/attachments/20161101/472d93c2/attachment-0001.sig>
More information about the Gnupg-devel
mailing list