42 tame calls have been commited to 28 userland programs so far.
For instance gzip, md5, ping, traceroute, tcpdump, script, arp,
whois, ntpd, sshd...

Below is a tree of roughly a hundred more programs.  Not all are
fully verified yet, but they being placed in snapshots.

Some of these I did myself, but others were contributed.  I am trying
to focus on the programs which do either file or socket behaviour, but
not both.  Or, on the programs which do their fd setup early.

I appreciate the feedback I've received so far.

Index: bin/dd/dd.c
===================================================================
RCS file: /cvs/src/bin/dd/dd.c,v
retrieving revision 1.21
diff -u -p -u -r1.21 dd.c
--- bin/dd/dd.c 16 Jan 2015 06:39:31 -0000      1.21
+++ bin/dd/dd.c 28 Sep 2015 20:15:11 -0000
@@ -149,6 +149,9 @@ setup(void)
        if (out.offset)
                pos_out();
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        /*
         * Truncate the output file; ignore errors because it fails on some
         * kinds of output files, tapes, for example.
Index: bin/df/df.c
===================================================================
RCS file: /cvs/src/bin/df/df.c,v
retrieving revision 1.52
diff -u -p -u -r1.52 df.c
--- bin/df/df.c 16 Jan 2015 06:39:31 -0000      1.52
+++ bin/df/df.c 2 Oct 2015 00:19:01 -0000
@@ -79,6 +79,9 @@ main(int argc, char *argv[])
        int width, maxwidth;
        char *mntpt;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "hiklnPt:")) != -1)
                switch (ch) {
                case 'h':
Index: bin/expr/expr.c
===================================================================
RCS file: /cvs/src/bin/expr/expr.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 expr.c
--- bin/expr/expr.c     11 Aug 2015 17:15:46 -0000      1.20
+++ bin/expr/expr.c     28 Sep 2015 20:15:11 -0000
@@ -12,6 +12,7 @@
 #include <limits.h>
 #include <locale.h>
 #include <ctype.h>
+#include <unistd.h>
 #include <regex.h>
 #include <err.h>
 
@@ -499,6 +500,9 @@ main(int argc, char *argv[])
        struct val     *vp;
 
        (void) setlocale(LC_ALL, "");
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        if (argc > 1 && !strcmp(argv[1], "--"))
                argv++;
Index: bin/ls/ls.c
===================================================================
RCS file: /cvs/src/bin/ls/ls.c,v
retrieving revision 1.41
diff -u -p -u -r1.41 ls.c
--- bin/ls/ls.c 25 Jun 2015 02:04:07 -0000      1.41
+++ bin/ls/ls.c 28 Sep 2015 20:15:11 -0000
@@ -123,6 +123,9 @@ ls_main(int argc, char *argv[])
                        termwidth = width;
        }
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /* Root is -A automatically. */
        if (!getuid())
                f_listdot = 1;
Index: bin/mkdir/mkdir.c
===================================================================
RCS file: /cvs/src/bin/mkdir/mkdir.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 mkdir.c
--- bin/mkdir/mkdir.c   2 Apr 2013 20:26:17 -0000       1.25
+++ bin/mkdir/mkdir.c   3 Oct 2015 03:32:46 -0000
@@ -55,6 +55,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio cpath rpath fattr", NULL) == -1)
+               err(1, "tame");
+
        /*
         * The default file mode is a=rwx (0777) with selected permissions
         * removed in accordance with the file mode creation mask.  For
Index: bin/pax/ar_io.c
===================================================================
RCS file: /cvs/src/bin/pax/ar_io.c,v
retrieving revision 1.50
diff -u -p -u -r1.50 ar_io.c
--- bin/pax/ar_io.c     22 Mar 2015 03:15:00 -0000      1.50
+++ bin/pax/ar_io.c     3 Oct 2015 23:42:07 -0000
@@ -75,6 +75,7 @@ static int wr_trail = 1;              /* trailer was
 static int can_unlnk = 0;              /* do we unlink null archives?  */
 const char *arcname;                   /* printable name of archive */
 const char *gzip_program;              /* name of gzip program */
+const char *delayed_tame;    /* tame request for after forking gzip_program */
 static pid_t zpid = -1;                        /* pid of child process */
 int force_one_volume;                  /* 1 if we ignore volume changes */
 
@@ -1276,4 +1277,6 @@ ar_start_gzip(int fd, const char *path, 
                        err(1, "could not exec %s", path);
                /* NOTREACHED */
        }
+       if (delayed_tame != NULL && tame(delayed_tame, NULL) == -1)
+               err(1, "tame");
 }
Index: bin/pax/extern.h
===================================================================
RCS file: /cvs/src/bin/pax/extern.h,v
retrieving revision 1.53
diff -u -p -u -r1.53 extern.h
--- bin/pax/extern.h    19 Mar 2015 05:14:24 -0000      1.53
+++ bin/pax/extern.h    3 Oct 2015 23:42:07 -0000
@@ -45,6 +45,7 @@
  */
 extern const char *arcname;
 extern const char *gzip_program;
+extern const char *delayed_tame;
 extern int force_one_volume;
 int ar_open(const char *);
 void ar_close(int _in_sig);
Index: bin/pax/pax.c
===================================================================
RCS file: /cvs/src/bin/pax/pax.c,v
retrieving revision 1.41
diff -u -p -u -r1.41 pax.c
--- bin/pax/pax.c       9 Mar 2015 04:23:29 -0000       1.41
+++ bin/pax/pax.c       3 Oct 2015 23:42:07 -0000
@@ -257,6 +257,30 @@ main(int argc, char **argv)
                return(exit_val);
 
        /*
+        * pmode needs to restore setugid bits when extracting or copying,
+        * so can't tame at all then.
+        */
+       if (pmode == 0 || (act != EXTRACT && act != COPY)) {
+               /*
+                * If we need to fork/exec gzip_program, then delay the
+                * tame() call.  (Copy mode ignores gzip_program)
+                */
+               if (gzip_program == NULL || act == COPY) {
+                       if (tame("stdio getpw ioctl cpath wpath rpath fattr",
+                           NULL) == -1)
+                               err(1, "tame");
+               } else if (gzip_program != NULL) {
+                       /*
+                        * If nflag, then add "proc" to the above, for
+                        * kill() of zpid
+                        */
+                       delayed_tame =
+                           nflag? "stdio getpw ioctl cpath wpath rpath fattr"
+                           : "proc stdio getpw ioctl cpath wpath rpath fattr";
+               }
+       }
+
+       /*
         * select a primary operation mode
         */
        switch (act) {
Index: bin/pwd/pwd.c
===================================================================
RCS file: /cvs/src/bin/pwd/pwd.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 pwd.c
--- bin/pwd/pwd.c       28 May 2014 06:55:58 -0000      1.12
+++ bin/pwd/pwd.c       28 Sep 2015 20:15:11 -0000
@@ -47,6 +47,9 @@ main(int argc, char *argv[])
        int ch, lFlag = 0;
        const char *p;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "LP")) != -1) {
                switch (ch) {
                case 'L':
Index: sbin/dmesg/dmesg.c
===================================================================
RCS file: /cvs/src/sbin/dmesg/dmesg.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 dmesg.c
--- sbin/dmesg/dmesg.c  16 Jan 2015 06:39:57 -0000      1.25
+++ sbin/dmesg/dmesg.c  3 Oct 2015 01:13:02 -0000
@@ -108,6 +108,9 @@ main(int argc, char *argv[])
                if (sysctl(mib, 2, bufdata, &len, NULL, 0))
                        err(1, "sysctl: KERN_MSGBUF");
 
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
+
                memcpy(&cur, bufdata, sizeof(cur));
                bufdata = ((struct msgbuf *)bufdata)->msg_bufc;
        } else {
@@ -119,6 +122,9 @@ main(int argc, char *argv[])
                if ((kd = kvm_open(nlistf, memf, NULL, O_RDONLY,
                    "dmesg")) == NULL)
                        return (1);
+
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
 
                if (kvm_nlist(kd, nl) == -1)
                        errx(1, "kvm_nlist: %s", kvm_geterr(kd));
Index: usr.bin/arch/arch.c
===================================================================
RCS file: /cvs/src/usr.bin/arch/arch.c,v
retrieving revision 1.16
diff -u -p -u -r1.16 arch.c
--- usr.bin/arch/arch.c 25 Sep 2015 16:19:26 -0000      1.16
+++ usr.bin/arch/arch.c 28 Sep 2015 20:15:11 -0000
@@ -30,6 +30,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <err.h>
 
 static void __dead usage(void);
 
@@ -43,6 +44,9 @@ main(int argc, char *argv[])
        char *arch, *opts;
 
        setlocale(LC_ALL, "");
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        machine = strcmp(__progname, "machine") == 0;
        if (machine) {
Index: usr.bin/banner/banner.c
===================================================================
RCS file: /cvs/src/usr.bin/banner/banner.c,v
retrieving revision 1.9
diff -u -p -u -r1.9 banner.c
--- usr.bin/banner/banner.c     27 Oct 2009 23:59:35 -0000      1.9
+++ usr.bin/banner/banner.c     28 Sep 2015 20:15:11 -0000
@@ -53,6 +53,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <err.h>
 
 #include "banner.h"
 
@@ -152,6 +153,8 @@ main(int argc, char *argv[])
 {
        char word[10+1];                        /* strings limited to 10 chars 
*/
        
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
        while (*++argv) {
                (void)strlcpy(word, *argv, sizeof (word));
                scan_out(1, word, '\0');
Index: usr.bin/cal/cal.c
===================================================================
RCS file: /cvs/src/usr.bin/cal/cal.c,v
retrieving revision 1.28
diff -u -p -u -r1.28 cal.c
--- usr.bin/cal/cal.c   17 Mar 2015 19:31:30 -0000      1.28
+++ usr.bin/cal/cal.c   28 Sep 2015 20:15:11 -0000
@@ -150,6 +150,9 @@ main(int argc, char *argv[])
        int ch, month, year, yflag;
        const char *errstr;
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        yflag = year = 0;
        while ((ch = getopt(argc, argv, "jmwy")) != -1)
                switch(ch) {
Index: usr.bin/col/col.c
===================================================================
RCS file: /cvs/src/usr.bin/col/col.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 col.c
--- usr.bin/col/col.c   9 May 2015 20:36:18 -0000       1.17
+++ usr.bin/col/col.c   28 Sep 2015 20:15:11 -0000
@@ -113,6 +113,9 @@ main(int argc, char *argv[])
        int adjust, opt, warned;
        const char *errstr;
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        max_bufd_lines = 256;
        compress_spaces = 1;            /* compress spaces into tabs */
        while ((opt = getopt(argc, argv, "bfhl:x")) != -1)
Index: usr.bin/colrm/colrm.c
===================================================================
RCS file: /cvs/src/usr.bin/colrm/colrm.c,v
retrieving revision 1.9
diff -u -p -u -r1.9 colrm.c
--- usr.bin/colrm/colrm.c       27 Oct 2009 23:59:36 -0000      1.9
+++ usr.bin/colrm/colrm.c       28 Sep 2015 20:15:11 -0000
@@ -52,6 +52,9 @@ main(int argc, char *argv[])
        int ch;
        char *p;
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1)
                switch(ch) {
                case '?':
Index: usr.bin/column/column.c
===================================================================
RCS file: /cvs/src/usr.bin/column/column.c,v
retrieving revision 1.19
diff -u -p -u -r1.19 column.c
--- usr.bin/column/column.c     22 May 2014 19:50:34 -0000      1.19
+++ usr.bin/column/column.c     4 Oct 2015 05:00:55 -0000
@@ -76,6 +76,9 @@ main(int argc, char *argv[])
        } else
                termwidth = win.ws_col;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        tflag = xflag = 0;
        while ((ch = getopt(argc, argv, "c:s:tx")) != -1)
                switch(ch) {
@@ -100,16 +103,21 @@ main(int argc, char *argv[])
        argc -= optind;
        argv += optind;
 
-       if (!*argv)
+       if (!*argv) {
                input(stdin);
-       else for (; *argv; ++argv)
-               if ((fp = fopen(*argv, "r"))) {
-                       input(fp);
-                       (void)fclose(fp);
-               } else {
-                       warn("%s", *argv);
-                       eval = 1;
+       } else {
+               for (; *argv; ++argv) {
+                       if ((fp = fopen(*argv, "r"))) {
+                               input(fp);
+                               (void)fclose(fp);
+                       } else {
+                               warn("%s", *argv);
+                               eval = 1;
+                       }
                }
+       }
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        if (!entries)
                exit(eval);
Index: usr.bin/comm/comm.c
===================================================================
RCS file: /cvs/src/usr.bin/comm/comm.c,v
retrieving revision 1.8
diff -u -p -u -r1.8 comm.c
--- usr.bin/comm/comm.c 27 Oct 2009 23:59:37 -0000      1.8
+++ usr.bin/comm/comm.c 28 Sep 2015 20:15:11 -0000
@@ -61,6 +61,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        flag1 = flag2 = flag3 = 1;
        compare = strcoll;
        while ((ch = getopt(argc, argv, "123f")) != -1)
Index: usr.bin/csplit/csplit.c
===================================================================
RCS file: /cvs/src/usr.bin/csplit/csplit.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 csplit.c
--- usr.bin/csplit/csplit.c     20 May 2014 01:25:23 -0000      1.5
+++ usr.bin/csplit/csplit.c     4 Oct 2015 05:00:49 -0000
@@ -103,6 +103,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath wpath cpath", NULL) == -1)
+               err(1, "tame");
+
        kflag = sflag = 0;
        prefix = "xx";
        sufflen = 2;
@@ -140,6 +143,8 @@ main(int argc, char *argv[])
        if (strcmp(infn, "-") == 0) {
                infile = stdin;
                infn = "stdin";
+               if (tame("stdio wpath cpath", NULL) == -1)
+                       err(1, "tame");
        } else if ((infile = fopen(infn, "r")) == NULL)
                err(1, "%s", infn);
 
Index: usr.bin/cut/cut.c
===================================================================
RCS file: /cvs/src/usr.bin/cut/cut.c,v
retrieving revision 1.19
diff -u -p -u -r1.19 cut.c
--- usr.bin/cut/cut.c   18 Aug 2015 17:10:48 -0000      1.19
+++ usr.bin/cut/cut.c   28 Sep 2015 20:15:11 -0000
@@ -63,6 +63,9 @@ main(int argc, char *argv[])
 
        setlocale (LC_ALL, "");
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        dchar = '\t';                   /* default delimiter is \t */
 
        /* Since we don't support multi-byte characters, the -c and -b 
Index: usr.bin/deroff/deroff.c
===================================================================
RCS file: /cvs/src/usr.bin/deroff/deroff.c,v
retrieving revision 1.11
diff -u -p -u -r1.11 deroff.c
--- usr.bin/deroff/deroff.c     9 Feb 2015 11:39:17 -0000       1.11
+++ usr.bin/deroff/deroff.c     4 Oct 2015 05:00:40 -0000
@@ -260,6 +260,9 @@ main(int ac, char **av)
        int     errflg = 0;
        int     kflag = NO;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        iflag = NO;
        wordflag = NO;
        msflag = NO;
@@ -331,6 +334,8 @@ main(int ac, char **av)
 #endif /* DEBUG */
        if (argc == 0) {
                infile = stdin;
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
        } else {
                infile = opn(argv[0]);
                --argc;
Index: usr.bin/diff/diff.c
===================================================================
RCS file: /cvs/src/usr.bin/diff/diff.c,v
retrieving revision 1.59
diff -u -p -u -r1.59 diff.c
--- usr.bin/diff/diff.c 29 Apr 2015 04:00:25 -0000      1.59
+++ usr.bin/diff/diff.c 28 Sep 2015 20:15:11 -0000
@@ -217,6 +217,10 @@ main(int argc, char **argv)
        argc -= optind;
        argv += optind;
 
+       if (lflag == 0) {
+               if (tame("stdio wpath rpath tmppath", NULL) == -1)
+                       err(1, "tame");
+       }
        /*
         * Do sanity checks, fill in stb1 and stb2 and call the appropriate
         * driver routine.  Both drivers use the contents of stb1 and stb2.
Index: usr.bin/diff3/diff3prog.c
===================================================================
RCS file: /cvs/src/usr.bin/diff3/diff3prog.c,v
retrieving revision 1.15
diff -u -p -u -r1.15 diff3prog.c
--- usr.bin/diff3/diff3prog.c   5 Sep 2015 09:47:08 -0000       1.15
+++ usr.bin/diff3/diff3prog.c   28 Sep 2015 20:15:11 -0000
@@ -145,6 +145,9 @@ main(int argc, char **argv)
 {
        int ch, i, m, n;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        eflag = 0;
        oflag = 0;
        while ((ch = getopt(argc, argv, "EeXx3")) != -1) {
Index: usr.bin/dirname/dirname.c
===================================================================
RCS file: /cvs/src/usr.bin/dirname/dirname.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 dirname.c
--- usr.bin/dirname/dirname.c   10 Aug 2010 22:05:36 -0000      1.13
+++ usr.bin/dirname/dirname.c   28 Sep 2015 20:15:11 -0000
@@ -33,6 +33,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1) {
                switch (ch) {
                default:
Index: usr.bin/expand/expand.c
===================================================================
RCS file: /cvs/src/usr.bin/expand/expand.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 expand.c
--- usr.bin/expand/expand.c     26 Nov 2013 13:18:55 -0000      1.12
+++ usr.bin/expand/expand.c     28 Sep 2015 20:15:11 -0000
@@ -51,6 +51,9 @@ main(int argc, char *argv[])
        int c, column;
        int n;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /* handle obsolete syntax */
        while (argc > 1 && argv[1][0] == '-' &&
            isdigit((unsigned char)argv[1][1])) {
Index: usr.bin/fgen/fgen.l
===================================================================
RCS file: /cvs/src/usr.bin/fgen/fgen.l,v
retrieving revision 1.10
diff -u -p -u -r1.10 fgen.l
--- usr.bin/fgen/fgen.l 30 Dec 2013 21:52:21 -0000      1.10
+++ usr.bin/fgen/fgen.l 28 Sep 2015 20:15:11 -0000
@@ -960,6 +960,9 @@ main(argc, argv)
        char *hdrtype = "version1";
        int i;
 
+       if (tame("stdio rpath wpath cpath", NULL) == -1)
+               err(1, "tame");
+
        outf = 1; /* stdout */
        myname = argv[0];
 
Index: usr.bin/file/Makefile
===================================================================
RCS file: /cvs/src/usr.bin/file/Makefile,v
retrieving revision 1.15
diff -u -p -u -r1.15 Makefile
--- usr.bin/file/Makefile       27 Apr 2015 13:52:17 -0000      1.15
+++ usr.bin/file/Makefile       28 Sep 2015 20:15:11 -0000
@@ -1,7 +1,7 @@
 # $OpenBSD: Makefile,v 1.15 2015/04/27 13:52:17 nicm Exp $
 
 PROG=   file
-SRCS=   file.c magic-dump.c magic-load.c magic-test.c magic-common.c sandbox.c 
\
+SRCS=   file.c magic-dump.c magic-load.c magic-test.c magic-common.c \
        text.c xmalloc.c
 MAN=   file.1 magic.5
 
Index: usr.bin/file/file.c
===================================================================
RCS file: /cvs/src/usr.bin/file/file.c,v
retrieving revision 1.48
diff -u -p -u -r1.48 file.c
--- usr.bin/file/file.c 2 Oct 2015 18:06:27 -0000       1.48
+++ usr.bin/file/file.c 2 Oct 2015 18:10:55 -0000
@@ -116,7 +116,7 @@ usage(void)
 int
 main(int argc, char **argv)
 {
-       int                      opt, pair[2], fd, idx;
+       int                      opt, pair[2], fd, idx, mode;
        char                    *home;
        struct passwd           *pw;
        struct imsgbuf           ibuf;
@@ -192,8 +192,10 @@ main(int argc, char **argv)
        parent = getpid();
        if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0)
                err(1, "socketpair");
-       pid = sandbox_fork(FILE_USER);
-       if (pid == 0) {
+       switch (pid = fork()) {
+       case -1:
+               err(1, "fork");
+       case 0:
                close(pair[0]);
                child(pair[1], parent, argc, argv);
        }
@@ -220,10 +222,21 @@ main(int argc, char **argv)
                        fd = -1;
                        msg.error = errno;
                } else {
-                       fd = open(argv[idx], O_RDONLY|O_NONBLOCK);
-                       if (fd == -1 && (errno == ENFILE || errno == EMFILE))
-                               err(1, "open");
-                       if (S_ISLNK(msg.sb.st_mode))
+                       /*
+                        * tame(2) doesn't let us pass directory file
+                        * descriptors around but we don't need them, so don't
+                        * open directories or symlinks (which could be to
+                        * directories).
+                        */
+                       mode = msg.sb.st_mode;
+                       if (!S_ISDIR(mode) && !S_ISLNK(mode)) {
+                               fd = open(argv[idx], O_RDONLY|O_NONBLOCK);
+                               if (fd == -1 &&
+                                   (errno == ENFILE || errno == EMFILE))
+                                       err(1, "open");
+                       } else
+                               fd = -1;
+                       if (S_ISLNK(mode))
                                read_link(&msg, argv[idx]);
                }
                send_message(&ibuf, &msg, sizeof msg, fd);
@@ -328,6 +341,7 @@ read_link(struct input_msg *msg, const c
 static __dead void
 child(int fd, pid_t parent, int argc, char **argv)
 {
+       struct passwd           *pw;
        struct magic            *m;
        struct imsgbuf           ibuf;
        struct imsg              imsg;
@@ -336,6 +350,24 @@ child(int fd, pid_t parent, int argc, ch
        struct input_file        inf;
        int                      i, idx;
        size_t                   len, width = 0;
+
+       if (tame("stdio cmsg getpw proc", NULL) == -1)
+               err(1, "tame");
+
+       if (geteuid() == 0) {
+               pw = getpwnam(FILE_USER);
+               if (pw == NULL)
+                       errx(1, "unknown user %s", FILE_USER);
+               if (setgroups(1, &pw->pw_gid) != 0)
+                       err(1, "setgroups");
+               if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0)
+                       err(1, "setresgid");
+               if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0)
+                       err(1, "setresuid");
+       }
+
+       if (tame("stdio cmsg", NULL) == -1)
+               err(1, "tame");
 
        m = magic_load(magicfp, magicpath, cflag || Wflag);
        if (cflag) {
Index: usr.bin/file/sandbox.c
===================================================================
RCS file: /cvs/src/usr.bin/file/sandbox.c,v
retrieving revision 1.9
diff -u -p -u -r1.9 sandbox.c
--- usr.bin/file/sandbox.c      23 Aug 2015 18:31:41 -0000      1.9
+++ usr.bin/file/sandbox.c      28 Sep 2015 20:15:11 -0000
@@ -1,158 +0,0 @@
-/* $OpenBSD: sandbox.c,v 1.9 2015/08/23 18:31:41 guenther Exp $ */
-
-/*
- * Copyright (c) 2015 Nicholas Marriott <[email protected]>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/syscall.h>
-#include <sys/wait.h>
-
-#include <dev/systrace.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <pwd.h>
-#include <signal.h>
-#include <unistd.h>
-
-#include "file.h"
-#include "magic.h"
-#include "xmalloc.h"
-
-static const struct
-{
-       int syscallnum;
-       int action;
-} allowed_syscalls[] = {
-       { SYS_open, SYSTR_POLICY_NEVER }, /* for strerror */
-
-       { SYS_close, SYSTR_POLICY_PERMIT },
-       { SYS_exit, SYSTR_POLICY_PERMIT },
-       { SYS_fcntl, SYSTR_POLICY_PERMIT },
-       { SYS_fstat, SYSTR_POLICY_PERMIT },
-       { SYS_getdtablecount, SYSTR_POLICY_PERMIT },
-       { SYS_getentropy, SYSTR_POLICY_PERMIT },
-       { SYS_getpid, SYSTR_POLICY_PERMIT },
-       { SYS_getrlimit, SYSTR_POLICY_PERMIT },
-       { SYS_issetugid, SYSTR_POLICY_PERMIT },
-       { SYS_kbind, SYSTR_POLICY_PERMIT },
-       { SYS_madvise, SYSTR_POLICY_PERMIT },
-       { SYS_mmap, SYSTR_POLICY_PERMIT },
-       { SYS_mprotect, SYSTR_POLICY_PERMIT },
-       { SYS_mquery, SYSTR_POLICY_PERMIT },
-       { SYS_munmap, SYSTR_POLICY_PERMIT },
-       { SYS_read, SYSTR_POLICY_PERMIT },
-       { SYS_recvmsg, SYSTR_POLICY_PERMIT },
-       { SYS_sendmsg, SYSTR_POLICY_PERMIT },
-       { SYS_sigprocmask, SYSTR_POLICY_PERMIT },
-       { SYS_write, SYSTR_POLICY_PERMIT },
-
-       { -1, -1 }
-};
-
-static int
-sandbox_find(int syscallnum)
-{
-       int     i;
-
-       for (i = 0; allowed_syscalls[i].syscallnum != -1; i++) {
-               if (allowed_syscalls[i].syscallnum == syscallnum)
-                       return (allowed_syscalls[i].action);
-       }
-       return (SYSTR_POLICY_KILL);
-}
-
-static int
-sandbox_child(const char *user)
-{
-       struct passwd   *pw;
-
-       if (geteuid() == 0) {
-               pw = getpwnam(user);
-               if (pw == NULL)
-                       errx(1, "unknown user %s", user);
-               if (setgroups(1, &pw->pw_gid) != 0)
-                       err(1, "setgroups");
-               if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0)
-                       err(1, "setresgid");
-               if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0)
-                       err(1, "setresuid");
-       }
-
-       if (kill(getpid(), SIGSTOP) != 0)
-               err(1, "kill(SIGSTOP)");
-       return (0);
-}
-
-int
-sandbox_fork(const char *user)
-{
-       pid_t                    pid;
-       int                      status, devfd, fd, i;
-       struct systrace_policy   policy;
-
-       switch (pid = fork()) {
-       case -1:
-               err(1, "fork");
-       case 0:
-               return (sandbox_child(user));
-       }
-
-       /*
-        * Wait for the child to stop itself with SIGSTOP before assigning the
-        * policy, before that it might still be calling syscalls the policy
-        * would block.
-        */
-       do {
-               pid = waitpid(pid, &status, WUNTRACED);
-       } while (pid == -1 && errno == EINTR);
-       if (!WIFSTOPPED(status))
-               errx(1, "child not stopped");
-
-       devfd = open("/dev/systrace", O_RDONLY);
-       if (devfd == -1)
-               err(1, "open(\"/dev/systrace\")");
-       if (ioctl(devfd, STRIOCCLONE, &fd) == -1)
-               err(1, "ioctl(STRIOCCLONE)");
-       close(devfd);
-
-       if (ioctl(fd, STRIOCATTACH, &pid) == -1)
-               goto out;
-
-       memset(&policy, 0, sizeof policy);
-       policy.strp_op = SYSTR_POLICY_NEW;
-       policy.strp_maxents = SYS_MAXSYSCALL;
-       if (ioctl(fd, STRIOCPOLICY, &policy) == -1)
-               err(1, "ioctl(STRIOCPOLICY/NEW)");
-       policy.strp_op = SYSTR_POLICY_ASSIGN;
-       policy.strp_pid = pid;
-       if (ioctl(fd, STRIOCPOLICY, &policy) == -1)
-               err(1, "ioctl(STRIOCPOLICY/ASSIGN)");
-
-       for (i = 0; i < SYS_MAXSYSCALL; i++) {
-               policy.strp_op = SYSTR_POLICY_MODIFY;
-               policy.strp_code = i;
-               policy.strp_policy = sandbox_find(i);
-               if (ioctl(fd, STRIOCPOLICY, &policy) == -1)
-                       err(1, "ioctl(STRIOCPOLICY/MODIFY)");
-       }
-
-out:
-       if (kill(pid, SIGCONT) != 0)
-               err(1, "kill(SIGCONT)");
-       return (pid);
-}
Index: usr.bin/fmt/fmt.c
===================================================================
RCS file: /cvs/src/usr.bin/fmt/fmt.c,v
retrieving revision 1.30
diff -u -p -u -r1.30 fmt.c
--- usr.bin/fmt/fmt.c   26 Nov 2013 13:18:55 -0000      1.30
+++ usr.bin/fmt/fmt.c   4 Oct 2015 05:00:34 -0000
@@ -255,6 +255,9 @@ main(int argc, char *argv[])
 
        (void)setlocale(LC_CTYPE, "");
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /* 1. Grok parameters. */
        while ((ch = getopt(argc, argv, "0123456789cd:hl:mnpst:w:")) != -1) {
                switch (ch) {
@@ -337,6 +340,8 @@ main(int argc, char *argv[])
                while (argc-- > 0)
                        process_named_file(*argv++);
        } else {
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
                process_stream(stdin, "standard input");
        }
 
Index: usr.bin/fold/fold.c
===================================================================
RCS file: /cvs/src/usr.bin/fold/fold.c,v
retrieving revision 1.15
diff -u -p -u -r1.15 fold.c
--- usr.bin/fold/fold.c 6 Feb 2015 09:10:55 -0000       1.15
+++ usr.bin/fold/fold.c 4 Oct 2015 05:00:27 -0000
@@ -56,6 +56,9 @@ main(int argc, char *argv[])
        unsigned int width;
        const char *errstr;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        width = 0;
        lastch = '\0';
        prevoptind = 1;
@@ -99,14 +102,19 @@ main(int argc, char *argv[])
        if (width == 0)
                width = DEFLINEWIDTH;
 
-       if (!*argv)
+       if (!*argv) {
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
                fold(width);
-       else for (; *argv; ++argv)
-               if (!freopen(*argv, "r", stdin)) {
-                       err(1, "%s", *argv);
-                       /* NOTREACHED */
-               } else
-                       fold(width);
+       } else {
+               for (; *argv; ++argv) {
+                       if (!freopen(*argv, "r", stdin))
+                               err(1, "%s", *argv);
+                               /* NOTREACHED */
+                       else
+                               fold(width);
+               }
+       }
        exit(0);
 }
 
Index: usr.bin/from/from.c
===================================================================
RCS file: /cvs/src/usr.bin/from/from.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 from.c
--- usr.bin/from/from.c 3 Jun 2015 18:08:54 -0000       1.20
+++ usr.bin/from/from.c 4 Oct 2015 05:00:21 -0000
@@ -80,6 +80,8 @@ main(int argc, char *argv[])
                        exit(EXIT_SUCCESS);
                err(1, "%s", file);
        }
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
        for (newline = 1; (linelen = getline(&line, &linesize, fp)) != -1;) {
                if (*line == '\n') {
                        newline = 1;
@@ -98,6 +100,9 @@ char *
 mail_spool(char *file, const char *user)
 {
        struct passwd *pwd;
+
+       if (tame("stdio rpath getpw", NULL) == -1)
+               err(1, "tame");
 
        /*
         * We find the mailbox by:
Index: usr.bin/getopt/getopt.c
===================================================================
RCS file: /cvs/src/usr.bin/getopt/getopt.c,v
retrieving revision 1.8
diff -u -p -u -r1.8 getopt.c
--- usr.bin/getopt/getopt.c     27 Oct 2009 23:59:38 -0000      1.8
+++ usr.bin/getopt/getopt.c     28 Sep 2015 20:15:11 -0000
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <err.h>
 
 int
 main(int argc, char *argv[])
@@ -16,6 +17,9 @@ main(int argc, char *argv[])
        extern char *optarg;
        int c;
        int status = 0;
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        optind = 2;     /* Past the program name and the option letters. */
        while ((c = getopt(argc, argv, argv[1])) != -1)
Index: usr.bin/head/head.c
===================================================================
RCS file: /cvs/src/usr.bin/head/head.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 head.c
--- usr.bin/head/head.c 8 Oct 2014 08:31:53 -0000       1.18
+++ usr.bin/head/head.c 4 Oct 2015 05:00:14 -0000
@@ -55,6 +55,9 @@ main(int argc, char *argv[])
        char    *p = NULL;
        int     status = 0;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /* handle obsolete -number syntax */
        if (argc > 1 && argv[1][0] == '-' &&
            isdigit((unsigned char)argv[1][1])) {
@@ -87,6 +90,8 @@ main(int argc, char *argv[])
                        if (!firsttime)
                                exit(status);
                        fp = stdin;
+                       if (tame("stdio", NULL) == -1)
+                               err(1, "tame");
                } else {
                        if ((fp = fopen(*argv, "r")) == NULL) {
                                warn("%s", *argv++);
Index: usr.bin/hexdump/hexdump.c
===================================================================
RCS file: /cvs/src/usr.bin/hexdump/hexdump.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 hexdump.c
--- usr.bin/hexdump/hexdump.c   16 Jan 2015 06:40:08 -0000      1.17
+++ usr.bin/hexdump/hexdump.c   28 Sep 2015 20:15:11 -0000
@@ -33,6 +33,7 @@
 #include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <string.h>
 #include "hexdump.h"
 
@@ -52,6 +53,9 @@ main(int argc, char *argv[])
 {
        FS *tfs;
        char *p;
+
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
 
        if (!(p = strrchr(argv[0], 'o')) || strcmp(p, "od"))
                newsyntax(argc, &argv);
Index: usr.bin/id/id.c
===================================================================
RCS file: /cvs/src/usr.bin/id/id.c,v
retrieving revision 1.23
diff -u -p -u -r1.23 id.c
--- usr.bin/id/id.c     19 May 2015 16:03:19 -0000      1.23
+++ usr.bin/id/id.c     28 Sep 2015 20:15:11 -0000
@@ -105,6 +105,9 @@ main(int argc, char *argv[])
        argc -= optind;
        argv += optind;
 
+       if (tame("stdio getpw", NULL) == -1)
+               err(1, "tame");
+
        switch (cflag + Gflag + gflag + pflag + uflag) {
        case 1:
                break;
Index: usr.bin/indent/indent.c
===================================================================
RCS file: /cvs/src/usr.bin/indent/indent.c,v
retrieving revision 1.27
diff -u -p -u -r1.27 indent.c
--- usr.bin/indent/indent.c     20 Aug 2015 22:32:41 -0000      1.27
+++ usr.bin/indent/indent.c     28 Sep 2015 20:15:11 -0000
@@ -78,6 +78,8 @@ main(int argc, char **argv)
 
     int         last_else = 0; /* true iff last keyword was an else */
 
+    if (tame("stdio rpath wpath cpath tmppath", NULL) == -1)
+       err(1, "tame");
 
     /*-----------------------------------------------*\
     |                INITIALIZATION                  |
Index: usr.bin/infocmp/infocmp.c
===================================================================
RCS file: /cvs/src/usr.bin/infocmp/infocmp.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 infocmp.c
--- usr.bin/infocmp/infocmp.c   12 Jan 2010 23:22:13 -0000      1.20
+++ usr.bin/infocmp/infocmp.c   28 Sep 2015 20:15:11 -0000
@@ -1282,6 +1282,9 @@ main(int argc, char *argv[])
     bool init_analyze = FALSE;
     bool suppress_untranslatable = FALSE;
 
+    if (tame("stdio rpath", NULL) == -1)
+       perror("tame");
+
     /* where is the terminfo database location going to default to? */
     restdir = firstdir = 0;
 
Index: usr.bin/join/join.c
===================================================================
RCS file: /cvs/src/usr.bin/join/join.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 join.c
--- usr.bin/join/join.c 21 Jul 2015 04:42:59 -0000      1.25
+++ usr.bin/join/join.c 28 Sep 2015 20:15:11 -0000
@@ -104,6 +104,9 @@ main(int argc, char *argv[])
        int aflag, ch, cval, vflag;
        char *end;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        F1 = &input1;
        F2 = &input2;
 
Index: usr.bin/jot/jot.c
===================================================================
RCS file: /cvs/src/usr.bin/jot/jot.c,v
retrieving revision 1.24
diff -u -p -u -r1.24 jot.c
--- usr.bin/jot/jot.c   21 Jul 2015 04:04:06 -0000      1.24
+++ usr.bin/jot/jot.c   28 Sep 2015 20:15:11 -0000
@@ -84,6 +84,9 @@ main(int argc, char *argv[])
        int             ch;
        const   char    *errstr;
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "rb:w:cs:np:")) != -1)
                switch (ch) {
                case 'r':
Index: usr.bin/lam/lam.c
===================================================================
RCS file: /cvs/src/usr.bin/lam/lam.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 lam.c
--- usr.bin/lam/lam.c   16 Jan 2015 06:40:09 -0000      1.17
+++ usr.bin/lam/lam.c   28 Sep 2015 20:15:11 -0000
@@ -71,6 +71,9 @@ main(int argc, char *argv[])
 {
        int i;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /* Process arguments, set numfiles to file argument count. */
        getargs(argc, argv);
        if (numfiles == 0)
Index: usr.bin/lastcomm/lastcomm.c
===================================================================
RCS file: /cvs/src/usr.bin/lastcomm/lastcomm.c,v
retrieving revision 1.21
diff -u -p -u -r1.21 lastcomm.c
--- usr.bin/lastcomm/lastcomm.c 15 Mar 2015 00:41:28 -0000      1.21
+++ usr.bin/lastcomm/lastcomm.c 28 Sep 2015 20:15:11 -0000
@@ -69,6 +69,9 @@ main(int argc, char *argv[])
        int ch;
        char *acctfile;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        acctfile = _PATH_ACCT;
        while ((ch = getopt(argc, argv, "f:")) != -1)
                switch(ch) {
Index: usr.bin/logger/logger.c
===================================================================
RCS file: /cvs/src/usr.bin/logger/logger.c,v
retrieving revision 1.14
diff -u -p -u -r1.14 logger.c
--- usr.bin/logger/logger.c     18 Apr 2015 18:28:37 -0000      1.14
+++ usr.bin/logger/logger.c     28 Sep 2015 20:15:11 -0000
@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <ctype.h>
 #include <string.h>
+#include <err.h>
 
 #define        SYSLOG_NAMES
 #include <syslog.h>
@@ -91,6 +92,9 @@ main(int argc, char *argv[])
        /* setup for logging */
        openlog(tag ? tag : getlogin(), logflags, 0);
        (void) fclose(stdout);
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        /* log input line if appropriate */
        if (argc > 0) {
Index: usr.bin/logname/logname.c
===================================================================
RCS file: /cvs/src/usr.bin/logname/logname.c,v
retrieving revision 1.7
diff -u -p -u -r1.7 logname.c
--- usr.bin/logname/logname.c   27 Oct 2009 23:59:40 -0000      1.7
+++ usr.bin/logname/logname.c   28 Sep 2015 20:15:11 -0000
@@ -46,6 +46,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio getpw", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1)
                switch (ch) {
                case '?':
Index: usr.bin/look/look.c
===================================================================
RCS file: /cvs/src/usr.bin/look/look.c,v
retrieving revision 1.16
diff -u -p -u -r1.16 look.c
--- usr.bin/look/look.c 6 Feb 2015 23:21:59 -0000       1.16
+++ usr.bin/look/look.c 28 Sep 2015 20:15:11 -0000
@@ -88,6 +88,9 @@ main(int argc, char *argv[])
        int ch, fd, termchar;
        char *back, *file, *front, *string, *p;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        file = _PATH_WORDS;
        termchar = '\0';
        while ((ch = getopt(argc, argv, "dft:")) != -1)
Index: usr.bin/mktemp/mktemp.c
===================================================================
RCS file: /cvs/src/usr.bin/mktemp/mktemp.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 mktemp.c
--- usr.bin/mktemp/mktemp.c     6 Aug 2013 21:56:51 -0000       1.20
+++ usr.bin/mktemp/mktemp.c     28 Sep 2015 20:15:11 -0000
@@ -38,6 +38,9 @@ main(int argc, char *argv[])
        char *cp, *template, *tempfile, *prefix = _PATH_TMP;
        size_t len;
 
+       if (tame("stdio wpath cpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "dp:qtu")) != -1)
                switch(ch) {
                case 'd':
Index: usr.bin/nl/nl.c
===================================================================
RCS file: /cvs/src/usr.bin/nl/nl.c,v
retrieving revision 1.4
diff -u -p -u -r1.4 nl.c
--- usr.bin/nl/nl.c     21 Jan 2015 22:28:09 -0000      1.4
+++ usr.bin/nl/nl.c     4 Oct 2015 05:00:06 -0000
@@ -118,6 +118,9 @@ main(int argc, char *argv[])
 
        (void)setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((c = getopt(argc, argv, "pb:d:f:h:i:l:n:s:v:w:")) != -1) {
                switch (c) {
                case 'p':
@@ -204,10 +207,15 @@ main(int argc, char *argv[])
 
        switch (argc) {
        case 0:
+               /* Read from stdin. */
+               if (tame("stdio", NULL) == -1)
+                       err(1, "tame");
                break;
        case 1:
-               if (strcmp(argv[0], "-") != 0 &&
-                   freopen(argv[0], "r", stdin) == NULL)
+               if (strcmp(argv[0], "-") == 0)
+                       if (tame("stdio", NULL) == -1)
+                               err(1, "tame");
+               else if (freopen(argv[0], "r", stdin) == NULL)
                        err(EXIT_FAILURE, "%s", argv[0]);
                break;
        default:
Index: usr.bin/nm/nm.c
===================================================================
RCS file: /cvs/src/usr.bin/nm/nm.c,v
retrieving revision 1.47
diff -u -p -u -r1.47 nm.c
--- usr.bin/nm/nm.c     13 Aug 2015 19:13:28 -0000      1.47
+++ usr.bin/nm/nm.c     3 Oct 2015 04:25:11 -0000
@@ -211,6 +211,10 @@ main(int argc, char *argv[])
                    posix_radix, posix_radix);
        if (demangle)
                pipe2cppfilt();
+
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        argv += optind;
        argc -= optind;
 
Index: usr.bin/paste/paste.c
===================================================================
RCS file: /cvs/src/usr.bin/paste/paste.c,v
retrieving revision 1.19
diff -u -p -u -r1.19 paste.c
--- usr.bin/paste/paste.c       25 Nov 2014 10:20:24 -0000      1.19
+++ usr.bin/paste/paste.c       28 Sep 2015 20:15:11 -0000
@@ -57,6 +57,9 @@ main(int argc, char *argv[])
        extern int optind;
        int ch, seq;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        seq = 0;
        while ((ch = getopt(argc, argv, "d:s")) != -1) {
                switch (ch) {
Index: usr.bin/pr/pr.c
===================================================================
RCS file: /cvs/src/usr.bin/pr/pr.c,v
retrieving revision 1.36
diff -u -p -u -r1.36 pr.c
--- usr.bin/pr/pr.c     20 Aug 2015 22:32:41 -0000      1.36
+++ usr.bin/pr/pr.c     28 Sep 2015 20:15:11 -0000
@@ -140,6 +140,9 @@ main(int argc, char *argv[])
 {
     int ret_val;
 
+    if (tame("stdio rpath", NULL) == -1)
+       perror("tame");
+
     if (signal(SIGINT, SIG_IGN) != SIG_IGN)
        (void)signal(SIGINT, terminate);
     ret_val = setup(argc, argv);
Index: usr.bin/printenv/printenv.c
===================================================================
RCS file: /cvs/src/usr.bin/printenv/printenv.c,v
retrieving revision 1.6
diff -u -p -u -r1.6 printenv.c
--- usr.bin/printenv/printenv.c 27 Oct 2009 23:59:41 -0000      1.6
+++ usr.bin/printenv/printenv.c 28 Sep 2015 20:15:11 -0000
@@ -32,6 +32,8 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
 
 /*
  * printenv
@@ -45,6 +47,9 @@ main(int argc, char *argv[])
        extern char **environ;
        char *cp, **ep;
        int len;
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        if (argc < 2) {
                for (ep = environ; *ep; ep++)
Index: usr.bin/printf/printf.c
===================================================================
RCS file: /cvs/src/usr.bin/printf/printf.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 printf.c
--- usr.bin/printf/printf.c     25 May 2014 07:36:36 -0000      1.22
+++ usr.bin/printf/printf.c     28 Sep 2015 20:15:11 -0000
@@ -32,6 +32,7 @@
 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <string.h>
 #include <limits.h>
 #include <locale.h>
@@ -80,6 +81,9 @@ main(int argc, char *argv[])
        char *format;
 
        setlocale (LC_ALL, "");
+
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
 
        /* Need to accept/ignore "--" option. */
        if (argc > 1 && strcmp(argv[1], "--") == 0) {
Index: usr.bin/readlink/readlink.c
===================================================================
RCS file: /cvs/src/usr.bin/readlink/readlink.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 readlink.c
--- usr.bin/readlink/readlink.c 1 May 2009 10:36:48 -0000       1.25
+++ usr.bin/readlink/readlink.c 28 Sep 2015 20:15:11 -0000
@@ -44,6 +44,9 @@ main(int argc, char *argv[])
        int n, ch, nflag = 0, fflag = 0;
        extern int optind;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "fn")) != -1)
                switch (ch) {
                case 'f':
Index: usr.bin/rev/rev.c
===================================================================
RCS file: /cvs/src/usr.bin/rev/rev.c,v
retrieving revision 1.10
diff -u -p -u -r1.10 rev.c
--- usr.bin/rev/rev.c   27 Oct 2009 23:59:42 -0000      1.10
+++ usr.bin/rev/rev.c   28 Sep 2015 20:15:11 -0000
@@ -49,6 +49,9 @@ main(int argc, char *argv[])
        size_t len;
        int ch, rval;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1)
                switch(ch) {
                case '?':
@@ -71,6 +74,9 @@ main(int argc, char *argv[])
                                continue;
                        }
                        filename = *argv++;
+               } else {
+                       if (tame("stdio", NULL) == -1)
+                               err(1, "tame");
                }
                while ((p = fgetln(fp, &len)) != NULL) {
                        if (p[len - 1] == '\n')
Index: usr.bin/rs/rs.c
===================================================================
RCS file: /cvs/src/usr.bin/rs/rs.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 rs.c
--- usr.bin/rs/rs.c     20 Aug 2015 22:32:41 -0000      1.25
+++ usr.bin/rs/rs.c     28 Sep 2015 20:15:11 -0000
@@ -93,6 +93,9 @@ void    putfile(void);
 int
 main(int argc, char *argv[])
 {
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        getargs(argc, argv);
        getfile();
        if (flags & SHAPEONLY) {
Index: usr.bin/split/split.c
===================================================================
RCS file: /cvs/src/usr.bin/split/split.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 split.c
--- usr.bin/split/split.c       16 Jan 2015 06:40:12 -0000      1.18
+++ usr.bin/split/split.c       28 Sep 2015 20:15:11 -0000
@@ -68,6 +68,9 @@ main(int argc, char *argv[])
        char *ep, *p;
        const char *errstr;
 
+       if (tame("stdio rpath wpath cpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "0123456789a:b:l:p:-")) != -1)
                switch (ch) {
                case '0': case '1': case '2': case '3': case '4':
Index: usr.bin/stat/stat.c
===================================================================
RCS file: /cvs/src/usr.bin/stat/stat.c,v
retrieving revision 1.18
diff -u -p -u -r1.18 stat.c
--- usr.bin/stat/stat.c 26 Nov 2013 21:08:12 -0000      1.18
+++ usr.bin/stat/stat.c 28 Sep 2015 20:15:11 -0000
@@ -158,6 +158,9 @@ main(int argc, char *argv[])
        int lsF, fmtchar, usestat, fn, nonl, quiet;
        char *statfmt, *options, *synopsis;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        lsF = 0;
        fmtchar = '\0';
        usestat = 0;
Index: usr.bin/tail/tail.c
===================================================================
RCS file: /cvs/src/usr.bin/tail/tail.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 tail.c
--- usr.bin/tail/tail.c 27 Oct 2009 23:59:44 -0000      1.17
+++ usr.bin/tail/tail.c 28 Sep 2015 20:15:11 -0000
@@ -61,6 +61,9 @@ main(int argc, char *argv[])
        int ch, first;
        char *p;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        /*
         * Tail's options are weird.  First, -n10 is the same as -n-10, not
         * -n+10.  Second, the number options are 1 based and not offsets,
Index: usr.bin/tee/tee.c
===================================================================
RCS file: /cvs/src/usr.bin/tee/tee.c,v
retrieving revision 1.8
diff -u -p -u -r1.8 tee.c
--- usr.bin/tee/tee.c   23 Apr 2013 17:48:17 -0000      1.8
+++ usr.bin/tee/tee.c   28 Sep 2015 20:15:11 -0000
@@ -74,6 +74,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath wpath cpath", NULL) == -1)
+               err(1, "tame");
+
        append = 0;
        while ((ch = getopt(argc, argv, "ai")) != -1) {
                switch(ch) {
Index: usr.bin/tic/tic.c
===================================================================
RCS file: /cvs/src/usr.bin/tic/tic.c,v
retrieving revision 1.31
diff -u -p -u -r1.31 tic.c
--- usr.bin/tic/tic.c   28 Nov 2013 18:24:55 -0000      1.31
+++ usr.bin/tic/tic.c   30 Sep 2015 18:03:04 -0000
@@ -499,6 +499,9 @@ main(int argc, char *argv[])
     bool check_only = FALSE;
     bool suppress_untranslatable = FALSE;
 
+    if (tame("stdio rpath cpath", NULL) == -1)
+       perror("tame");
+
     log_fp = stderr;
 
     _nc_progname = _nc_rootname(argv[0]);
Index: usr.bin/touch/touch.c
===================================================================
RCS file: /cvs/src/usr.bin/touch/touch.c,v
retrieving revision 1.23
diff -u -p -u -r1.23 touch.c
--- usr.bin/touch/touch.c       17 Mar 2015 19:31:30 -0000      1.23
+++ usr.bin/touch/touch.c       3 Oct 2015 04:37:51 -0000
@@ -60,6 +60,9 @@ main(int argc, char *argv[])
 
        (void)setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath wpath cpath fattr", NULL) == -1)
+               err(1, "tame");
+
        aflag = cflag = mflag = timeset = 0;
        while ((ch = getopt(argc, argv, "acd:fmr:t:")) != -1)
                switch (ch) {
Index: usr.bin/tr/tr.c
===================================================================
RCS file: /cvs/src/usr.bin/tr/tr.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 tr.c
--- usr.bin/tr/tr.c     3 Jun 2014 20:57:23 -0000       1.17
+++ usr.bin/tr/tr.c     28 Sep 2015 20:15:11 -0000
@@ -87,6 +87,9 @@ main(int argc, char *argv[])
        int ch, cnt, lastch, *p;
        int cflag, dflag, sflag, isstring2;
 
+       if (tame("stdio", NULL) == -1)
+               err(1, "tame");
+
        cflag = dflag = sflag = 0;
        while ((ch = getopt(argc, argv, "Ccds")) != -1)
                switch(ch) {
Index: usr.bin/units/units.c
===================================================================
RCS file: /cvs/src/usr.bin/units/units.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 units.c
--- usr.bin/units/units.c       27 Nov 2013 00:13:24 -0000      1.20
+++ usr.bin/units/units.c       28 Sep 2015 20:15:11 -0000
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <err.h>
 
 #define UNITSFILE "/usr/share/misc/units.lib"
 
@@ -630,6 +631,9 @@ main(int argc, char **argv)
 
        extern char *optarg;
        extern int optind;
+
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
 
        while ((optchar = getopt(argc, argv, "vqf:")) != -1) {
                switch (optchar) {
Index: usr.bin/unvis/unvis.c
===================================================================
RCS file: /cvs/src/usr.bin/unvis/unvis.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 unvis.c
--- usr.bin/unvis/unvis.c       22 Jan 2014 09:45:21 -0000      1.12
+++ usr.bin/unvis/unvis.c       28 Sep 2015 20:15:11 -0000
@@ -43,6 +43,9 @@ main(int argc, char *argv[])
        FILE *fp;
        int ch;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1)
                switch(ch) {
                case '?':
Index: usr.bin/users/users.c
===================================================================
RCS file: /cvs/src/usr.bin/users/users.c,v
retrieving revision 1.11
diff -u -p -u -r1.11 users.c
--- usr.bin/users/users.c       8 Oct 2014 04:11:28 -0000       1.11
+++ usr.bin/users/users.c       28 Sep 2015 20:15:11 -0000
@@ -53,6 +53,9 @@ main(int argc, char *argv[])
        struct utmp utmp;
        int ch;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "")) != -1)
                switch(ch) {
                case '?':
Index: usr.bin/vacation/vacation.c
===================================================================
RCS file: /cvs/src/usr.bin/vacation/vacation.c,v
retrieving revision 1.37
diff -u -p -u -r1.37 vacation.c
--- usr.bin/vacation/vacation.c 20 Aug 2015 22:32:42 -0000      1.37
+++ usr.bin/vacation/vacation.c 3 Oct 2015 04:23:59 -0000
@@ -49,6 +49,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <paths.h>
+#include <err.h>
 
 /*
  *  VACATION -- return a message to the sender when on vacation.
Index: usr.bin/vis/vis.c
===================================================================
RCS file: /cvs/src/usr.bin/vis/vis.c,v
retrieving revision 1.17
diff -u -p -u -r1.17 vis.c
--- usr.bin/vis/vis.c   18 Apr 2015 18:28:38 -0000      1.17
+++ usr.bin/vis/vis.c   28 Sep 2015 20:15:11 -0000
@@ -55,6 +55,9 @@ main(int argc, char *argv[])
        FILE *fp;
        int ch;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        while ((ch = getopt(argc, argv, "anwctsobfF:ld")) != -1)
                switch(ch) {
                case 'a':
Index: usr.bin/what/what.c
===================================================================
RCS file: /cvs/src/usr.bin/what/what.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 what.c
--- usr.bin/what/what.c 22 Jan 2015 19:10:17 -0000      1.13
+++ usr.bin/what/what.c 28 Sep 2015 20:15:11 -0000
@@ -58,6 +58,9 @@ main(int argc, char *argv[])
        char match[256];
        int c;
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        matches = sflag = 0;
        while ((c = getopt(argc, argv, "s")) != -1) {
                switch (c) {
Index: usr.bin/who/who.c
===================================================================
RCS file: /cvs/src/usr.bin/who/who.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 who.c
--- usr.bin/who/who.c   22 Aug 2013 04:43:41 -0000      1.20
+++ usr.bin/who/who.c   28 Sep 2015 20:15:11 -0000
@@ -72,6 +72,9 @@ main(int argc, char *argv[])
 
        setlocale(LC_ALL, "");
 
+       if (tame("stdio rpath", NULL) == -1)
+               err(1, "tame");
+
        only_current_term = show_term = show_idle = show_labels = 0;
        show_quick = 0;
        while ((c = getopt(argc, argv, "HmqTu")) != -1) {
Index: usr.bin/yes/yes.c
===================================================================
RCS file: /cvs/src/usr.bin/yes/yes.c,v
retrieving revision 1.8
diff -u -p -u -r1.8 yes.c
--- usr.bin/yes/yes.c   27 Oct 2009 23:59:50 -0000      1.8
+++ usr.bin/yes/yes.c   28 Sep 2015 20:15:11 -0000
@@ -30,11 +30,15 @@
  * SUCH DAMAGE.
  */
 
+#include <unistd.h>
 #include <stdio.h>
 
 int
 main(int argc, char *argv[])
 {
+       if (tame("stdio", NULL) == -1)
+               perror("tame");
+
        if (argc > 1)
                for (;;)
                        puts(argv[1]);
Index: usr.sbin/bgpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
retrieving revision 1.339
diff -u -p -u -r1.339 rde.c
--- usr.sbin/bgpd/rde.c 21 Sep 2015 09:47:15 -0000      1.339
+++ usr.sbin/bgpd/rde.c 28 Sep 2015 20:15:11 -0000
@@ -30,6 +30,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <err.h>
 
 #include "bgpd.h"
 #include "mrt.h"
@@ -185,6 +186,9 @@ rde_main(int debug, int verbose)
            setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
            setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
                fatal("can't drop privileges");
+
+       if (tame("malloc unix cmsg", NULL) == -1)
+               err(1, "tame");
 
        signal(SIGTERM, rde_sighdlr);
        signal(SIGINT, rde_sighdlr);
Index: usr.sbin/bgpd/session.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/session.c,v
retrieving revision 1.340
diff -u -p -u -r1.340 session.c
--- usr.sbin/bgpd/session.c     4 Aug 2015 14:46:38 -0000       1.340
+++ usr.sbin/bgpd/session.c     28 Sep 2015 20:15:11 -0000
@@ -219,6 +219,9 @@ session_main(int debug, int verbose)
            setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
                fatal("can't drop privileges");
 
+       if (tame("malloc inet cmsg", NULL) == -1)
+               err(1, "tame");
+
        signal(SIGTERM, session_sighdlr);
        signal(SIGINT, session_sighdlr);
        signal(SIGPIPE, SIG_IGN);
Index: usr.sbin/httpd/httpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/httpd.c,v
retrieving revision 1.39
diff -u -p -u -r1.39 httpd.c
--- usr.sbin/httpd/httpd.c      20 Aug 2015 13:00:23 -0000      1.39
+++ usr.sbin/httpd/httpd.c      29 Sep 2015 09:34:57 -0000
@@ -247,6 +247,9 @@ main(int argc, char *argv[])
 
        setproctitle("parent");
 
+       if (tame("malloc inet cmsg cpath rpath wpath proc ioctl", NULL) == -1)
+               err(1, "tame");
+
        event_init();
 
        signal_set(&ps->ps_evsigint, SIGINT, parent_sig_handler, ps);
Index: usr.sbin/httpd/logger.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/logger.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 logger.c
--- usr.sbin/httpd/logger.c     20 Aug 2015 13:00:23 -0000      1.13
+++ usr.sbin/httpd/logger.c     28 Sep 2015 20:15:11 -0000
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <err.h>
 #include <fcntl.h>
 #include <imsg.h>
 
@@ -70,6 +71,9 @@ logger_shutdown(void)
 void
 logger_init(struct privsep *ps, struct privsep_proc *p, void *arg)
 {
+       if (tame("malloc cmsg", NULL) == -1)
+               err(1, "tame");
+
        if (config_init(ps->ps_env) == -1)
                fatal("failed to initialize configuration");
 
Index: usr.sbin/httpd/server.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/server.c,v
retrieving revision 1.80
diff -u -p -u -r1.80 server.c
--- usr.sbin/httpd/server.c     11 Sep 2015 13:21:09 -0000      1.80
+++ usr.sbin/httpd/server.c     3 Oct 2015 02:52:35 -0000
@@ -38,6 +38,7 @@
 #include <string.h>
 #include <syslog.h>
 #include <unistd.h>
+#include <err.h>
 #include <event.h>
 #include <imsg.h>
 #include <tls.h>
@@ -243,6 +244,15 @@ server_init(struct privsep *ps, struct p
 
        /* Unlimited file descriptors (use system limits) */
        socket_rlimit(-1);
+
+       /*
+        * XXX "inet" and "unix" are only needed for fcgi, however
+        * whether fcgi is used or not can change when the config is
+        * reloaded.  should the parent retain these abilities, but
+        * re-fork the children and properly tame them again on reload?
+        */
+       if (tame("malloc cmsg rpath proc inet unix ioctl", NULL) == -1)
+               err(1, "tame");
 
 #if 0
        /* Schedule statistics timer */
Index: usr.sbin/ntpd/ntp.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/ntp.c,v
retrieving revision 1.135
diff -u -p -u -r1.135 ntp.c
--- usr.sbin/ntpd/ntp.c 14 Aug 2015 02:00:18 -0000      1.135
+++ usr.sbin/ntpd/ntp.c 28 Sep 2015 20:15:11 -0000
@@ -30,6 +30,7 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
+#include <err.h>
 #include <tls.h>
 
 #include "ntpd.h"
@@ -164,6 +165,10 @@ ntp_main(int pipe_prnt[2], int fd_ctl, s
                fatal("can't drop privileges");
 
        endservent();
+
+       /* XXX "dns" for constraint.c, which is forked off wrong parent? */
+       if (tame("stdio inet dns proc", NULL) == -1)
+               err(1, "tame");
 
        signal(SIGTERM, ntp_sighdlr);
        signal(SIGINT, ntp_sighdlr);
Index: usr.sbin/ntpd/ntpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/ntpd.c,v
retrieving revision 1.95
diff -u -p -u -r1.95 ntpd.c
--- usr.sbin/ntpd/ntpd.c        3 Oct 2015 02:47:15 -0000       1.95
+++ usr.sbin/ntpd/ntpd.c        3 Oct 2015 02:47:28 -0000
@@ -196,6 +196,10 @@ main(int argc, char *argv[])
        setproctitle("[priv]");
        readfreq();
 
+//     XXX missing: adjtime() to change time
+//     if (tame("stdio unix proc", NULL) == -1)
+//             err(1, "tame");
+
        signal(SIGTERM, sighdlr);
        signal(SIGINT, sighdlr);
        signal(SIGHUP, sighdlr);
Index: usr.sbin/portmap/portmap.c
===================================================================
RCS file: /cvs/src/usr.sbin/portmap/portmap.c,v
retrieving revision 1.45
diff -u -p -u -r1.45 portmap.c
--- usr.sbin/portmap/portmap.c  13 Sep 2015 15:44:47 -0000      1.45
+++ usr.sbin/portmap/portmap.c  4 Oct 2015 01:00:35 -0000
@@ -246,6 +246,9 @@ main(int argc, char *argv[])
        }
        endpwent();
 
+       if (tame("stdio rpath inet proc", NULL) == -1)
+               err(1, "tame");
+
        if (svc_register(xprt, PMAPPROG, PMAPVERS, reg_service, FALSE) == 0) {
                syslog(LOG_ERR, "svc_register failed.");
                exit(1);
@@ -604,6 +607,10 @@ callit(struct svc_req *rqstp, SVCXPRT *x
                            a.rmt_prog);
                return;
        }
+
+       if (tame("stdio rpath inet", NULL) == -1)
+               err(1, "tame");
+
        port = pml->pml_map.pm_port;
        get_myaddress(&me);
        me.sin_port = htons(port);
Index: usr.sbin/relayd/ca.c
===================================================================
RCS file: /cvs/src/usr.sbin/relayd/ca.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 ca.c
--- usr.sbin/relayd/ca.c        2 May 2015 13:15:24 -0000       1.13
+++ usr.sbin/relayd/ca.c        28 Sep 2015 20:15:11 -0000
@@ -23,6 +23,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
+#include <err.h>
 #include <imsg.h>
 
 #include <openssl/bio.h>
@@ -73,6 +74,9 @@ ca(struct privsep *ps, struct privsep_pr
 void
 ca_init(struct privsep *ps, struct privsep_proc *p, void *arg)
 {
+       if (tame("malloc rw cmsg", NULL) == -1)
+               err(1, "tame");
+
        if (config_init(ps->ps_env) == -1)
                fatal("failed to initialize configuration");
 
Index: usr.sbin/syslogd/syslogd.c
===================================================================
RCS file: /cvs/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.190
diff -u -p -u -r1.190 syslogd.c
--- usr.sbin/syslogd/syslogd.c  29 Sep 2015 03:19:23 -0000      1.190
+++ usr.sbin/syslogd/syslogd.c  29 Sep 2015 03:42:24 -0000
@@ -593,6 +593,9 @@ main(int argc, char *argv[])
        if (priv_init(ConfFile, NoDNS, lockpipe[1], nullfd, argv) < 0)
                errx(1, "unable to privsep");
 
+       if (tame("malloc rpath unix inet cmsg", NULL) == -1)
+               err(1, "tame");
+
        /* Process is now unprivileged and inside a chroot */
        event_init();
 

Reply via email to