Commit
29672515
portability: Work around Apple's bizarrely deficient poll() implementation
introduced a read of unitialised data in fds[], because it failed to
honour i->nfds which is 0 on the first iteration.
The symptom is that secnet may, on the first iteration, die due to
mistakenly seeing POLLNVAL.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
((uint64_t)tv_now_global.tv_usec/(uint64_t)1000);
idx=0;
for (i=reg; i; i=i->next) {
- if(fds[idx].revents & POLLNVAL) {
- fatal("run: poll (%s) set POLLNVAL", i->desc);
+ int check;
+ for (check=0; check<i->nfds; check++) {
+ if(fds[idx+check].revents & POLLNVAL) {
+ fatal("run: poll (%s#%d) set POLLNVAL", i->desc, check);
+ }
}
i->after(i->state, fds+idx, i->nfds);
idx+=i->nfds;