From 143a00626bc956c10880925b2f3e7b73e4dc2368 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 13 May 2025 07:46:42 +0300 Subject: [PATCH] Kernel: Fix fork cmdline copying and copy environ --- kernel/include/kernel/Process.h | 2 +- kernel/kernel/Process.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/kernel/include/kernel/Process.h b/kernel/include/kernel/Process.h index 6223f396..7eec9f75 100644 --- a/kernel/include/kernel/Process.h +++ b/kernel/include/kernel/Process.h @@ -55,7 +55,7 @@ namespace Kernel bool is_session_leader() const { return pid() == sid(); } - const char* name() const { return m_cmdline.empty() ? "" : m_cmdline.front().data(); } + const char* name() const { return m_cmdline.empty() ? "" : m_cmdline.front().data(); } const Credentials& credentials() const { return m_credentials; } diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 85217e8c..ee507037 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -572,6 +572,11 @@ namespace Kernel for (size_t i = 0; i < m_cmdline.size(); i++) TRY(cmdline[i].append(m_cmdline[i])); + BAN::Vector environ; + TRY(environ.resize(m_environ.size())); + for (size_t i = 0; i < m_environ.size(); i++) + TRY(environ[i].append(m_environ[i])); + auto open_file_descriptors = TRY(BAN::UniqPtr::create(m_credentials)); TRY(open_file_descriptors->clone_from(m_open_file_descriptors)); @@ -583,7 +588,8 @@ namespace Kernel Process* forked = create_process(m_credentials, m_pid, m_sid, m_pgrp); forked->m_controlling_terminal = m_controlling_terminal; forked->m_working_directory = BAN::move(working_directory); - forked->m_cmdline = BAN::move(m_cmdline); + forked->m_cmdline = BAN::move(cmdline); + forked->m_environ = BAN::move(environ); forked->m_page_table = BAN::move(page_table); forked->m_open_file_descriptors = BAN::move(*open_file_descriptors); forked->m_mapped_regions = BAN::move(mapped_regions);