]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nspawn: Check later whether to keep/drop CAP_NET_BIND_SERVICE
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 5 Dec 2023 09:24:13 +0000 (10:24 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 6 Dec 2023 23:07:26 +0000 (23:07 +0000)
Currently the check doesn't take any settings from nspawn settings
files into account, so let's delay the check until after we've
loaded any settings file.

src/nspawn/nspawn.c

index 8ac86eeb559c1dc2596c72dbc9ce7335cb7aff4a..6ab604d3dcca5357524f694a93816ce2c65429db 100644 (file)
@@ -1632,13 +1632,6 @@ static int parse_argv(int argc, char *argv[]) {
 
         arg_caps_retain |= plus;
         arg_caps_retain |= arg_private_network ? UINT64_C(1) << CAP_NET_ADMIN : 0;
-
-        /* If we're not unsharing the network namespace and are unsharing the user namespace, we won't have
-         * permissions to bind ports in the container, so let's drop the CAP_NET_BIND_SERVICE capability to
-         * indicate that. */
-        if (!arg_private_network && arg_userns_mode != USER_NAMESPACE_NO && arg_uid_shift > 0)
-                arg_caps_retain &= ~(UINT64_C(1) << CAP_NET_BIND_SERVICE);
-
         arg_caps_retain &= ~minus;
 
         /* Make sure to parse environment before we reset the settings mask below */
@@ -5420,6 +5413,12 @@ static int run(int argc, char *argv[]) {
         if (r < 0)
                 goto finish;
 
+        /* If we're not unsharing the network namespace and are unsharing the user namespace, we won't have
+         * permissions to bind ports in the container, so let's drop the CAP_NET_BIND_SERVICE capability to
+         * indicate that. */
+        if (!arg_private_network && arg_userns_mode != USER_NAMESPACE_NO && arg_uid_shift > 0)
+                arg_caps_retain &= ~(UINT64_C(1) << CAP_NET_BIND_SERVICE);
+
         r = cg_unified();
         if (r < 0) {
                 log_error_errno(r, "Failed to determine whether the unified cgroups hierarchy is used: %m");