diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index a644e81a32..6d601a9e4b 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -1272,7 +1273,12 @@ ssize_t Process::sys$writev(int fd, const struct iovec* iov, int iov_count) if (!validate_read_typed(iov, iov_count)) return -EFAULT; - // FIXME: Return EINVAL if sum of iovecs is greater than INT_MAX + u64 total_length = 0; + for (int i = 0; i < iov_count; ++i) { + total_length += iov[i].iov_len; + if (total_length > INT32_MAX) + return -EINVAL; + } auto* description = file_description(fd); if (!description)