Pārlūkot izejas kodu

Kernel: Return error when attempting to read from a directory.

We now return EISDIR whenever a program attempts to call sys$read
on a directory. Previously, attempting to read a directory could
either return junk data or, in the case of /proc/, cause a kernel
panic.
Drew Stratford 5 gadi atpakaļ
vecāks
revīzija
489e451cce
1 mainītis faili ar 2 papildinājumiem un 0 dzēšanām
  1. 2 0
      Kernel/Process.cpp

+ 2 - 0
Kernel/Process.cpp

@@ -1128,6 +1128,8 @@ ssize_t Process::sys$read(int fd, u8* buffer, ssize_t size)
     auto* description = file_description(fd);
     auto* description = file_description(fd);
     if (!description)
     if (!description)
         return -EBADF;
         return -EBADF;
+    if (description->is_directory())
+        return -EISDIR;
     if (description->is_blocking()) {
     if (description->is_blocking()) {
         if (!description->can_read()) {
         if (!description->can_read()) {
             if (current->block<Thread::ReadBlocker>(*description) == Thread::BlockResult::InterruptedBySignal)
             if (current->block<Thread::ReadBlocker>(*description) == Thread::BlockResult::InterruptedBySignal)