nm(1) was tamed shortly before the "exec" promise was introduced. The
"proc exec" is necessary to cover `nm -C' which fork-exec's c++filt(1).
Right after potential fork-exec, the original pledge "stdio rpath" is
given (one could make that last pledge call in the file conditional on
`issize' so that size only pledges once, but that complication doesn't
seem to be worth it).
Index: usr.bin/nm/nm.c
===================================================================
RCS file: /cvs/src/usr.bin/nm/nm.c,v
retrieving revision 1.49
diff -u -p -r1.49 nm.c
--- usr.bin/nm/nm.c 9 Oct 2015 01:37:08 -0000 1.49
+++ usr.bin/nm/nm.c 13 Nov 2015 13:38:20 -0000
@@ -135,10 +135,16 @@ main(int argc, char *argv[])
const struct option *lopts;
int ch, eval;
+ if (pledge("stdio rpath proc exec", NULL) == -1)
+ err(1, "pledge");
+
optstr = OPTSTRING_NM;
lopts = longopts_nm;
if (!strcmp(__progname, "size")) {
- issize++;
+ if (pledge("stdio rpath", NULL) == -1)
+ err(1, "pledge");
+
+ issize = 1;
optstr = "tw";
lopts = NULL;
}