From 41e1819072aeb448e767d41b61d5ed10de599097 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 1 Jul 2025 14:20:09 +0300 Subject: [PATCH] Kernel: Align argv and envp to pointer boundary This bug was found with ubsan --- kernel/kernel/Thread.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index f1a54ed6..de2f81e6 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -285,6 +285,9 @@ namespace Kernel // auxv needed_size += auxv.size() * sizeof(LibELF::AuxiliaryVector); + if (auto rem = needed_size % alignof(char*)) + needed_size += alignof(char*) - rem; + if (needed_size > m_userspace_stack->size()) return BAN::Error::from_errno(ENOBUFS); @@ -358,8 +361,6 @@ namespace Kernel stack_push_str(envp[i]); } - ASSERT(vaddr == userspace_stack_top()); - setup_exec(entry, userspace_stack_top() - needed_size); return {};