diff options
author | Ludovic Courtès <ludo@gnu.org> | 2025-04-08 08:37:04 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2025-05-05 14:34:00 +0200 |
commit | 3aa132e8c30658019281d51caa28b0fb41bab24d (patch) | |
tree | 9ee9496ee890ec5087f784bd596d54911f763ee6 | |
parent | ce363c1dc7bd63a74dcf7788d340819f6d5db89f (diff) | |
download | guix-3aa132e8c30658019281d51caa28b0fb41bab24d.tar.gz guix-3aa132e8c30658019281d51caa28b0fb41bab24d.zip |
syscalls: Add ‘get-user-ns’.
* guix/build/syscalls.scm (NS_GET_USERNS): New variable.
(get-user-ns): New procedure.
Change-Id: I0cfba6a7cdf2ab64ef658b0f821ba4e7c6c89eab
-rw-r--r-- | guix/build/syscalls.scm | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index cf09cae3a4..9c64b40d77 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -147,6 +147,7 @@ clone unshare setns + get-user-ns kexec-load-file KEXEC_FILE_UNLOAD @@ -1247,6 +1248,19 @@ there is no such limitation." (list fdes nstype (strerror err)) (list err)))))))) +(define NS_GET_USERNS #xb701) + +(define (get-user-ns fdes) + "Return an open file descriptor to the user namespace that owns the +namespace pointed to by FDES, a file descriptor obtained by opening +/proc/PID/ns/*." + (let-values (((ret err) (%ioctl fdes NS_GET_USERNS %null-pointer))) + (when (< ret 0) + (throw 'system-error "get-user-ns" "~d: ~A" + (list fdes (strerror err)) + (list err))) + ret)) + (define pivot-root (let ((proc (syscall->procedure int "pivot_root" (list '* '*)))) (lambda (new-root put-old) |