summaryrefslogtreecommitdiffstats
path: root/sys/kern/sysv_ipc.c
diff options
context:
space:
mode:
authorbsd <bsd@FreeBSD.org>2000-03-13 23:00:08 +0000
committerbsd <bsd@FreeBSD.org>2000-03-13 23:00:08 +0000
commitfe41605fe0c0e256c26622b4c8e5edf23f72d7c7 (patch)
tree410c90f77693dc7ad3521b3783d9745cdb945f90 /sys/kern/sysv_ipc.c
parent6dfbd9470da9d6e78632a9edecb78862a654afad (diff)
downloadFreeBSD-src-fe41605fe0c0e256c26622b4c8e5edf23f72d7c7.zip
FreeBSD-src-fe41605fe0c0e256c26622b4c8e5edf23f72d7c7.tar.gz
In 'ipcperm()', only call 'suser()' if it is actually required.
Previously, it was being called whether it was needed or not and the ASU flag was being set (as a side affect of calling 'suser()') in cases where superuser privileges were not actually needed. This was all pointed out to me by Bruce Evans. Reviewed by: bde
Diffstat (limited to 'sys/kern/sysv_ipc.c')
-rw-r--r--sys/kern/sysv_ipc.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/sys/kern/sysv_ipc.c b/sys/kern/sysv_ipc.c
index 581043c..9bea497 100644
--- a/sys/kern/sysv_ipc.c
+++ b/sys/kern/sysv_ipc.c
@@ -51,16 +51,11 @@ ipcperm(p, perm, mode)
int mode;
{
struct ucred *cred = p->p_ucred;
- int error;
-
- error = suser(p);
- if (!error)
- return (0);
/* Check for user match. */
if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) {
if (mode & IPC_M)
- return (EPERM);
+ return (suser(p) == 0 ? 0 : EPERM);
/* Check for group match. */
mode >>= 3;
if (!groupmember(perm->gid, cred) &&
@@ -71,7 +66,7 @@ ipcperm(p, perm, mode)
if (mode & IPC_M)
return (0);
- return ((mode & perm->mode) == mode ? 0 : EACCES);
+ return ((mode & perm->mode) == mode || suser(p) == 0 ? 0 : EACCES);
}
#endif /* defined(SYSVSEM) || defined(SYSVSHM) || defined(SYSVMSG) */
OpenPOWER on IntegriCloud