1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:47:45 +00:00

Kernel: Don't allow allocate_tls() if the process has multiple threads

We can't safely update the other threads' FS selector. This shouldn't
be a problem in practice because allocate_tls() is only used by the
loader.
This commit is contained in:
Gunnar Beutner 2021-07-02 23:30:41 +02:00 committed by Andreas Kling
parent 5ca95b3957
commit a09e6171a6

View file

@ -578,12 +578,18 @@ KResultOr<FlatPtr> Process::sys$allocate_tls(Userspace<const char*> initial_data
return EFAULT;
Thread* main_thread = nullptr;
for_each_thread([&main_thread](auto& thread) {
bool multiple_threads = false;
for_each_thread([&main_thread, &multiple_threads](auto& thread) {
if (main_thread)
multiple_threads = true;
main_thread = &thread;
return IterationDecision::Break;
});
VERIFY(main_thread);
if (multiple_threads)
return EINVAL;
auto range = space().allocate_range({}, size);
if (!range.has_value())
return ENOMEM;