From owner-p4-projects@FreeBSD.ORG Tue Jun 9 14:06:52 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8D2FE1065672; Tue, 9 Jun 2009 14:06:52 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4D581106564A for ; Tue, 9 Jun 2009 14:06:52 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 300828FC16 for ; Tue, 9 Jun 2009 14:06:52 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n59E6qX9096048 for ; Tue, 9 Jun 2009 14:06:52 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n59E6qc9096046 for perforce@freebsd.org; Tue, 9 Jun 2009 14:06:52 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 9 Jun 2009 14:06:52 GMT Message-Id: <200906091406.n59E6qc9096046@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 163894 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2009 14:06:53 -0000 http://perforce.freebsd.org/chv.cgi?CH=163894 Change 163894 by rwatson@rwatson_freebsd_capabilities on 2009/06/09 14:06:35 Add additional syscalls to regression tests for capability mode: bind(), connect(), sendto() with and without address arguments. fork() is now OK, but waitpid() is not. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#5 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#5 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#4 $"); +__FBSDID("$P4: //depot/projects/trustedbsd/capabilities/src/tools/regression/security/cap_test/cap_test_syscalls.c#5 $"); #include #include @@ -43,6 +43,8 @@ #include #include +#include + #include #include #include @@ -55,6 +57,7 @@ void test_syscalls(void) { + struct sockaddr_in sin; struct statfs statfs; struct pollfd pollfd; struct stat sb; @@ -96,6 +99,11 @@ if (cap_enter() < 0) err(-1, "test_syscalls:prep: cap_enter"); + + bzero(&sin, sizeof(sin)); + sin.sin_len = sizeof(sin); + sin.sin_family = AF_INET; + /* * Here begin the tests, sorted roughly alphabetically by system call * name. @@ -121,6 +129,12 @@ } else warnx("test_syscalls:acct succeeded"); + if (bind(PF_INET, (struct sockaddr *)&sin, sizeof(sin)) < 0) { + if (errno != ENOSYS) + warnx("test_syscall:bind %d", errno); + } else + warnx("test_syscall:bind succeeded"); + if (chdir("/tmp/cap_test_syscalls_chdir") < 0) { if (errno != ENOSYS) warnx("test_syscalls:chdir %d", errno); @@ -158,6 +172,12 @@ warnx("test_syscalls:close %d", errno); } + if (connect(PF_INET, (struct sockaddr *)&sin, sizeof(sin)) < 0) { + if (errno != ENOSYS) + warnx("test_syscall:connect %d", errno); + } else + warnx("test_syscall:connect succeeded"); + fd = creat("/tmp/cap_test_syscalls_creat", 0644); if (fd >= 0) { warnx("test_syscalls:creat succeeded"); @@ -188,17 +208,15 @@ if (pid == 0) { exit(0); } else if (pid > 0) { - warnx("test_syscalls:fork succeeded"); wpid = waitpid(pid, NULL, 0); if (wpid < 0) { - if (errno == ENOSYS) - warnx("test_syscalls:waitpid ENOSYS"); - else + if (errno != ENOSYS) warnx("test_syscalls:waitpid %d", errno); - } + } else + warnx("test_syscalls:waitpid succeeded"); } - } else if (errno != ENOSYS) + } else warnx("test_syscalls:fork %d", errno); if (fstat(fd_file, &sb) < 0) { @@ -379,6 +397,15 @@ if (len < 0 && errno == ENOSYS) warnx("test_syscalls:sendmsg ENOSYS"); + len = sendto(fd_socket, NULL, 0, 0, NULL, 0); + if (len < 0 && errno == ENOSYS) + warnx("test_syscalls:sendmesg %d", errno); + + len = sendto(fd_socket, NULL, 0, 0, (struct sockaddr *)&sin, + sizeof(sin)); + if (len < 0 && errno != ENOSYS) + warnx("test_syscalls:sendmesg %d", errno); + if (setuid(getuid()) < 0) { if (errno == ENOSYS) warnx("test_syscalls:setuid ENOSYS");