From b3096276bba15e213d15caeb680e7d3bafa18b54 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Thu, 29 Apr 2021 01:41:30 -0700 Subject: [PATCH] Kernel: Harden sys$poll Vector usage against OOM. --- Kernel/Syscalls/select.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Kernel/Syscalls/select.cpp b/Kernel/Syscalls/select.cpp index 175a07e650eb5b..e39c4b670787b4 100644 --- a/Kernel/Syscalls/select.cpp +++ b/Kernel/Syscalls/select.cpp @@ -154,7 +154,8 @@ KResultOr Process::sys$poll(Userspace user_ nfds_checked *= params.nfds; if (nfds_checked.has_overflow()) return EFAULT; - fds_copy.resize(params.nfds); + if (!fds_copy.try_resize(params.nfds)) + return ENOMEM; if (!copy_from_user(fds_copy.data(), ¶ms.fds[0], nfds_checked.value())) return EFAULT; } @@ -174,7 +175,8 @@ KResultOr Process::sys$poll(Userspace user_ block_flags |= BlockFlags::Write; if (pfd.events & POLLPRI) block_flags |= BlockFlags::ReadPriority; - fds_info.append({ description.release_nonnull(), block_flags }); + if (!fds_info.try_append({ description.release_nonnull(), block_flags })) + return ENOMEM; } auto current_thread = Thread::current();