diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-17 15:48:40 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-17 15:48:40 +0900 |
| commit | b852402f67b22a3a850ce4eb1305a3ce5898d128 (patch) | |
| tree | 76ca77ab869198d5327e9557d8db897c0d6ec356 /container/syscall.go | |
| parent | 6d015a949e27f20c86409c7d78053f0b0493f165 (diff) | |
ext: move syscall wrappers from container
These are generally useful, and none of them are container-specific. Syscalls subtle to use and requiring container-specific setup remains in container.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/syscall.go')
| -rw-r--r-- | container/syscall.go | 51 |
1 files changed, 2 insertions, 49 deletions
diff --git a/container/syscall.go b/container/syscall.go index f5c634b0..c71e298c 100644 --- a/container/syscall.go +++ b/container/syscall.go @@ -7,40 +7,9 @@ import ( "hakurei.app/ext" ) -// Prctl manipulates various aspects of the behavior of the calling thread or process. -func Prctl(op, arg2, arg3 uintptr) error { - r, _, errno := Syscall(SYS_PRCTL, op, arg2, arg3) - if r < 0 { - return errno - } - return nil -} - -// SetPtracer allows processes to ptrace(2) the calling process. -func SetPtracer(pid uintptr) error { return Prctl(PR_SET_PTRACER, pid, 0) } - -// linux/sched/coredump.h -const ( - SUID_DUMP_DISABLE = iota - SUID_DUMP_USER -) - -// SetDumpable sets the "dumpable" attribute of the calling process. -func SetDumpable(dumpable uintptr) error { return Prctl(PR_SET_DUMPABLE, dumpable, 0) } - // SetNoNewPrivs sets the calling thread's no_new_privs attribute. -func SetNoNewPrivs() error { return Prctl(PR_SET_NO_NEW_PRIVS, 1, 0) } - -// Isatty tests whether a file descriptor refers to a terminal. -func Isatty(fd int) bool { - var buf [8]byte - r, _, _ := Syscall( - SYS_IOCTL, - uintptr(fd), - TIOCGWINSZ, - uintptr(unsafe.Pointer(&buf[0])), - ) - return r == 0 +func SetNoNewPrivs() error { + return ext.Prctl(PR_SET_NO_NEW_PRIVS, 1, 0) } // schedParam is equivalent to struct sched_param from include/linux/sched.h. @@ -73,19 +42,3 @@ func schedSetscheduler(tid int, policy ext.SchedPolicy, param *schedParam) error } return nil } - -// IgnoringEINTR makes a function call and repeats it if it returns an -// EINTR error. This appears to be required even though we install all -// signal handlers with SA_RESTART: see #22838, #38033, #38836, #40846. -// Also #20400 and #36644 are issues in which a signal handler is -// installed without setting SA_RESTART. None of these are the common case, -// but there are enough of them that it seems that we can't avoid -// an EINTR loop. -func IgnoringEINTR(fn func() error) error { - for { - err := fn() - if err != EINTR { - return err - } - } -} |
