PERFORCE change 134152 for review
Robert Watson
rwatson at FreeBSD.org
Sat Jan 26 14:22:28 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=134152
Change 134152 by rwatson at rwatson_freebsd_capabilities on 2008/01/26 22:21:52
Test more system calls.
Test for failure for get*id() a bit differently.
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#2 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#2 (text+ko) ====
@@ -31,10 +31,11 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#1 $");
+__FBSDID("$P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#2 $");
#include <sys/types.h>
#include <sys/capability.h>
+#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/socket.h>
#include <sys/stat.h>
@@ -104,6 +105,12 @@
} else
warnx("test_syscalls:access succeeded");
+ if (acct("/tmp/cap_test_syscalls_acct") < 0) {
+ if (errno != ENOSYS)
+ warnx("test_syscalls:acct %d", errno);
+ } else
+ warnx("test_syscalls:acct succeeded");
+
if (chdir("/tmp/cap_test_syscalls_chdir") < 0) {
if (errno != ENOSYS)
warnx("test_syscalls:chdir %d", errno);
@@ -128,6 +135,12 @@
} else
warnx("test_syscalls:chown succeeded");
+ if (chroot("/tmp/cap_test_syscalls_chroot") < 0) {
+ if (errno != ENOSYS)
+ warnx("test_syscalls:chroot %d", errno);
+ } else
+ warnx("test_syscalls:chroot succeeded");
+
if (close(fd_close)) {
if (errno == ENOSYS)
warnx("test_syscalls:close ENOSYS");
@@ -142,6 +155,13 @@
} else if (errno != ENOSYS)
warnx("test_syscalls:creat %d", errno);
+ fd = dup(fd_file);
+ if (fd < 0) {
+ if (errno == ENOSYS)
+ warnx("test_syscalls:dup ENOSYS");
+ } else
+ close(fd);
+
if (fchdir(fd_dir) < 0) {
if (errno != ENOSYS)
warnx("test_syscall:fchdir %d", errno);
@@ -180,15 +200,26 @@
else
warnx("test_syscalls:fork %d", errno);
+ if (fstat(fd_file, &sb) < 0) {
+ if (errno == ENOSYS)
+ warnx("test_syscalls:fstat ENOSYS");
+ }
+
+ /*
+ * getegid() can't return an error but check for it anyway.
+ */
+ errno = 0;
+ (void)getegid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:getegid ENOSYS");
+
/*
* geteuid() can't return an error but check for it anyway.
*/
- if ((int)(geteuid()) < 0) {
- if (errno == ENOSYS)
- warnx("test_syscalls:geteuid ENOSYS");
- else
- warnx("test_syscalls:geteuid %d", errno);
- }
+ errno = 0;
+ geteuid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:geteuid ENOSYS");
if (getfsstat(&statfs, sizeof(statfs), MNT_NOWAIT) < 0) {
if (errno != ENOSYS)
@@ -196,30 +227,40 @@
} else
warnx("test_syscalls:getfsstat succeeded");
+ /*
+ * getgid() can't return an error but check for it anyway.
+ */
+ errno = 0;
+ getgid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:getgid ENOSYS");
+
if (getpeername(fd_socket, NULL, NULL) < 0) {
if (errno == ENOSYS)
warnx("test_syscalls:getpeername ENOSYS");
}
+ if (getlogin() == NULL) {
+ if (errno != ENOSYS)
+ warnx("test_sycalls:getlogin ENOSYS");
+ } else
+ warnx("test_syscalls:getlogin succeeded");
+
/*
* getpid() can't return an error but check for it anyway.
*/
- if (getpid() < 0) {
- if (errno == ENOSYS)
- warnx("test_syscalls:getpid ENOSYS");
- else
- warnx("test_syscalls:getpid %d", errno);
- }
+ errno = 0;
+ (void)getpid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:getpid ENOSYS");
/*
* getppid() can't return an error but check for it anyway.
*/
- if (getppid() < 0) {
- if (errno == ENOSYS)
- warnx("test_syscalls:getppid ENOSYS");
- else
- warnx("test_syscalls:getppid %d", errno);
- }
+ errno = 0;
+ (void)getppid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:getppid ENOSYS");
if (getsockname(fd_socket, NULL, NULL) < 0) {
if (errno == ENOSYS)
@@ -229,12 +270,12 @@
/*
* getuid() can't return an error but check for it anyway.
*/
- if ((int)(getuid()) < 0) {
- if (errno == ENOSYS)
- warnx("test_syscalls:getuid ENOSYS");
- else
- warnx("test_syscals:getuid %d", errno);
- }
+ errno = 0;
+ (void)getuid();
+ if (errno == ENOSYS)
+ warnx("test_syscalls:getuid ENOSYS");
+
+ /* XXXRW: ktrace */
if (link("/tmp/foo", "/tmp/bar") < 0) {
if (errno != ENOSYS)
@@ -271,6 +312,11 @@
} else
warnx("test_syscalls:mount succeeded");
+ if (msync(&fd_file, 8192, MS_ASYNC) < 0) {
+ if (errno == ENOSYS)
+ warnx("test_syscalls:msync ENOSYS");
+ }
+
fd = open("/dev/null", O_RDWR);
if (fd >= 0) {
warnx("test_syscalls:open succeeded");
@@ -283,12 +329,23 @@
} else if (errno == ENOSYS)
warnx("test_syscalls:pipe ENOSYS");
+ if (profil(NULL, 0, 0, 0) < 0) {
+ if (errno == ENOSYS)
+ warnx("test_syscalls:profile ENOSYS");
+ }
+
/* XXXRW: ptrace. */
len = read(fd_file, &ch, sizeof(ch));
if (len < 0 && errno == ENOSYS)
warnx("test_syscalls:read ENOSYS");
+ if (readlink("/tmp/cap_test_syscalls_readlink", NULL, 0) < 0) {
+ if (errno != ENOSYS)
+ warnx("test_syscalls:readlink %d", errno);
+ } else
+ warnx("test_syscalls:readlink succeeded");
+
len = recvfrom(fd_socket, NULL, 0, 0, NULL, NULL);
if (len < 0 && errno == ENOSYS)
warnx("test_syscalls:recvfrom ENOSYS");
@@ -297,6 +354,12 @@
if (len < 0 && errno == ENOSYS)
warnx("test_syscalls:recvmsg ENOSYS");
+ if (revoke("/tmp/cap_test_syscalls_revoke") < 0) {
+ if (errno != ENOSYS)
+ warnx("test_syscalls:revoke %d", errno);
+ } else
+ warnx("test_syscalls:revoke succeeded");
+
len = sendmsg(fd_socket, NULL, 0);
if (len < 0 && errno == ENOSYS)
warnx("test_syscalls:sendmsg ENOSYS");
@@ -312,6 +375,13 @@
} else
warnx("test_syscalls:stat succeeded");
+ if (symlink("/tmp/cap_test_syscalls_symlink_from",
+ "/tmp/cap_test_syscalls_symlink_to") < 0) {
+ if (errno != ENOSYS)
+ warnx("test_syscalls:symlink %d", errno);
+ } else
+ warnx("test_syscalls:symlink succeeded");
+
/* XXXRW: No error return from sync(2) to test. */
if (unlink("/tmp/cap_test_syscalls_unlink") < 0) {
More information about the p4-projects
mailing list