update hypervisor
This commit is contained in:
@@ -31,10 +31,18 @@ local function loadExecutable(path)
|
|||||||
return func, euid, suid_set
|
return func, euid, suid_set
|
||||||
end
|
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
|
local id = nextpid
|
||||||
nextpid = nextpid + 1
|
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)] = {
|
tasks[tostring(id)] = {
|
||||||
coro = coroutine.create(function()
|
coro = coroutine.create(function()
|
||||||
local ok, err = xpcall(func, debug.traceback, table.unpack(args or {}))
|
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,
|
euid = eff_uid,
|
||||||
gid = (kernel.currentTask and kernel.currentTask.gid) or 0,
|
gid = (kernel.currentTask and kernel.currentTask.gid) or 0,
|
||||||
groups = (kernel.currentTask and kernel.currentTask.groups) or {},
|
groups = (kernel.currentTask and kernel.currentTask.groups) or {},
|
||||||
fd = {},
|
fd = fds,
|
||||||
sleep = 0,
|
sleep = 0,
|
||||||
ivs = 0,
|
ivs = 0,
|
||||||
vs = 0,
|
vs = 0,
|
||||||
@@ -93,14 +101,14 @@ local function createTask(func, name, envars, args, tgid, real_uid, eff_uid)
|
|||||||
return id
|
return id
|
||||||
end
|
end
|
||||||
|
|
||||||
function sys.spawn(func, name, envars, args, tgid)
|
function sys.spawn(func, name, envars, args, tgid, clearFds)
|
||||||
local caller = kernel.currentTask
|
local caller = kernel.currentTask
|
||||||
local real_uid = caller and caller.uid or kernel.uid
|
local real_uid = caller and caller.uid or kernel.uid
|
||||||
local eff_uid = caller and caller.euid or real_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
|
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 func, euid, suid_active = loadExecutable(path, kernel._U)
|
||||||
|
|
||||||
local caller = kernel.currentTask
|
local caller = kernel.currentTask
|
||||||
@@ -114,7 +122,7 @@ function sys.execspawn(path, name, envars, args, tgid)
|
|||||||
)
|
)
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function sys.exec(path, args, envars)
|
function sys.exec(path, args, envars)
|
||||||
|
|||||||
@@ -1222,7 +1222,7 @@ local function runCommand(command)
|
|||||||
-- compiled from disk by the kernel (via loadExecutable -> freshUserEnv),
|
-- compiled from disk by the kernel (via loadExecutable -> freshUserEnv),
|
||||||
-- so the child cannot share any upvalue or syscall table state with hysh.
|
-- so the child cannot share any upvalue or syscall table state with hysh.
|
||||||
syscall.exec(cmdPath, {table.unpack(args, 2)})
|
syscall.exec(cmdPath, {table.unpack(args, 2)})
|
||||||
end, progName)
|
end, progName, nil, nil, nil, true)
|
||||||
|
|
||||||
while true do
|
while true do
|
||||||
local exited, code = syscall.collect(proc)
|
local exited, code = syscall.collect(proc)
|
||||||
@@ -1231,7 +1231,7 @@ local function runCommand(command)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
if terminate then
|
if terminate then
|
||||||
local ok2 = syscall.kill(proc)
|
local ok2 = syscall.kill(proc, true)
|
||||||
if ok2 then
|
if ok2 then
|
||||||
syscall.devctl(1,"sbgc",16); syscall.devctl(1,"sfgc",0xFF0000)
|
syscall.devctl(1,"sbgc",16); syscall.devctl(1,"sfgc",0xFF0000)
|
||||||
print("\nProgram Terminated."); syscall.devctl(1,"sfgc",0xFFFFFF)
|
print("\nProgram Terminated."); syscall.devctl(1,"sfgc",0xFFFFFF)
|
||||||
|
|||||||
@@ -547,7 +547,7 @@ local spm = function(...)
|
|||||||
if cloptions.u then
|
if cloptions.u then
|
||||||
for i,v in ipairs(table.keys(pkgdb)) do
|
for i,v in ipairs(table.keys(pkgdb)) do
|
||||||
local pkg, err = getPkg(v)
|
local pkg, err = getPkg(v)
|
||||||
if pkg then
|
if pkg and not found[v] then
|
||||||
needed[#needed+1] = pkg
|
needed[#needed+1] = pkg
|
||||||
found[v]=true
|
found[v]=true
|
||||||
end
|
end
|
||||||
@@ -586,7 +586,7 @@ local spm = function(...)
|
|||||||
|
|
||||||
local files = {}
|
local files = {}
|
||||||
for _,v in ipairs(needed) do
|
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)
|
w("Downloading "..v.id)
|
||||||
local resp = get(v.tar)
|
local resp = get(v.tar)
|
||||||
if not resp then
|
if not resp then
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ for i,v in pairs(kernel.processes) do
|
|||||||
else
|
else
|
||||||
kernel.log("Successfully executed kernel task: " .. i)
|
kernel.log("Successfully executed kernel task: " .. i)
|
||||||
end
|
end
|
||||||
end, i)
|
end, i, nil,nil,nil,true)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- config file path setup
|
-- config file path setup
|
||||||
@@ -42,7 +42,7 @@ for i,v in ipairs(files) do
|
|||||||
else
|
else
|
||||||
kernel.log("Successfully executed startup script: " .. filepath)
|
kernel.log("Successfully executed startup script: " .. filepath)
|
||||||
end
|
end
|
||||||
end, "startup:" .. v)
|
end, "startup:" .. v, nil,nil,nil,true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
kernel.saveLog()
|
kernel.saveLog()
|
||||||
|
|||||||
Reference in New Issue
Block a user