Date: Sat, 8 Jun 2013 22:17:09 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 229527 for review Message-ID: <201306082217.r58MH9Ao077203@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@229527?ac=10 Change 229527 by rwatson@rwatson_cinnamon on 2013/06/08 22:17:01 Commit work-in-progress assertions in kern_prot.c, which check that MAC checks happen before credential changes, and that P_SUGID is set properly afterwards. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#2 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#2 (text+ko) ==== @@ -71,6 +71,10 @@ #include <sys/syscallsubr.h> #include <sys/sysctl.h> +#include <tesla.h> +#include <tesla-macros.h> +#include <sys/tesla-kernel.h> + #ifdef REGRESSION FEATURE(regression, "Kernel support for interfaces necessary for regression testing (SECURITY RISK!)"); @@ -2142,8 +2146,19 @@ void change_euid(struct ucred *newcred, struct uidinfo *euip) { + uid_t euid; + + + euid = euip->ui_uid; + TESLA_SYSCALL( + previously(mac_cred_check_setuid(ANY(ptr), euid) == 0) || + previously(mac_cred_check_setreuid(ANY(ptr), ANY(int), euid) + == 0) || + previously(mac_cred_check_setresuid(ANY(ptr), ANY(int), euid, + ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); - newcred->cr_uid = euip->ui_uid; + newcred->cr_uid = euid; uihold(euip); uifree(newcred->cr_uidinfo); newcred->cr_uidinfo = euip; @@ -2159,6 +2174,14 @@ change_egid(struct ucred *newcred, gid_t egid) { + TESLA_SYSCALL( + previously(mac_cred_check_setgid(ANY(ptr), egid) == 0) || + previously(mac_cred_check_setregid(ANY(ptr), ANY(int), egid) + == 0) || + previously(mac_cred_check_setresgid(ANY(ptr), ANY(int), egid, + ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); + newcred->cr_groups[0] = egid; } @@ -2174,8 +2197,17 @@ change_ruid(struct ucred *newcred, struct uidinfo *ruip) { + uid_t ruid = ruip->ui_uid; + TESLA_SYSCALL( + previously(mac_cred_check_setuid(ANY(ptr), ruid) == 0) || + previously(mac_cred_check_setreuid(ANY(ptr), ruid, ANY(int)) + == 0) || + previously(mac_cred_check_setresuid(ANY(ptr), ruid, ANY(int), + ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); + (void)chgproccnt(newcred->cr_ruidinfo, -1, 0); - newcred->cr_ruid = ruip->ui_uid; + newcred->cr_ruid = ruid; uihold(ruip); uifree(newcred->cr_ruidinfo); newcred->cr_ruidinfo = ruip; @@ -2192,6 +2224,14 @@ change_rgid(struct ucred *newcred, gid_t rgid) { + TESLA_SYSCALL( + previously(mac_cred_check_setgid(ANY(ptr), rgid) == 0) || + previously(mac_cred_check_setregid(ANY(ptr), rgid, ANY(int)) + == 0) || + previously(mac_cred_check_setresgid(ANY(ptr), rgid, ANY(int), + ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); + newcred->cr_rgid = rgid; } @@ -2205,6 +2245,14 @@ change_svuid(struct ucred *newcred, uid_t svuid) { + TESLA_SYSCALL( + previously(mac_cred_check_setuid(ANY(ptr), ANY(int)) == 0) || + previously(mac_cred_check_setreuid(ANY(ptr), ANY(int), + ANY(int)) == 0) || + previously(mac_cred_check_setresuid(ANY(ptr), ANY(int), + ANY(int), ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); + newcred->cr_svuid = svuid; } @@ -2218,5 +2266,13 @@ change_svgid(struct ucred *newcred, gid_t svgid) { + TESLA_SYSCALL( + previously(mac_cred_check_setgid(ANY(ptr), ANY(int)) == 0) || + previously(mac_cred_check_setregid(ANY(ptr), ANY(int), ANY(int)) + == 0) || + previously(mac_cred_check_setresgid(ANY(ptr), ANY(int), ANY(int), + ANY(int)) == 0)); + TESLA_SYSCALL(eventually(called(setsugid))); + newcred->cr_svgid = svgid; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306082217.r58MH9Ao077203>
