forked from Bananymous/banan-os
Kernel: Align argv and envp to pointer boundary
This bug was found with ubsan
This commit is contained in:
@@ -285,6 +285,9 @@ namespace Kernel
|
|||||||
// auxv
|
// auxv
|
||||||
needed_size += auxv.size() * sizeof(LibELF::AuxiliaryVector);
|
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())
|
if (needed_size > m_userspace_stack->size())
|
||||||
return BAN::Error::from_errno(ENOBUFS);
|
return BAN::Error::from_errno(ENOBUFS);
|
||||||
|
|
||||||
@@ -358,8 +361,6 @@ namespace Kernel
|
|||||||
stack_push_str(envp[i]);
|
stack_push_str(envp[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(vaddr == userspace_stack_top());
|
|
||||||
|
|
||||||
setup_exec(entry, userspace_stack_top() - needed_size);
|
setup_exec(entry, userspace_stack_top() - needed_size);
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
Reference in New Issue
Block a user