From 0da531a58e3e243f8f3585dd31a127b53bf22063 Mon Sep 17 00:00:00 2001 From: DH Date: Wed, 20 Nov 2024 23:23:54 +0300 Subject: [PATCH] kernel: sysctl: do not return info about dead processes --- orbis-kernel/src/sys/sys_sysctl.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/orbis-kernel/src/sys/sys_sysctl.cpp b/orbis-kernel/src/sys/sys_sysctl.cpp index 9fd20e08c..a5b76a718 100644 --- a/orbis-kernel/src/sys/sys_sysctl.cpp +++ b/orbis-kernel/src/sys/sys_sysctl.cpp @@ -195,6 +195,23 @@ SysResult kern_sysctl(Thread *thread, ptr name, uint namelen, } } + if (namelen >= 3) { + if (name[0] == kern && name[1] == proc && name[2] == 1) { + ORBIS_LOG_ERROR("KERN_PROC_PROC 2"); + + if (namelen >= 4) { + auto process = g_context.findProcessById(name[3]); + if (process == nullptr || process->exitStatus.has_value()) { + return ErrorCode::SRCH; + } + } + + std::memset(old, 0, sizeof(ProcInfo)); + *oldlenp = sizeof(ProcInfo); + return {}; + } + } + if (namelen == 4) { if (name[0] == kern && name[1] == proc && name[2] == 37) { if (oldlenp && old && *oldlenp == 4) { @@ -242,14 +259,6 @@ SysResult kern_sysctl(Thread *thread, ptr name, uint namelen, return uwrite(oldlenp, sizeof(uint32_t)); } - if (name[0] == kern && name[1] == proc && name[2] == 1) { - ORBIS_LOG_ERROR("KERN_PROC_PROC 2"); - - std::memset(old, 0, sizeof(ProcInfo)); - *oldlenp = sizeof(ProcInfo); - return {}; - } - if (name[0] == 1 && name[1] == proc && name[2] == 35) { // AppInfo get/set