deraadt [Mon, 12 Oct 2015 02:02:00 +0000 (02:02 +0000)]
pledge to only use "stdio rpath"; rpath is for readig the wtmp files.
ok doug
deraadt [Mon, 12 Oct 2015 02:01:15 +0000 (02:01 +0000)]
tunefs can pledge to only use "stdio", after it has opened the device.
ok doug
deraadt [Mon, 12 Oct 2015 01:43:52 +0000 (01:43 +0000)]
pledge "stdio" right after opening the device. The remainder is
is just read, write, fsync, and close.
ok doug
deraadt [Mon, 12 Oct 2015 01:40:09 +0000 (01:40 +0000)]
pledge() "stdio" includes trusting open&read of the root-owned timezone
databases located at system paths (a reasonable bar had to be chosen; in
the future we can replace the interfaces, since this effort is identifying
them and placing their paths in a visble place), so this program only
needs "stdio"
ok doug
schwarze [Mon, 12 Oct 2015 01:17:08 +0000 (01:17 +0000)]
make description of ERRORS more complete;
diff from Benny Lofgren <bl dash lists at lofgren dot biz>;
ok nicm@
schwarze [Mon, 12 Oct 2015 00:49:34 +0000 (00:49 +0000)]
remove useless quoting from .Fo arguments; forgotten diff found in my tree
schwarze [Mon, 12 Oct 2015 00:32:37 +0000 (00:32 +0000)]
Clear dform and dsec when exiting a first-level directory in treescan().
Fixes a segfault reported by bentley@.
While here, do some style cleanup in the same function.
schwarze [Mon, 12 Oct 2015 00:14:41 +0000 (00:14 +0000)]
Fix an obvious bug found during the /* FALLTHROUGH */ cleanup:
ASCII_NBRSP has to be rendered as " ", not "-".
schwarze [Mon, 12 Oct 2015 00:07:27 +0000 (00:07 +0000)]
To make the code more readable, delete 283 /* FALLTHROUGH */ comments
that were right between two adjacent case statement. Keep only
those 24 where the first case actually executes some code before
falling through to the next case.
bluhm [Sun, 11 Oct 2015 23:51:26 +0000 (23:51 +0000)]
Pass unsigned char to isdigit(3).
From Michael McConville; OK guenther@
deraadt [Sun, 11 Oct 2015 23:29:56 +0000 (23:29 +0000)]
fix regression: ttyname() failure not handled right
deraadt [Sun, 11 Oct 2015 23:13:02 +0000 (23:13 +0000)]
pledge_ioctl_check() will do the killing if neccessary; if it returns,
that is an errno to pass up to the calling system call instead. test
case is "who < /dev/null", via ttyname().
espie [Sun, 11 Oct 2015 23:01:32 +0000 (23:01 +0000)]
now that tsort has a clean structure, do more specific pledge() calls.
okay deraadt@
schwarze [Sun, 11 Oct 2015 21:59:48 +0000 (21:59 +0000)]
Drop tags containing a blank character:
They don't work, they break other tags in weird ways, and even
if they could be made to work, they would be mostly useless.
Issue reported by naddy@, thanks.
schwarze [Sun, 11 Oct 2015 21:30:02 +0000 (21:30 +0000)]
Do not insert whitespace into syntax displays, it's just confusing,
except at the one place where it is indeed helpful.
Add some missing .Cm macros.
Remove some useless escaping, one needless .Xo, and an empty .No.
Triggered by a much smaller patch from guenther@.
OK jmc@ guenther@
schwarze [Sun, 11 Oct 2015 21:23:24 +0000 (21:23 +0000)]
Fix empty .No macros, use .Pf to prefix delimiters to macros.
Based on a patch from guenther@, tweaked by me.
OK jmc@ guenther@
deraadt [Sun, 11 Oct 2015 21:23:15 +0000 (21:23 +0000)]
-version options on commands like this make no sense; the version number
makes no promises about compatibility nor the lack of compatibility.
suggestion & diff from micheal reed
schwarze [Sun, 11 Oct 2015 21:06:59 +0000 (21:06 +0000)]
Finally use __progname, err(3) and warn(3).
That's more readable and less error-prone than fumbling around
with argv[0], fprintf(3), strerror(3), perror(3), and exit(3).
It also shortens the code by 50 lines.
It's a bad idea to boycott good interfaces merely because standards
committees ignore them. Instead, it's the job of the portable
distribution to provide compatibility modules for archaic systems
(like commercial Solaris) that still don't have them. Actually,
the compat code for the portable distribution already exists and
will be committed right after this.
guenther [Sun, 11 Oct 2015 20:23:49 +0000 (20:23 +0000)]
Userspace doesn't need to use SUN_LEN(): connect() and bind() must accept
sizeof(struct sockaddr_un), so do the simple, portable thing.
Also convert some strncpy() to strlcpy()
ok deraadt@
guenther [Sun, 11 Oct 2015 20:17:49 +0000 (20:17 +0000)]
Don't return errno from main()
ok beck@ doug@ deraadt@ tedu@
sthen [Sun, 11 Oct 2015 19:53:57 +0000 (19:53 +0000)]
Handle the blackhole well-known community in bgpctl as well (print it
symbolically, and don't deny its use in 'bgpctl sh rib comm 65535:6666').
ok phessler@
phessler [Sun, 11 Oct 2015 19:30:12 +0000 (19:30 +0000)]
standardize a community that has been independently created by nearly
every single AS on the planet: the blackhole
OK benno@, claudio@, sthen@
phessler [Sun, 11 Oct 2015 19:25:06 +0000 (19:25 +0000)]
some peers are following an expired draft RFC and are sending "unknown"
error codes to OPEN messages. make them "known", and show them.
OK benno@, claudio@, sthen@
phessler [Sun, 11 Oct 2015 19:21:44 +0000 (19:21 +0000)]
add "best" as an alias for "selected"
Helps finger memory for people used to Junipers
OK benno@, claudio@
doug [Sun, 11 Oct 2015 19:00:40 +0000 (19:00 +0000)]
Pledge that ncheck_ffs only uses "stdio" after opening the device.
ok deraadt@
schwarze [Sun, 11 Oct 2015 18:56:08 +0000 (18:56 +0000)]
Mention that the first argument of .Pf does not need escaping.
While here, make the first sentence regarding .Pf more concise.
OK jmc@
semarie [Sun, 11 Oct 2015 17:43:03 +0000 (17:43 +0000)]
with the RPATH enforcement, csplit(1) don't work anymore on stdin...
the newfile() function used for create files open files in "w+"
(O_RDWR), and may occasionally do reading on the file (function
toomuch()).
ok deraadt@
espie [Sun, 11 Oct 2015 17:39:50 +0000 (17:39 +0000)]
reorg code to have an array with all the files used apparent.
okay millert@
semarie [Sun, 11 Oct 2015 16:19:48 +0000 (16:19 +0000)]
add a missed check for PLEDGE_RPATH when reading a file.
ok deraadt@
deraadt [Sun, 11 Oct 2015 16:01:06 +0000 (16:01 +0000)]
sigaltstack is directly used by setjmp on some architectures. it only
refers to the process itself. pledge should allow it.
deraadt [Sun, 11 Oct 2015 15:40:48 +0000 (15:40 +0000)]
put TIOCSWINSZ in the right block "tty", not in "ioctl". this happened
because the "route' tests were placed between the two, creating
confusion. fix that while here.
deraadt [Sun, 11 Oct 2015 15:36:58 +0000 (15:36 +0000)]
needs at least some include love; choosing <stdlib.h>
deraadt [Sun, 11 Oct 2015 15:27:19 +0000 (15:27 +0000)]
pledge "stdio tty" works once the kernel allows TIOCGWINSZ. Do the pledge
after TIOCGETD, which the kernel is unlikely to support (does not feel like
a good idea for a program to switch line disc, and therefor not worth allowing
the program to ask either)
deraadt [Sun, 11 Oct 2015 15:25:39 +0000 (15:25 +0000)]
In pledge "tty", allow TIOCSWINSZ. stty(1) is the obvious silly use.
The more important use will be tmux(1) and other active window size
controlling programs. There seems little risk in exposing this small
tty setting alongside the tcsetattr() family.
ok millert
sunil [Sun, 11 Oct 2015 12:50:00 +0000 (12:50 +0000)]
Convert some fgetln to getline.
Ok gilles@, giovanni@, millert@
sunil [Sun, 11 Oct 2015 12:09:06 +0000 (12:09 +0000)]
Convert some fgetln to getline.
Suggestion and ok millert@, ok gilles@, eric@
jasper [Sun, 11 Oct 2015 11:48:46 +0000 (11:48 +0000)]
handle comma separated list of arguments, i.e. pkg-config --exists gcr-3,gcr-base-3
jasper [Sun, 11 Oct 2015 11:47:21 +0000 (11:47 +0000)]
add variation on existing --exists tests; separated by spaces
stsp [Sun, 11 Oct 2015 10:22:28 +0000 (10:22 +0000)]
Add a symbolic name for the special '-1' value of iwm's sc_wantresp.
ok phessler
guenther [Sun, 11 Oct 2015 09:51:26 +0000 (09:51 +0000)]
Document that execve(2) resets SIGCHLD to SIG_DFL
wordsmithing and ok jmc@
guenther [Sun, 11 Oct 2015 07:53:49 +0000 (07:53 +0000)]
Prefer .Fa over .Em for struct members
ok jmc@
guenther [Sun, 11 Oct 2015 07:32:06 +0000 (07:32 +0000)]
Simplify and lock down priv_open():
* kill the 'mode' argument
* fail if passed any flags other than O_ACCMODE OR O_NONBLOCK
* paranoia: mask O_CREAT when calling open() with only two arguments
* instead of using ioctl(FIONBIO) after the fact, pass O_NONBLOCK to
priv_open()
"good start" deraadt@
ok yasuoka@
guenther [Sun, 11 Oct 2015 07:25:11 +0000 (07:25 +0000)]
Document that bind(2) and connect(2) ignore the incoming sa_len
suggest by and ok deraadt@
wordsmithing jmc@
guenther [Sun, 11 Oct 2015 07:16:01 +0000 (07:16 +0000)]
YYSTYPE.number is int64_t, so format with <inttypes.h>'s PRId64
ok yasuoka@
deraadt [Sun, 11 Oct 2015 04:37:23 +0000 (04:37 +0000)]
After the filesystem is opened, pledge "stdio"
ok doug
deraadt [Sun, 11 Oct 2015 04:36:22 +0000 (04:36 +0000)]
If only displaying the disklabel (the normal thing to do against potentially
unknown disks...), after opening & reading the disklabel, pledge "stdio"
ok doug
deraadt [Sun, 11 Oct 2015 04:33:17 +0000 (04:33 +0000)]
After the disk is opened, this can pledge "stdio".
ok doug
guenther [Sun, 11 Oct 2015 03:23:28 +0000 (03:23 +0000)]
The <ctype.h> is*() interfaces expect EOF or an unsigned char; cast to
(unsigned char) as required
found by Michael McConville (mmcconv1 (at) sccs.swarthmore.edu) w/Coccinelle
daniel [Sun, 11 Oct 2015 03:08:46 +0000 (03:08 +0000)]
Don't allow "rm -rf /"
Patch from Theo Buehler who was inspired by watching Bryan Cantrill
in BSD Now 103.
Minor tweak from me to turn the complained variables into flags instead
of counters.
"i think it's ok" tedu@
"this isn't 1980 anymore" deraadt@
ok millert@
deraadt [Sun, 11 Oct 2015 03:08:20 +0000 (03:08 +0000)]
fix a regression spotted by chris@. the -f and -I arguments fetch process
arguments using kvm_getargs, after the pledge() has been made. someone
brave should refactor this, hoisting the argument fetching to between
kvm_getprocs() and pledge() - storing the argument data as neccessary.
the current situation is also a race -- it fetches the data twice.
guenther [Sun, 11 Oct 2015 01:56:56 +0000 (01:56 +0000)]
__get_tcb() is needed for errno access in threaded programs on some archs.
Make it always available.
ok deraadt@
guenther [Sun, 11 Oct 2015 01:53:39 +0000 (01:53 +0000)]
Always set the timeout at least one tick in the future for EVFILT_TIMER
to avoid looping in softclock()
based on diff by sthen@
ok sthen@
guenther [Sun, 11 Oct 2015 00:26:23 +0000 (00:26 +0000)]
Userspace doesn't need to use SUN_LEN(): connect() and bind() must accept
sizeof(struct sockaddr_un), so do the simple, portable thing
ok beck@ deraadt@
guenther [Sun, 11 Oct 2015 00:20:29 +0000 (00:20 +0000)]
Prefer dprintf() over snprintf()+write()
ok beck@ deraadt@
guenther [Sun, 11 Oct 2015 00:13:39 +0000 (00:13 +0000)]
Use correct terminology
guenther [Sun, 11 Oct 2015 00:12:38 +0000 (00:12 +0000)]
Document support for CPU power states
guenther [Sat, 10 Oct 2015 23:06:32 +0000 (23:06 +0000)]
Convert FIONBIO to SOCK_NONBLOCK
ok dlg@
doug [Sat, 10 Oct 2015 22:36:46 +0000 (22:36 +0000)]
Pledge that ln only needs "stdio rpath cpath".
ok deraadt@
deraadt [Sat, 10 Oct 2015 22:36:06 +0000 (22:36 +0000)]
pflogd contained the same "privsep error" as tcpdump -- assuming that
it can ioctl()'s against a bpf device node. Privsep that operation
via a message to the parent process. Unfortunately "rpath wpath cpath"
is still needed due to SIGHUP handling, but I have asked canacar the
expert to look into this.
doug [Sat, 10 Oct 2015 22:32:55 +0000 (22:32 +0000)]
Pledge that arithmetic only takes "stdio".
doug [Sat, 10 Oct 2015 22:28:51 +0000 (22:28 +0000)]
Initial support for pledges in openssl(1) commands.
openssl(1) has two mechanisms for operating: either a single execution
of one command (looking at argv[0] or argv[1]) or as an interactive
session than may execute any number of commands.
We already have a top level pledge that should cover all commands
and that's what interactive mode must continue using. However, we can
tighten up the pledges when only executing one command.
This is an initial stab at support and may contain regressions. Most
commands only need "stdio rpath wpath cpath". The pledges could be
further restricted by evaluating the situation after parsing options.
deraadt@ and beck@ are roughly fine with this approach.
deraadt [Sat, 10 Oct 2015 22:21:39 +0000 (22:21 +0000)]
pledge "stdio rpath wpath cpath fattr inet" after chroot and such
appears to be good enough for the main loop processing.
deraadt [Sat, 10 Oct 2015 22:11:37 +0000 (22:11 +0000)]
pledge "stdio route"; untested. this has the if_nametoindex() problem as
other *ctl programs using their daemon's log.c, and thus requires "route"
for now. we hope to solve that issue soon.
nicm [Sat, 10 Oct 2015 22:09:23 +0000 (22:09 +0000)]
Add a define for the invalid state, from mksh via Michael McConville.
ok millert
deraadt [Sat, 10 Oct 2015 22:06:41 +0000 (22:06 +0000)]
another pledge argument reorder for sake of re-audit
doug [Sat, 10 Oct 2015 21:50:05 +0000 (21:50 +0000)]
Fix YP user and group support in getent(1).
These should have been "stdio getpw" before, but they worked for non-YP
environments. With YP, it won't work without "getpw".
Reported by semarie@ and confirmed as a problem by miod@.
ok deraadt@
deraadt [Sat, 10 Oct 2015 21:29:59 +0000 (21:29 +0000)]
pledge "stdio rpath wpath cpath"
ok doug
deraadt [Sat, 10 Oct 2015 21:19:14 +0000 (21:19 +0000)]
env(1) is obviously a program falling into pledge "stdio exec". It
does stdio, and it does a raw execve(). It is so obvious. It gets
only _exit(2), kbind(2), and 46 system calls -- over half of which
are deeply gutted in their functionality to only serve narrow libc
needs for "stdio (includes malloc)". the other 161 system calls kill it.
doug [Sat, 10 Oct 2015 21:15:25 +0000 (21:15 +0000)]
Kill pledges to only use "stdio proc".
deraadt@ notes that kill now works because of improved kernel semantics.
For full kill(1) functionality, you need the new kern_sig functionality.
Make sure you have an updated kernel.
ok deraadt@
deraadt [Sat, 10 Oct 2015 21:08:09 +0000 (21:08 +0000)]
pledge "stdio inet rpath" seems to be enough for a YP environment.
rpath is to access /etc/rpc, and inet to talk to portmap & local world.
ok beck
deraadt [Sat, 10 Oct 2015 20:57:00 +0000 (20:57 +0000)]
pledge "stdio rpath wpath cpath proc exec"; this spawns cpp.
ok doug
tobias [Sat, 10 Oct 2015 20:36:20 +0000 (20:36 +0000)]
Added missing curly bracket into LIST_EMPTY example.
ok deraadt@, otto@
deraadt [Sat, 10 Oct 2015 20:35:00 +0000 (20:35 +0000)]
normalize a few more tame request orderings, to help review
deraadt [Sat, 10 Oct 2015 20:18:30 +0000 (20:18 +0000)]
normalize the ordering of tame requests (particularily, "rpath wpath cpath",
which i have put in that order). this is not important, but helps look
for outliers which might be strange. it hints that "ioctl" should be
reassessed in a few places, to see if "tty" is better; that "unix" may
be used in some places where "route" could now work.
deraadt [Sat, 10 Oct 2015 20:10:14 +0000 (20:10 +0000)]
pledge "dns rw" is not a reliable pattern. This means malloc() and other
types of functions (perhaps required by 'stdio' or 'libevent' will not
become available unless DNS suceeds. Replace it with "stdio dns".
doug [Sat, 10 Oct 2015 20:04:28 +0000 (20:04 +0000)]
Add pledge support in awk and make awk -safe actually safe.
awk -safe was introduced back in 1997 to stop awk from doing file output,
execute commands or access the environment. The lexer rejected programs
when it saw awk commands that would write, exec or env. Beyond that,
it wasn't safe from write/exec/env during program execution.
With pledge "stdio rpath", the kernel is now enforcing the awk -safe
mode restrictions at runtime (other than env).
Based on a diff by deraadt@
ok deraadt@ beck@
deraadt [Sat, 10 Oct 2015 19:28:54 +0000 (19:28 +0000)]
Rather than invoking fork/execve of dc(1) on a pipe, compile in the dc(1)
code directly and use it as a subfunction. This refactoring allows use of
pledge "stdio rpath proc tty" in the main bc(1) process before fork, pledge
"stdio rpath tty" after fork, and fully reduced to "stdio" in the dc(1)
child.
This requires two recent to the kernel code (allowing sigsuspend(),
and kill() self as pid 0).
ok otto
deraadt [Sat, 10 Oct 2015 19:19:46 +0000 (19:19 +0000)]
since kdump may getprotobynumber() late, do not drop "rpath". We could
potentially modify pledge() to permit /etc/protocols (/etc/rpc?
/etc/services? etc) without requiring a rpath attribute.. but where would
we draw the line for what /etc files libc functions need? At present, we
draw that line closer to the minimum.
issue found by theo@math.ethz.ch
deraadt [Sat, 10 Oct 2015 19:15:53 +0000 (19:15 +0000)]
For pledge, sigsuspend() should is affecting the behaviour a process itself,
so we should allow it for 'self'.
ok djm
deraadt [Sat, 10 Oct 2015 19:12:39 +0000 (19:12 +0000)]
pid 0 also implies self, so allow that for the pledge case. Found in
a refactoring being done for the bc/dc relationship with otto.
deraadt [Sat, 10 Oct 2015 19:11:04 +0000 (19:11 +0000)]
pledge "stdio rpath wpath cpath"
ok doug
deraadt [Sat, 10 Oct 2015 19:10:20 +0000 (19:10 +0000)]
pledge "stdio getpw rpath wpath cpath tmppath proc exec". doug pointed out
the need for getpw. Not sure if I see ways to improve this program.
ok doug
stsp [Sat, 10 Oct 2015 19:04:57 +0000 (19:04 +0000)]
In iwm(4), set mbuf pointers to NULL after freeing mbufs.
ok phessler mpi zhuk
deraadt [Sat, 10 Oct 2015 19:03:08 +0000 (19:03 +0000)]
pledge "stdio rpath wpath cpath proc exec". there is some potential
for dropping some path attributes in between, but i will let someone
else do that.
ok doug
deraadt [Sat, 10 Oct 2015 19:02:19 +0000 (19:02 +0000)]
pledge "stdio rpath"
ok beck doug
deraadt [Sat, 10 Oct 2015 18:58:53 +0000 (18:58 +0000)]
pledge "stdio getpw rpath wpath cpath fattr". doug pointed out getpw*
use, and fattr for chmod.
doug
doug [Sat, 10 Oct 2015 18:14:20 +0000 (18:14 +0000)]
encrypt(1) also needs to pledge "wpath" for getpass().
getpass() opens /dev/tty RW so it can write the prompt.
ok deraadt@
deraadt [Sat, 10 Oct 2015 17:59:15 +0000 (17:59 +0000)]
pledge "stdio rpath tty". rpath for the configuration reading done by
login* subsystem, tty for readpassphase()
ok beck
deraadt [Sat, 10 Oct 2015 17:48:34 +0000 (17:48 +0000)]
pledge "stdio proc exec" works.
ok doug
deraadt [Sat, 10 Oct 2015 16:35:08 +0000 (16:35 +0000)]
shuffle #ifdef TIOCSTI block to avoid a future /*FALLTHROUGH*/ mistake.
deraadt [Sat, 10 Oct 2015 16:15:03 +0000 (16:15 +0000)]
plege "stdio rpath tty". "tty" is for the curses code lurking in the
background.
ok doug
deraadt [Sat, 10 Oct 2015 15:52:30 +0000 (15:52 +0000)]
pledge "stdio rpath proc exec". proc & exec because obviously it
spawns subprocesses. rpath is only needed for the -o (open /dev/tty)
or no -o (open /dev/null) choice.
ok beck
deraadt [Sat, 10 Oct 2015 15:47:22 +0000 (15:47 +0000)]
basic pledge "stdio rpath"
ok doug
millert [Sat, 10 Oct 2015 15:31:00 +0000 (15:31 +0000)]
Replace calls to x_emacs_putbuf() with x_do_ins() since all
x_emacs_putbuf() does is call x_do_ins().
From mksh via Michael McConville
deraadt [Sat, 10 Oct 2015 15:08:49 +0000 (15:08 +0000)]
pledge "stdio rpath" seems to work; ok doug
deraadt [Sat, 10 Oct 2015 14:49:23 +0000 (14:49 +0000)]
pledge "stdio proc exec". relies on two recent kernel fixes.
deraadt [Sat, 10 Oct 2015 14:48:03 +0000 (14:48 +0000)]
allow sysctl of kern.clockrate
deraadt [Sat, 10 Oct 2015 14:46:15 +0000 (14:46 +0000)]
I forgot execve would go through the namei codepath, so a program marked
"stdio rpath" this would fail to execve. pre-indicate exec actions to the
namei checker to allow them through.
ok semarie
deraadt [Sat, 10 Oct 2015 14:33:02 +0000 (14:33 +0000)]
must also pledge "getpw", because it will use getpw* and getgr* functions.
discussed with doug and semarie
deraadt [Sat, 10 Oct 2015 14:29:05 +0000 (14:29 +0000)]
pledge "stdio rpath route" seems to be working. route is needed for
pretty printing some addresses.