From bb28d246747690cfef15c63c71d6dead63af1ced Mon Sep 17 00:00:00 2001 From: Astronand Date: Sat, 15 Aug 2026 22:38:35 -0400 Subject: [PATCH] update hypervisor --- .../lib/modules/hyperion/45_hypervisor.kmod | 20 ++++++++++++------ Src/hysh/data/bin/hysh | 4 ++-- Src/spm/data/bin/spm | 4 ++-- Src/sysinit/data/usr/lib/sysinit/sysinit | 4 ++-- out | Bin 3904 -> 0 bytes 5 files changed, 20 insertions(+), 12 deletions(-) delete mode 100644 out diff --git a/Src/Hyperion-kernel/data/lib/modules/hyperion/45_hypervisor.kmod b/Src/Hyperion-kernel/data/lib/modules/hyperion/45_hypervisor.kmod index 9ab0178..6ad7531 100644 --- a/Src/Hyperion-kernel/data/lib/modules/hyperion/45_hypervisor.kmod +++ b/Src/Hyperion-kernel/data/lib/modules/hyperion/45_hypervisor.kmod @@ -31,10 +31,18 @@ local function loadExecutable(path) return func, euid, suid_set end -local function createTask(func, name, envars, args, tgid, real_uid, eff_uid) +local function createTask(func, name, envars, args, tgid, real_uid, eff_uid, clearFds) local id = nextpid nextpid = nextpid + 1 + local fds={} + if not clearFds then + for id, file in pairs(kernel.currentTask.fd) do + file.refcount=file.refcount+1 + fds[id]=file + end + end + tasks[tostring(id)] = { coro = coroutine.create(function() local ok, err = xpcall(func, debug.traceback, table.unpack(args or {})) @@ -71,7 +79,7 @@ local function createTask(func, name, envars, args, tgid, real_uid, eff_uid) euid = eff_uid, gid = (kernel.currentTask and kernel.currentTask.gid) or 0, groups = (kernel.currentTask and kernel.currentTask.groups) or {}, - fd = {}, + fd = fds, sleep = 0, ivs = 0, vs = 0, @@ -93,14 +101,14 @@ local function createTask(func, name, envars, args, tgid, real_uid, eff_uid) return id end -function sys.spawn(func, name, envars, args, tgid) +function sys.spawn(func, name, envars, args, tgid, clearFds) local caller = kernel.currentTask local real_uid = caller and caller.uid or kernel.uid local eff_uid = caller and caller.euid or real_uid - return createTask(func, name, envars, args, tgid, real_uid, eff_uid) + return createTask(func, name, envars, args, tgid, real_uid, eff_uid, clearFds) end -function sys.execspawn(path, name, envars, args, tgid) +function sys.execspawn(path, name, envars, args, tgid, keepFds) local func, euid, suid_active = loadExecutable(path, kernel._U) local caller = kernel.currentTask @@ -114,7 +122,7 @@ function sys.execspawn(path, name, envars, args, tgid) ) end - return createTask(func, name or path, envars, args, tgid, real_uid, euid) + return createTask(func, name or path, envars, args, tgid, real_uid, euid, not keepFds) end function sys.exec(path, args, envars) diff --git a/Src/hysh/data/bin/hysh b/Src/hysh/data/bin/hysh index 3e178f9..abb0bec 100644 --- a/Src/hysh/data/bin/hysh +++ b/Src/hysh/data/bin/hysh @@ -1222,7 +1222,7 @@ local function runCommand(command) -- compiled from disk by the kernel (via loadExecutable -> freshUserEnv), -- so the child cannot share any upvalue or syscall table state with hysh. syscall.exec(cmdPath, {table.unpack(args, 2)}) - end, progName) + end, progName, nil, nil, nil, true) while true do local exited, code = syscall.collect(proc) @@ -1231,7 +1231,7 @@ local function runCommand(command) return end if terminate then - local ok2 = syscall.kill(proc) + local ok2 = syscall.kill(proc, true) if ok2 then syscall.devctl(1,"sbgc",16); syscall.devctl(1,"sfgc",0xFF0000) print("\nProgram Terminated."); syscall.devctl(1,"sfgc",0xFFFFFF) diff --git a/Src/spm/data/bin/spm b/Src/spm/data/bin/spm index 09e3b13..fc04121 100644 --- a/Src/spm/data/bin/spm +++ b/Src/spm/data/bin/spm @@ -547,7 +547,7 @@ local spm = function(...) if cloptions.u then for i,v in ipairs(table.keys(pkgdb)) do local pkg, err = getPkg(v) - if pkg then + if pkg and not found[v] then needed[#needed+1] = pkg found[v]=true end @@ -586,7 +586,7 @@ local spm = function(...) local files = {} for _,v in ipairs(needed) do - if not pkgdb[v.id] or not pkgdb[v.id].hash==v.hash then + if not pkgdb[v.id] or not pkgdb[v.id].hash==v.hash or cloptions.u then w("Downloading "..v.id) local resp = get(v.tar) if not resp then diff --git a/Src/sysinit/data/usr/lib/sysinit/sysinit b/Src/sysinit/data/usr/lib/sysinit/sysinit index 0b67bfa..dd9ec91 100644 --- a/Src/sysinit/data/usr/lib/sysinit/sysinit +++ b/Src/sysinit/data/usr/lib/sysinit/sysinit @@ -14,7 +14,7 @@ for i,v in pairs(kernel.processes) do else kernel.log("Successfully executed kernel task: " .. i) end - end, i) + end, i, nil,nil,nil,true) end -- config file path setup @@ -42,7 +42,7 @@ for i,v in ipairs(files) do else kernel.log("Successfully executed startup script: " .. filepath) end - end, "startup:" .. v) + end, "startup:" .. v, nil,nil,nil,true) end end kernel.saveLog() diff --git a/out b/out deleted file mode 100644 index f7d6e4dbbf43e9ab4b9b0f2f679b59f98519bf4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 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%0A(|G(?|{Ns9VeYdxn_T4^Xx%u~x zLN}g$-#_o!z5m8`lDr@Zm&TLwEAO9>@63)hdVWLdn6l>EU-#GjSAAb^D=WJ{