j...@wxcvbn.org (Jérémie Courrèges-Anglas) writes:

> So I took look at which pledge requests rtadvd could use.
>
> Turns out it can't call pledge early, because it attempts to retrieve
> IPV6CTL_FORWARDING and pledge currently denies it.  rtadvd is the only
> user of IPV6CTL_FORWARDING in base, so IMO it doesn't call for a change
> in kern_pledge.c.  There are other exotic setsockopt calls that would
> probably prevent early pledge calls.
>
> Another minor issue is that pidfile(3) installs an atexit(3) handler
> that calls unlink(2).  It makes little sense to have rtadvd slaughtered
> when it tries to unlink /var/run/rtadvd.pid, especially as that path
> isn't reachable anymore (rtadvd runs privdrop, chrooted).  And it makes
> little sense to add "cpath" to the pledge request, just to have rtadvd
> exit properly.  Let's not just write down a pid file.
>
> Thus, this diff does two things:
> - remove the use of pidfile(3).  rc.d doesn't need this.
> - introduce a single, minimal pledge(2) request just before the main
>   loop
>
> I'll probably commit the pidfile() removal and the pledge request in
> separate commits.
>
> Comments / oks?

Woops, I forgot the manpage bits:

Index: Makefile
===================================================================
RCS file: /cvs/src/usr.sbin/rtadvd/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- Makefile    21 Apr 2008 20:40:55 -0000      1.6
+++ Makefile    25 Oct 2015 19:35:27 -0000
@@ -4,8 +4,6 @@ PROG=   rtadvd
 SRCS=  rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c log.c
 
 CFLAGS+=-Wall
-LDADD+=        -lutil
-DPADD+=        ${LIBUTIL}
 MAN=   rtadvd.8 rtadvd.conf.5
 
 .include <bsd.prog.mk>
Index: rtadvd.8
===================================================================
RCS file: /cvs/src/usr.sbin/rtadvd/rtadvd.8,v
retrieving revision 1.31
diff -u -p -r1.31 rtadvd.8
--- rtadvd.8    2 Jun 2015 16:02:45 -0000       1.31
+++ rtadvd.8    25 Oct 2015 20:07:25 -0000
@@ -147,12 +147,9 @@ will transmit router advertisement with 
 to all the interfaces
 .Pq in accordance with RFC 4861 6.2.5 .
 .Sh FILES
-.Bl -tag -width "/var/run/rtadvd.pidXX" -compact
+.Bl -tag -width "/etc/rtadvd.conf" -compact
 .It Pa /etc/rtadvd.conf
 The default configuration file.
-.It Pa /var/run/rtadvd.pid
-Contains the PID of the currently running
-.Nm .
 .El
 .Sh EXIT STATUS
 .Ex -std rtadvd
Index: rtadvd.c
===================================================================
RCS file: /cvs/src/usr.sbin/rtadvd/rtadvd.c,v
retrieving revision 1.55
diff -u -p -r1.55 rtadvd.c
--- rtadvd.c    20 Aug 2015 22:39:29 -0000      1.55
+++ rtadvd.c    25 Oct 2015 19:36:38 -0000
@@ -55,7 +55,6 @@
 #include <err.h>
 #include <errno.h>
 #include <string.h>
-#include <util.h>
 #include <pwd.h>
 
 #include "rtadvd.h"
@@ -224,10 +223,6 @@ main(argc, argv)
 
        sock_open();
 
-       /* record the current PID */
-       if (pidfile(NULL) < 0)
-               log_warnx("failed to open the pid log file, run anyway.");
-
        if (sflag == 0) {
                rtsock_open();
        }
@@ -242,6 +237,9 @@ main(argc, argv)
            setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
            setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
                fatal("cannot drop privileges");
+
+       if (pledge("stdio inet route", NULL) == -1)
+               err(1, "pledge");
 
        npfd = 1;
        pfd[0].fd = sock;


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

Reply via email to