فهرست منبع

Kernel: Make sys$posix_fallocate() fail with ENODEV on non-regular files

Previously we tried to determine if `fd` refers to a non-regular file by
doing a stat() operation on the file.

This didn't work out very well since many File subclasses don't
actually implement stat() but instead fall back to failing with EBADF.

This patch fixes the issue by checking for regular files with
File::is_regular_file() instead.
Andreas Kling 2 سال پیش
والد
کامیت
961e1e590b
1فایلهای تغییر یافته به همراه2 افزوده شده و 1 حذف شده
  1. 2 1
      Kernel/Syscalls/fallocate.cpp

+ 2 - 1
Kernel/Syscalls/fallocate.cpp

@@ -37,7 +37,8 @@ ErrorOr<FlatPtr> Process::sys$posix_fallocate(int fd, Userspace<off_t const*> us
     if (description->is_fifo())
     if (description->is_fifo())
         return ESPIPE;
         return ESPIPE;
 
 
-    if (!S_ISREG(TRY(description->file().stat()).st_mode))
+    // [ENODEV] The fd argument does not refer to a regular file.
+    if (!description->file().is_regular_file())
         return ENODEV;
         return ENODEV;
 
 
     VERIFY(description->file().is_inode());
     VERIFY(description->file().is_inode());