From 454d2fd42a564bf8297e8eb8e0cbe92d8f1c4a0a Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Thu, 29 Apr 2021 01:20:24 -0700 Subject: [PATCH] Kernel: Harden sys$readv / sys$writev Vector usage against OOM. --- Kernel/Syscalls/read.cpp | 3 ++- Kernel/Syscalls/write.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Kernel/Syscalls/read.cpp b/Kernel/Syscalls/read.cpp index e29a9e90ae..61fb800997 100644 --- a/Kernel/Syscalls/read.cpp +++ b/Kernel/Syscalls/read.cpp @@ -24,7 +24,8 @@ KResultOr Process::sys$readv(int fd, Userspace iov u64 total_length = 0; Vector vecs; - vecs.resize(iov_count); + if (!vecs.try_resize(iov_count)) + return ENOMEM; if (!copy_n_from_user(vecs.data(), iov, iov_count)) return EFAULT; for (auto& vec : vecs) { diff --git a/Kernel/Syscalls/write.cpp b/Kernel/Syscalls/write.cpp index e07ed97a5c..c0185f9b11 100644 --- a/Kernel/Syscalls/write.cpp +++ b/Kernel/Syscalls/write.cpp @@ -23,7 +23,8 @@ KResultOr Process::sys$writev(int fd, Userspace io u64 total_length = 0; Vector vecs; - vecs.resize(iov_count); + if (!vecs.try_resize(iov_count)) + return ENOMEM; if (!copy_n_from_user(vecs.data(), iov, iov_count)) return EFAULT; for (auto& vec : vecs) {