diff options
author | delphij <delphij@FreeBSD.org> | 2016-01-22 15:55:21 +0000 |
---|---|---|
committer | delphij <delphij@FreeBSD.org> | 2016-01-22 15:55:21 +0000 |
commit | 0e1dba9a0aa72f6f27001a50552a8c67575da336 (patch) | |
tree | dbb1c1e8cb8058b52ef547a1f18b9751613aeb04 /contrib/ntp/libntp/ntp_worker.c | |
parent | 7a67cba86b1ced9982ebb0dd11a9a987829efe9e (diff) | |
download | FreeBSD-src-0e1dba9a0aa72f6f27001a50552a8c67575da336.zip FreeBSD-src-0e1dba9a0aa72f6f27001a50552a8c67575da336.tar.gz |
MFC r294554: MFV r294491: ntp 4.2.8p6.
Security: CVE-2015-7973, CVE-2015-7974, CVE-2015-7975
Security: CVE-2015-7976, CVE-2015-7977, CVE-2015-7978
Security: CVE-2015-7979, CVE-2015-8138, CVE-2015-8139
Security: CVE-2015-8140, CVE-2015-8158
With hat: so
Diffstat (limited to 'contrib/ntp/libntp/ntp_worker.c')
-rw-r--r-- | contrib/ntp/libntp/ntp_worker.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/contrib/ntp/libntp/ntp_worker.c b/contrib/ntp/libntp/ntp_worker.c index f5642e1..087f06c 100644 --- a/contrib/ntp/libntp/ntp_worker.c +++ b/contrib/ntp/libntp/ntp_worker.c @@ -27,6 +27,8 @@ blocking_child ** blocking_children; size_t blocking_children_alloc; int worker_per_query; /* boolean */ int intres_req_pending; +volatile u_int blocking_child_ready_seen; +volatile u_int blocking_child_ready_done; #ifndef HAVE_IO_COMPLETION_PORT @@ -262,6 +264,31 @@ process_blocking_resp( req_child_exit(c); } +void +harvest_blocking_responses(void) +{ + int idx; + blocking_child* cp; + u_int scseen, scdone; + + scseen = blocking_child_ready_seen; + scdone = blocking_child_ready_done; + if (scdone != scseen) { + blocking_child_ready_done = scseen; + for (idx = 0; idx < blocking_children_alloc; idx++) { + cp = blocking_children[idx]; + if (NULL == cp) + continue; + scseen = cp->resp_ready_seen; + scdone = cp->resp_ready_done; + if (scdone != scseen) { + cp->resp_ready_done = scseen; + process_blocking_resp(cp); + } + } + } +} + /* * blocking_child_common runs as a forked child or a thread |