diff --git a/src/system/kernel/fs/fd.cpp b/src/system/kernel/fs/fd.cpp index a15b3b6e3b..607d416ba0 100644 --- a/src/system/kernel/fs/fd.cpp +++ b/src/system/kernel/fs/fd.cpp @@ -731,9 +731,6 @@ common_close(int fd, bool kernel) static ssize_t common_user_io(int fd, off_t pos, void* buffer, size_t length, bool write) { - if (!IS_USER_ADDRESS(buffer)) - return B_BAD_ADDRESS; - if (pos < -1) return B_BAD_VALUE; @@ -758,6 +755,12 @@ common_user_io(int fd, off_t pos, void* buffer, size_t length, bool write) return B_BAD_VALUE; } + if (length == 0) + return 0; + + if (!IS_USER_ADDRESS(buffer)) + return B_BAD_ADDRESS; + SyscallRestartWrapper status; if (write)