mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 02:12:09 -05:00
Kernel: Use Userspace<T> in sched_setparam syscall
Note: I switched from copying the single element out of the sched_param struct, to copy struct it self as it is identical in functionality. This way the types match up nicer with the Userpace<T> api's and it conforms to the conventions used in other syscalls.
This commit is contained in:
parent
1209bf82c1
commit
10e912d68c
2 changed files with 8 additions and 7 deletions
|
@ -291,7 +291,7 @@ public:
|
||||||
int sys$setsockopt(const Syscall::SC_setsockopt_params*);
|
int sys$setsockopt(const Syscall::SC_setsockopt_params*);
|
||||||
int sys$getsockname(const Syscall::SC_getsockname_params*);
|
int sys$getsockname(const Syscall::SC_getsockname_params*);
|
||||||
int sys$getpeername(const Syscall::SC_getpeername_params*);
|
int sys$getpeername(const Syscall::SC_getpeername_params*);
|
||||||
int sys$sched_setparam(pid_t pid, const struct sched_param* param);
|
int sys$sched_setparam(pid_t pid, Userspace<const struct sched_param*>);
|
||||||
int sys$sched_getparam(pid_t pid, struct sched_param* param);
|
int sys$sched_getparam(pid_t pid, struct sched_param* param);
|
||||||
int sys$create_thread(void* (*)(void*), const Syscall::SC_create_thread_params*);
|
int sys$create_thread(void* (*)(void*), const Syscall::SC_create_thread_params*);
|
||||||
void sys$exit_thread(void*);
|
void sys$exit_thread(void*);
|
||||||
|
|
|
@ -48,14 +48,14 @@ int Process::sys$donate(int tid)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Process::sys$sched_setparam(int tid, const struct sched_param* param)
|
int Process::sys$sched_setparam(int tid, Userspace<const struct sched_param*> user_param)
|
||||||
{
|
{
|
||||||
REQUIRE_PROMISE(proc);
|
REQUIRE_PROMISE(proc);
|
||||||
if (!validate_read_typed(param))
|
if (!validate_read_typed(user_param))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
int desired_priority;
|
struct sched_param desired_param;
|
||||||
copy_from_user(&desired_priority, ¶m->sched_priority);
|
copy_from_user(&desired_param, user_param);
|
||||||
|
|
||||||
InterruptDisabler disabler;
|
InterruptDisabler disabler;
|
||||||
auto* peer = Thread::current();
|
auto* peer = Thread::current();
|
||||||
|
@ -68,10 +68,11 @@ int Process::sys$sched_setparam(int tid, const struct sched_param* param)
|
||||||
if (!is_superuser() && m_euid != peer->process().m_uid && m_uid != peer->process().m_uid)
|
if (!is_superuser() && m_euid != peer->process().m_uid && m_uid != peer->process().m_uid)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
if (desired_priority < THREAD_PRIORITY_MIN || desired_priority > THREAD_PRIORITY_MAX)
|
if (desired_param.sched_priority < THREAD_PRIORITY_MIN ||
|
||||||
|
desired_param.sched_priority > THREAD_PRIORITY_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
peer->set_priority((u32)desired_priority);
|
peer->set_priority((u32)desired_param.sched_priority);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue