summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2025-12-17 18:01:04 +0100
committerLudovic Courtès <ludo@gnu.org>2025-12-19 00:05:43 +0100
commit7b9c30de1fba4ec190ca7fb6f2d85ddc802f7778 (patch)
treef5339f085d0c5a36a76c2aea9d657aac87209789
parent0c60cfcd37476fabfc5e8a945edecdfb22783370 (diff)
environment: Do not attempt to map GID 0 when invoked as root.
* guix/scripts/environment.scm (launch-environment/container): Set ‘gid’ to 1000 when ‘getgid’ returns zero. Fixes: guix/guix#4234 Reported-by: Maxim Cournoyer <maxim@guixotic.coop> Change-Id: I781f2939dfd3cda23373d2fa03e288995bce9eb9
-rw-r--r--guix/scripts/environment.scm8
1 files changed, 7 insertions, 1 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 1b3b1312ea3..b2e715c6ddd 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -828,7 +828,13 @@ WHILE-LIST."
(let* ((cwd (getcwd))
(home (getenv "HOME"))
(uid (if user 1000 (getuid)))
- (gid (if user 1000 (getgid)))
+ (gid (if user
+ 1000
+ ;; When running as root, always map a non-zero GID
+ ;; or writing to 'gid_map' would fail with EPERM.
+ (match (getgid)
+ (0 1000)
+ (gid gid))))
;; On a foreign distro, the name service switch might be
;; dysfunctional and 'getpwuid' throws. Don't let that hamper