1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 08:25:07 +00: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:
Brian Gianforcaro 2020-08-01 18:06:29 -07:00 committed by Andreas Kling
parent 1209bf82c1
commit 10e912d68c
2 changed files with 8 additions and 7 deletions

View file

@ -48,14 +48,14 @@ int Process::sys$donate(int tid)
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);
if (!validate_read_typed(param))
if (!validate_read_typed(user_param))
return -EFAULT;
int desired_priority;
copy_from_user(&desired_priority, &param->sched_priority);
struct sched_param desired_param;
copy_from_user(&desired_param, user_param);
InterruptDisabler disabler;
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)
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;
peer->set_priority((u32)desired_priority);
peer->set_priority((u32)desired_param.sched_priority);
return 0;
}