Andreas Kusalananda Kähäri <andreas.kah...@icm.uu.se> writes:

> Hi,
>
> I noticed that ntpd would die if I tried to use ntpctl to check on it:
>
> [...]
> 29946 ntpd     CALL  poll(0xda8993ab5c0,4,1000)
> 29946 ntpd     RET   poll 1
> 29946 ntpd     CALL  kbind(0x7f7ffffc2558,0x18,0x7bb3facd5f812ed9)
> 29946 ntpd     RET   kbind 0
> 29946 ntpd     CALL  accept(5,0x7f7ffffc2630,0x7f7ffffc262c)
> 29946 ntpd     PLDG  accept, "unix", errno 1 Operation not permitted
> 29946 ntpd     PSIG  SIGABRT SIG_DFL
> [...]
>
> I also get ntpd(<pid>): syscall 30 "unix" in the console.

Confirmed, the failure is in control_accept(), which should be allowed
to speak on a Unix socket.

See the diff below.

> Cheer,
>
> ps. is tech@ the right list for these sorts of things?

For this case I'd say "yes", as it was trivial for me to reproduce the
bug.

Index: ntp.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/ntp.c,v
retrieving revision 1.139
diff -u -p -p -u -r1.139 ntp.c
--- ntp.c       30 Oct 2015 16:41:53 -0000      1.139
+++ ntp.c       20 Nov 2015 13:03:29 -0000
@@ -149,7 +149,7 @@ ntp_main(int pipe_prnt[2], int fd_ctl, s
        endservent();
 
        /* The ntp process will want to open NTP client sockets -> "inet" */
-       if (pledge("stdio inet", NULL) == -1)
+       if (pledge("stdio unix inet", NULL) == -1)
                err(1, "pledge");
 
        signal(SIGTERM, ntp_sighdlr);

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to