]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
uid-range: Handle same userns in uid_range_load_userns_by_fd() 40759/head
authorDaan De Meyer <daan@amutable.com>
Wed, 18 Feb 2026 18:30:12 +0000 (19:30 +0100)
committerDaan De Meyer <daan@amutable.com>
Thu, 19 Feb 2026 20:33:11 +0000 (21:33 +0100)
If we're asked to look up our own user namespace mapping, don't go
via fd as trying to setns() to our own user namespace in
userns_enter_and_pin() would fail with EPERM as the kernel doesn't
allow switching to your own userns.

src/basic/uid-range.c

index c498b5afe1f83bfe373b924288c35d72e0e9fa3a..1aaf760468b5c5bb55a4d7c37ad984809a8a2e68 100644 (file)
@@ -295,6 +295,12 @@ int uid_range_load_userns_by_fd(int userns_fd, UIDRangeUsernsMode mode, UIDRange
         assert(mode < _UID_RANGE_USERNS_MODE_MAX);
         assert(ret);
 
+        r = is_our_namespace(userns_fd, NAMESPACE_USER);
+        if (r < 0)
+                return r;
+        if (r > 0)
+                return uid_range_load_userns(/* path= */ NULL, mode, ret);
+
         r = userns_enter_and_pin(userns_fd, &pidref);
         if (r < 0)
                 return r;