Hi:

I am sort of digging my way through the OpenNTPD codebase for my work. I
think I find a bug in the code. Please help me to understand the reason
if this is not a bug.

In function ntp_main() (ntp.c), we poll() to check if there are any
events of interest. We do this:

1. Check internal fds (PIPE_MAIN)
2. Then check PIPE_DNS fds
3. Then check PIPE_HOTPLUG fds

Next, for the server, we check all the fds we are listening on. And then
finally, for nfs clients, we check the fds for the remote servers. Now,
there's the issue in this line;

for (j = 1; nfds > 0 && j < idx_peers; j++) {
...
}

Shouldn't the index start with 3? That is, shouldn't we do this:

for (j = 3; nfds > 0 && j < idx_peers; j++)

since, indices 0,1 and 2 correspond to the three checks I have written
above which are already done.

In other words, can we apply the following patch to fix the issue?

Index: ntpd/ntp.c
===================================================================
--- ntpd.orig/ntp.c
+++ ntpd/ntp.c
@@ -344,7 +344,7 @@ ntp_main(int pipe_prnt[2], struct ntpd_c
                        sensor_hotplugevent(hotplugfd);
                }

-               for (j = 1; nfds > 0 && j < idx_peers; j++)
+               for (j = PFD_MAX; nfds > 0 && j < idx_peers; j++)
                        if (pfd[j].revents & (POLLIN|POLLERR)) {
                                nfds--;
                                if (server_dispatch(pfd[j].fd, conf) ==
-1)



Thanks,

Ani

Reply via email to