Kernel: Fix fork cmdline copying and copy environ

This commit is contained in:
Bananymous 2025-05-13 07:46:42 +03:00
parent 0eb981f51c
commit 143a00626b
2 changed files with 8 additions and 2 deletions

View File

@ -55,7 +55,7 @@ namespace Kernel
bool is_session_leader() const { return pid() == sid(); } 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() ? "<unknown>" : m_cmdline.front().data(); }
const Credentials& credentials() const { return m_credentials; } const Credentials& credentials() const { return m_credentials; }

View File

@ -572,6 +572,11 @@ namespace Kernel
for (size_t i = 0; i < m_cmdline.size(); i++) for (size_t i = 0; i < m_cmdline.size(); i++)
TRY(cmdline[i].append(m_cmdline[i])); TRY(cmdline[i].append(m_cmdline[i]));
BAN::Vector<BAN::String> 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<OpenFileDescriptorSet>::create(m_credentials)); auto open_file_descriptors = TRY(BAN::UniqPtr<OpenFileDescriptorSet>::create(m_credentials));
TRY(open_file_descriptors->clone_from(m_open_file_descriptors)); 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); Process* forked = create_process(m_credentials, m_pid, m_sid, m_pgrp);
forked->m_controlling_terminal = m_controlling_terminal; forked->m_controlling_terminal = m_controlling_terminal;
forked->m_working_directory = BAN::move(working_directory); 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_page_table = BAN::move(page_table);
forked->m_open_file_descriptors = BAN::move(*open_file_descriptors); forked->m_open_file_descriptors = BAN::move(*open_file_descriptors);
forked->m_mapped_regions = BAN::move(mapped_regions); forked->m_mapped_regions = BAN::move(mapped_regions);