summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsemarie <semarie@openbsd.org>2015-10-28 13:36:38 +0000
committersemarie <semarie@openbsd.org>2015-10-28 13:36:38 +0000
commitea999a5d50fc89b94016083cb9aecbae59d2399f (patch)
tree04e5ca14023f470c5bfdba5434646cc2350ef3f7
parentSupport backspace in softraid boot passphrase prompt. (diff)
downloadwireguard-openbsd-ea999a5d50fc89b94016083cb9aecbae59d2399f.tar.xz
wireguard-openbsd-ea999a5d50fc89b94016083cb9aecbae59d2399f.zip
in pledge_namei(), move PLEDGE_EXEC check sooner: it doesn't depend of path
processing.
-rw-r--r--sys/kern/kern_pledge.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_pledge.c b/sys/kern/kern_pledge.c
index 659fdd7deda..add2926b8cb 100644
--- a/sys/kern/kern_pledge.c
+++ b/sys/kern/kern_pledge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_pledge.c,v 1.84 2015/10/28 12:17:20 deraadt Exp $ */
+/* $OpenBSD: kern_pledge.c,v 1.85 2015/10/28 13:36:38 semarie Exp $ */
/*
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
@@ -541,6 +541,11 @@ pledge_namei(struct proc *p, char *origpath)
if (p->p_pledgenote == PLEDGE_COREDUMP)
return (0); /* Allow a coredump */
+ /* Doing a permitted execve() */
+ if ((p->p_pledgenote & PLEDGE_EXEC) &&
+ (p->p_p->ps_pledge & PLEDGE_EXEC))
+ return (0);
+
error = canonpath(origpath, path, sizeof(path));
if (error)
return (pledge_fail(p, error, p->p_pledgenote));
@@ -573,11 +578,6 @@ pledge_namei(struct proc *p, char *origpath)
((p->p_p->ps_pledge & PLEDGE_CPATH) == 0))
return (pledge_fail(p, EPERM, PLEDGE_CPATH));
- /* Doing a permitted execve() */
- if ((p->p_pledgenote & PLEDGE_EXEC) &&
- (p->p_p->ps_pledge & PLEDGE_EXEC))
- return (0);
-
/* Whitelisted read/write paths */
switch (p->p_pledge_syscall) {
case SYS_open: