瀏覽代碼

Kernel: Add new syscall to allow changing the system date

Liav A 5 年之前
父節點
當前提交
4484513b45
共有 3 個文件被更改,包括 19 次插入0 次删除
  1. 17 0
      Kernel/Process.cpp
  2. 1 0
      Kernel/Process.h
  3. 1 0
      Kernel/Syscall.h

+ 17 - 0
Kernel/Process.cpp

@@ -4283,6 +4283,23 @@ int Process::sys$clock_gettime(clockid_t clock_id, timespec* user_ts)
     return 0;
 }
 
+int Process::sys$clock_settime(clockid_t clock_id, timespec* user_ts)
+{
+    SmapDisabler disabler;
+    REQUIRE_PROMISE(stdio);
+    if (!validate_write_typed(user_ts))
+        return -EFAULT;
+
+    switch (clock_id) {
+    case CLOCK_REALTIME:
+        TimeManagement::the().set_epoch_time(user_ts->tv_sec);
+        break;
+    default:
+        return -EINVAL;
+    }
+    return 0;
+}
+
 int Process::sys$clock_nanosleep(const Syscall::SC_clock_nanosleep_params* user_params)
 {
     REQUIRE_PROMISE(stdio);

+ 1 - 0
Kernel/Process.h

@@ -213,6 +213,7 @@ public:
     int sys$usleep(useconds_t usec);
     int sys$gettimeofday(timeval*);
     int sys$clock_gettime(clockid_t, timespec*);
+    int sys$clock_settime(clockid_t, timespec*);
     int sys$clock_nanosleep(const Syscall::SC_clock_nanosleep_params*);
     int sys$gethostname(char*, ssize_t);
     int sys$uname(utsname*);

+ 1 - 0
Kernel/Syscall.h

@@ -158,6 +158,7 @@ namespace Kernel {
     __ENUMERATE_SYSCALL(getrandom)            \
     __ENUMERATE_SYSCALL(setkeymap)            \
     __ENUMERATE_SYSCALL(clock_gettime)        \
+    __ENUMERATE_SYSCALL(clock_settime)        \
     __ENUMERATE_SYSCALL(clock_nanosleep)      \
     __ENUMERATE_SYSCALL(join_thread)          \
     __ENUMERATE_SYSCALL(module_load)          \