diff --git a/orbis-kernel/src/sys/sys_sysctl.cpp b/orbis-kernel/src/sys/sys_sysctl.cpp index fbf6e1644..b2e34a072 100644 --- a/orbis-kernel/src/sys/sys_sysctl.cpp +++ b/orbis-kernel/src/sys/sys_sysctl.cpp @@ -20,6 +20,7 @@ orbis::SysResult orbis::sys___sysctl(Thread *thread, ptr name, sched_cpusetsize, proc_ptc, cpu_mode, + rng_pseudo, }; enum sysctl_hw { @@ -100,6 +101,14 @@ orbis::SysResult orbis::sys___sysctl(Thread *thread, ptr name, dest[count++] = kern; dest[count++] = sdk_version; + } else if (searchName == "kern.rng_pseudo") { + if (*oldlenp < 2 * sizeof(uint32_t)) { + std::fprintf(stderr, " %s error\n", searchName.data()); + return ErrorCode::INVAL; + } + + dest[count++] = kern; + dest[count++] = rng_pseudo; } else if (searchName == "kern.sched.cpusetsize") { if (*oldlenp < 2 * sizeof(uint32_t)) { std::fprintf(stderr, " %s error\n", searchName.data()); @@ -189,6 +198,15 @@ orbis::SysResult orbis::sys___sysctl(Thread *thread, ptr name, *(std::uint32_t *)old = 4; break; + case sysctl_kern::rng_pseudo: + if (*oldlenp != 0x40 || new_ != nullptr || newlen != 0) { + return ErrorCode::INVAL; + } + + + std::memset(old, 0, 0x40); + break; + case sysctl_kern::kern_37: { struct kern37_value { std::uint64_t size;