kernel: sysctl: do not return info about dead processes

This commit is contained in:
DH 2024-11-20 23:23:54 +03:00
parent ff8d81e059
commit 0da531a58e

View file

@ -195,6 +195,23 @@ SysResult kern_sysctl(Thread *thread, ptr<sint> 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<sint> 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