clear whitelisted-paths view in pledge.
authorsemarie <semarie@openbsd.org>
Tue, 20 Oct 2015 06:40:00 +0000 (06:40 +0000)
committersemarie <semarie@openbsd.org>
Tue, 20 Oct 2015 06:40:00 +0000 (06:40 +0000)
commit9edc603d532065ffbf5fbddc3275fc67c61646cb
treeec322fe263c988a3e1ed0f061443b0f45f377412
parent363922450dc79a3eeaf78dbbeda4a178b86fa052
clear whitelisted-paths view in pledge.

the following diff adds a clear view of whitelisted-paths in pledge.

before, whitelisting "/usr/local/bin" path would make only "/usr/local/bin"
VNODE was present and let "/usr/local", "/usr", and "/" been ENOENT. It was a
somehow odd filesystem hierarchy, and it breaks realpath(3).

with this diff, the directories that are one of the parents of a
whitelisted-directory become visible to stat(2) related syscalls, but only
with restricted permissions: stat(2) will lie a bit, and saying they owned by
root:wheel and mode is --x--x--x. Note that only stat(2) is affected by this
"view", and the owner/mode aren't effectively changed: it is just a "lie".

while here, refactor a bit pledge_namei() in order to avoid multiple for-loop
on whitelisted-path array.

ok deraadt@
sys/kern/kern_pledge.c
sys/kern/vfs_syscalls.c
sys/sys/proc.h