Forráskód Böngészése

Kernel: Use Userspace<T> in sched_getparam syscall

Brian Gianforcaro 5 éve
szülő
commit
9db5a1b92f
2 módosított fájl, 5 hozzáadás és 5 törlés
  1. 1 1
      Kernel/Process.h
  2. 4 4
      Kernel/Syscalls/sched.cpp

+ 1 - 1
Kernel/Process.h

@@ -295,7 +295,7 @@ public:
     int sys$getsockname(const Syscall::SC_getsockname_params*);
     int sys$getpeername(const Syscall::SC_getpeername_params*);
     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, Userspace<struct sched_param*>);
     int sys$create_thread(void* (*)(void*), const Syscall::SC_create_thread_params*);
     void sys$exit_thread(void*);
     int sys$join_thread(int tid, void** exit_value);

+ 4 - 4
Kernel/Syscalls/sched.cpp

@@ -76,10 +76,10 @@ int Process::sys$sched_setparam(int tid, Userspace<const struct sched_param*> us
     return 0;
 }
 
-int Process::sys$sched_getparam(pid_t pid, struct sched_param* param)
+int Process::sys$sched_getparam(pid_t pid, Userspace<struct sched_param*> user_param)
 {
     REQUIRE_PROMISE(proc);
-    if (!validate_write_typed(param))
+    if (!validate_write_typed(user_param))
         return -EFAULT;
 
     InterruptDisabler disabler;
@@ -93,8 +93,8 @@ int Process::sys$sched_getparam(pid_t pid, struct sched_param* param)
     if (!is_superuser() && m_euid != peer->process().m_uid && m_uid != peer->process().m_uid)
         return -EPERM;
 
-    int priority = peer->priority();
-    copy_to_user(&param->sched_priority, &priority);
+    struct sched_param param { (int) peer->priority() };
+    copy_to_user(user_param, &param);
     return 0;
 }