From cc125f38dc4138a8787b529db91b34b1dbee9e25 Mon Sep 17 00:00:00 2001 From: Michael Neumann Date: Thu, 18 Jun 2009 12:32:07 +0200 Subject: [PATCH] priv: Narrow down privileges --- sys/kern/kern_time.c | 6 +++--- sys/kern/kern_usched.c | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index ccd6633317..3c39c05ebd 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -180,7 +180,7 @@ kern_clock_settime(clockid_t clock_id, struct timespec *ats) struct timeval atv; int error; - if ((error = priv_check(td, PRIV_ROOT)) != 0) + if ((error = priv_check(td, PRIV_CLOCK_SETTIME)) != 0) return (error); if (clock_id != CLOCK_REALTIME) return (EINVAL); @@ -389,7 +389,7 @@ sys_settimeofday(struct settimeofday_args *uap) struct timezone atz; int error; - if ((error = priv_check(td, PRIV_ROOT))) + if ((error = priv_check(td, PRIV_SETTIMEOFDAY))) return (error); /* Verify all parameters before changing time. */ if (uap->tv) { @@ -501,7 +501,7 @@ sys_adjtime(struct adjtime_args *uap) int64_t ndelta, odelta; int error; - if ((error = priv_check(td, PRIV_ROOT))) + if ((error = priv_check(td, PRIV_ADJTIME))) return (error); if ((error = copyin((caddr_t)uap->delta, (caddr_t)&atv, sizeof(struct timeval)))) diff --git a/sys/kern/kern_usched.c b/sys/kern/kern_usched.c index da48f96147..73a7070400 100644 --- a/sys/kern/kern_usched.c +++ b/sys/kern/kern_usched.c @@ -162,17 +162,14 @@ sys_usched_set(struct usched_set_args *uap) cpumask_t mask; struct lwp *lp; int cpuid; - /* USCHED_GET_CPU doesn't require root privileges. */ - if ((uap->cmd != USCHED_GET_CPU) && (uap->cmd != USCHED_DEL_CPU) && - (error = priv_check(curthread, PRIV_ROOT)) != 0) - return (error); - if (uap->pid != 0 && uap->pid != curthread->td_proc->p_pid) return (EINVAL); lp = curthread->td_lwp; switch (uap->cmd) { case USCHED_SET_SCHEDULER: + if ((error = priv_check(curthread, PRIV_SCHED_SET)) != 0) + return (error); if ((error = copyinstr(uap->data, buffer, sizeof(buffer), NULL)) != 0) return (error); @@ -201,6 +198,8 @@ sys_usched_set(struct usched_set_args *uap) } break; case USCHED_SET_CPU: + if ((error = priv_check(curthread, PRIV_SCHED_CPUSET)) != 0) + return (error); if (uap->bytes != sizeof(int)) return (EINVAL); error = copyin(uap->data, &cpuid, sizeof(int)); @@ -219,11 +218,14 @@ sys_usched_set(struct usched_set_args *uap) lwkt_migratecpu(cpuid); break; case USCHED_GET_CPU: + /* USCHED_GET_CPU doesn't require special privileges. */ if (uap->bytes != sizeof(int)) return (EINVAL); error = copyout(&(mycpu->gd_cpuid), uap->data, sizeof(int)); break; case USCHED_ADD_CPU: + if ((error = priv_check(curthread, PRIV_SCHED_CPUSET)) != 0) + return (error); if (uap->bytes != sizeof(int)) return (EINVAL); error = copyin(uap->data, &cpuid, sizeof(int)); @@ -240,6 +242,7 @@ sys_usched_set(struct usched_set_args *uap) lp->lwp_cpumask |= 1 << cpuid; break; case USCHED_DEL_CPU: + /* USCHED_DEL_CPU doesn't require special privileges. */ if (uap->bytes != sizeof(int)) return (EINVAL); error = copyin(uap->data, &cpuid, sizeof(int)); -- 2.41.0