summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--regress/sys/kern/tame/generic/main.c4
-rw-r--r--regress/sys/kern/tame/generic/tests.out8
-rw-r--r--sys/kern/kern_tame.c5
3 files changed, 12 insertions, 5 deletions
diff --git a/regress/sys/kern/tame/generic/main.c b/regress/sys/kern/tame/generic/main.c
index 799e083f86c..adc19156c75 100644
--- a/regress/sys/kern/tame/generic/main.c
+++ b/regress/sys/kern/tame/generic/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.6 2015/09/27 17:55:39 semarie Exp $ */
+/* $OpenBSD: main.c,v 1.7 2015/09/28 15:40:18 semarie Exp $ */
/*
* Copyright (c) 2015 Sebastien Marie <semarie@openbsd.org>
*
@@ -234,7 +234,7 @@ main(int argc, char *argv[])
*/
start_test(&ret, "stdio rpath", NULL, test_wpaths);
start_test1(&ret, "stdio rpath", NULL, test_wpaths);
- // XXX start_test1(&ret, "stdio rpath", "/", test_wpaths);
+ start_test1(&ret, "stdio rpath", "/", test_wpaths);
start_test1(&ret, "stdio rpath", "/etc", test_wpaths);
start_test1(&ret, "stdio rpath", "/etc/", test_wpaths);
start_test1(&ret, "stdio rpath", "/etc/passwd", test_wpaths);
diff --git a/regress/sys/kern/tame/generic/tests.out b/regress/sys/kern/tame/generic/tests.out
index bdcb16316e6..3b55f50f421 100644
--- a/regress/sys/kern/tame/generic/tests.out
+++ b/regress/sys/kern/tame/generic/tests.out
@@ -1,4 +1,4 @@
-# $OpenBSD: tests.out,v 1.5 2015/09/27 17:55:39 semarie Exp $
+# $OpenBSD: tests.out,v 1.6 2015/09/28 15:40:18 semarie Exp $
test(test_nop): tame=("",NULL) status=0 exit=0
test(test_inet): tame=("",NULL) status=9 signal=9 tamed_syscall=97
test(test_inet): tame=("abort",NULL) status=134 signal=6 coredump=present tamed_syscall=97
@@ -33,6 +33,12 @@ test(test_wpaths): tame=("stdio rpath",{NULL})
open_close("../../../../../../../../../../../../../../../etc/passwd") fd=-1 errno=2
open_close("/nonexistent") fd=-1 errno=2
status=0 exit=0
+test(test_wpaths): tame=("stdio rpath",{"/",NULL})
+ open_close("/etc/passwd") fd=3 errno=0
+ open_close("generic") fd=3 errno=0
+ open_close("../../../../../../../../../../../../../../../etc/passwd") fd=3 errno=0
+ open_close("/nonexistent") fd=-1 errno=2
+ status=0 exit=0
test(test_wpaths): tame=("stdio rpath",{"/etc",NULL})
open_close("/etc/passwd") fd=3 errno=0
open_close("generic") fd=-1 errno=2
diff --git a/sys/kern/kern_tame.c b/sys/kern/kern_tame.c
index bdce41a5d9e..3ed3ff74661 100644
--- a/sys/kern/kern_tame.c
+++ b/sys/kern/kern_tame.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_tame.c,v 1.42 2015/09/19 20:39:06 semarie Exp $ */
+/* $OpenBSD: kern_tame.c,v 1.43 2015/09/28 15:40:18 semarie Exp $ */
/*
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
@@ -626,7 +626,8 @@ tame_namei(struct proc *p, char *origpath)
wl->wl_paths[i].len - 1) == 0) {
u_char term = canopath[wl->wl_paths[i].len - 1];
- if (term == '\0' || term == '/')
+ if (term == '\0' || term == '/' ||
+ wl->wl_paths[i].name[1] == '\0')
error = 0;
}
}