diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 4925be50a1..886d4a96a0 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -544,7 +544,6 @@ KResult Process::do_exec(NonnullRefPtr main_program_description m_coredump_metadata.clear(); auto current_thread = Thread::current(); - current_thread->set_default_signal_dispositions(); current_thread->clear_signals(); clear_futex_queues_on_exec(); diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index b906bcb483..1bd4e59d82 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -84,7 +84,7 @@ Thread::Thread(NonnullRefPtr process, NonnullOwnPtr kernel_stac } if constexpr (THREAD_DEBUG) dbgln("Created new thread {}({}:{})", m_process->name(), m_process->pid().value(), m_tid.value()); - set_default_signal_dispositions(); + m_fpu_state = (FPUState*)kmalloc_aligned<16>(sizeof(FPUState)); reset_fpu_state(); m_tss.iomapbase = sizeof(TSS32); @@ -547,6 +547,9 @@ void Thread::clear_signals() m_signal_mask = 0; m_pending_signals = 0; m_have_any_unmasked_pending_signals.store(false, AK::memory_order_release); + + Span action_data(m_signal_action_data); + action_data.fill({}); } // Certain exceptions, such as SIGSEGV and SIGILL, put a @@ -842,14 +845,6 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal) return DispatchSignalResult::Continue; } -void Thread::set_default_signal_dispositions() -{ - // FIXME: Set up all the right default actions. See signal(7). - memset(&m_signal_action_data, 0, sizeof(m_signal_action_data)); - m_signal_action_data[SIGCHLD].handler_or_sigaction = VirtualAddress(SIG_IGN); - m_signal_action_data[SIGWINCH].handler_or_sigaction = VirtualAddress(SIG_IGN); -} - RegisterState& Thread::get_register_dump_from_stack() { auto* trap = current_trap(); diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 3a21480b74..bc2e622348 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -1007,8 +1007,6 @@ public: FPUState& fpu_state() { return *m_fpu_state; } - void set_default_signal_dispositions(); - KResult make_thread_specific_region(Badge); unsigned syscall_count() const { return m_syscall_count; } @@ -1241,7 +1239,7 @@ private: u32 m_kernel_stack_top { 0 }; OwnPtr m_kernel_stack_region; VirtualAddress m_thread_specific_data; - SignalActionData m_signal_action_data[32]; + SignalActionData m_signal_action_data[32] { }; Blocker* m_blocker { nullptr }; #if LOCK_DEBUG