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

Kernel: Disable big process lock for sys$getrandom

This syscall doesn't touch any intra-process shared resources and
already holds the global kernel RNG lock so there's no reason to hold
the big lock.
Idan Horowitz 4 éve
szülő
commit
48325e2959
2 módosított fájl, 2 hozzáadás és 2 törlés
  1. 1 1
      Kernel/API/Syscall.h
  2. 1 1
      Kernel/Syscalls/getrandom.cpp

+ 1 - 1
Kernel/API/Syscall.h

@@ -154,7 +154,7 @@ enum class NeedsBigProcessLock {
     S(realpath, NeedsBigProcessLock::Yes)                   \
     S(get_process_name, NeedsBigProcessLock::Yes)           \
     S(fchdir, NeedsBigProcessLock::Yes)                     \
-    S(getrandom, NeedsBigProcessLock::Yes)                  \
+    S(getrandom, NeedsBigProcessLock::No)                   \
     S(getkeymap, NeedsBigProcessLock::Yes)                  \
     S(setkeymap, NeedsBigProcessLock::Yes)                  \
     S(clock_gettime, NeedsBigProcessLock::Yes)              \

+ 1 - 1
Kernel/Syscalls/getrandom.cpp

@@ -15,7 +15,7 @@ namespace Kernel {
 // do, we should be able of the caveats that Linux has dealt with.
 KResultOr<FlatPtr> Process::sys$getrandom(Userspace<void*> buffer, size_t buffer_size, [[maybe_unused]] unsigned flags)
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     REQUIRE_PROMISE(stdio);
     if (buffer_size > NumericLimits<ssize_t>::max())
         return EINVAL;