bunpen: add minimal landlock API

This commit is contained in:
2024-08-22 16:08:53 +00:00
parent 2c390a8b6d
commit 57e113137f
2 changed files with 37 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
// vim: set shiftwidth=2 :
use log;
use rt;
// kernel consts. TODO: extract these from kernel headers, somehow.
const __NR_landlock_create_ruleset = 444u64;
const LANDLOCK_CREATE_RULESET_VERSION = 1u64;
fn landlock_restrict() void = {
let abi = landlock_create_ruleset();
log::printfln("found landlock version {}", abi);
// TODO: restrict net, paths, etc
};
// checks the return value from a Linux syscall and, if found to be in error,
// returns the appropriate error. otherwise, returns the original value.
// borrowed from non-public hare internals: rt/+linux/errno.ha
fn wrap_return(r: u64) (rt::errno | u64) = {
if (r > -4096: u64) {
return (-(r: i64)): rt::errno;
};
return r;
};
// like `rt::syscall`, but maps negative return values to `errno`
fn syscall(num: u64, args: u64...) (rt::errno | u64) = {
return wrap_return(rt::syscall(num, args...));
};
// landlock_create_ruleset syscall
fn landlock_create_ruleset() u64 = {
const landlock_ruleset_attr_ptr = 0u64;
const size_ = 0u64;
return syscall(__NR_landlock_create_ruleset, landlock_ruleset_attr_ptr, size_, LANDLOCK_CREATE_RULESET_VERSION)!;
};

View File

@@ -22,5 +22,6 @@ export fn main() void = {
let my_name = os::args[0];
let exec_line = os::args[1..];
no_new_privs();
landlock_restrict();
do_exec(exec_line);
};