浏览代码

Kernel: Remove SmapDisabler in sys$setgroups()

Andreas Kling 5 年之前
父节点
当前提交
eb7b0c76a8
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      Kernel/Process.cpp

+ 7 - 3
Kernel/Process.cpp

@@ -2618,17 +2618,21 @@ int Process::sys$getgroups(ssize_t count, gid_t* gids)
     return 0;
     return 0;
 }
 }
 
 
-int Process::sys$setgroups(ssize_t count, const gid_t* gids)
+int Process::sys$setgroups(ssize_t count, const gid_t* user_gids)
 {
 {
     REQUIRE_PROMISE(id);
     REQUIRE_PROMISE(id);
     if (count < 0)
     if (count < 0)
         return -EINVAL;
         return -EINVAL;
     if (!is_superuser())
     if (!is_superuser())
         return -EPERM;
         return -EPERM;
-    if (count && !validate_read(gids, count))
+    if (count && !validate_read(user_gids, count))
         return -EFAULT;
         return -EFAULT;
+
+    Vector<gid_t> gids;
+    gids.resize(count);
+    copy_from_user(gids.data(), user_gids, sizeof(gid_t) * count);
+
     m_extra_gids.clear();
     m_extra_gids.clear();
-    SmapDisabler disabler;
     for (int i = 0; i < count; ++i) {
     for (int i = 0; i < count; ++i) {
         if (gids[i] == m_gid)
         if (gids[i] == m_gid)
             continue;
             continue;