jail: add flag for passing the udebug socket
authorFelix Fietkau <nbd@nbd.name>
Wed, 28 May 2025 11:08:27 +0000 (13:08 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 28 May 2025 11:08:27 +0000 (13:08 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
jail/jail.c
service/instance.c
service/instance.h

index 7b7ac2b32d57e67b6db8e692936b8d5d2dddce3e..e7e4d6bf26da6bfd6613830462b10273ea87bae2 100644 (file)
@@ -69,7 +69,7 @@
 #endif
 
 #define STACK_SIZE     (1024 * 1024)
-#define OPT_ARGS       "cC:d:e:EfFG:h:ij:J:ln:NoO:pP:r:R:sS:uU:w:t:T:y"
+#define OPT_ARGS       "cC:d:De:EfFG:h:ij:J:ln:NoO:pP:r:R:sS:uU:w:t:T:y"
 
 #define OCI_VERSION_STRING "1.0.2"
 
@@ -1026,6 +1026,7 @@ static void usage(void)
        fprintf(stderr, "  -s\t\tjail has /sys\n");
        fprintf(stderr, "  -l\t\tjail has /dev/log\n");
        fprintf(stderr, "  -u\t\tjail has a ubus socket\n");
+       fprintf(stderr, "  -D\t\tjail has a udebug socket\n");
        fprintf(stderr, "  -U <name>\tuser to run jailed process\n");
        fprintf(stderr, "  -G <name>\tgroup to run jailed process\n");
        fprintf(stderr, "  -o\t\tremont jail root (/) read only\n");
@@ -2593,6 +2594,7 @@ int main(int argc, char **argv)
        uid_t uid = getuid();
        const char log[] = "/dev/log";
        const char ubus[] = "/var/run/ubus/ubus.sock";
+       const char udebug[] = "/var/run/udebug.sock";
        int ret = EXIT_FAILURE;
        int ch;
        char *tmp;
@@ -2704,6 +2706,10 @@ int main(int argc, char **argv)
                        opts.namespace |= CLONE_NEWNS;
                        add_mount_bind(ubus, 0, -1);
                        break;
+               case 'D':
+                       opts.namespace |= CLONE_NEWNS;
+                       add_mount_bind(udebug, 0, -1);
+                       break;
                case 'l':
                        opts.namespace |= CLONE_NEWNS;
                        add_mount_bind(log, 0, -1);
index df8c09b0fcb022be3014d65d4a1f98abbd5d6f7f..b611c0f68b04c7bc66f029947ff34c4e745abf05 100644 (file)
@@ -111,6 +111,7 @@ enum {
        JAIL_ATTR_PROCFS,
        JAIL_ATTR_SYSFS,
        JAIL_ATTR_UBUS,
+       JAIL_ATTR_UDEBUG,
        JAIL_ATTR_LOG,
        JAIL_ATTR_RONLY,
        JAIL_ATTR_MOUNT,
@@ -131,6 +132,7 @@ static const struct blobmsg_policy jail_attr[__JAIL_ATTR_MAX] = {
        [JAIL_ATTR_PROCFS] = { "procfs", BLOBMSG_TYPE_BOOL },
        [JAIL_ATTR_SYSFS] = { "sysfs", BLOBMSG_TYPE_BOOL },
        [JAIL_ATTR_UBUS] = { "ubus", BLOBMSG_TYPE_BOOL },
+       [JAIL_ATTR_UDEBUG] = { "udebug", BLOBMSG_TYPE_BOOL },
        [JAIL_ATTR_LOG] = { "log", BLOBMSG_TYPE_BOOL },
        [JAIL_ATTR_RONLY] = { "ronly", BLOBMSG_TYPE_BOOL },
        [JAIL_ATTR_MOUNT] = { "mount", BLOBMSG_TYPE_TABLE },
@@ -344,6 +346,9 @@ jail_run(struct service_instance *in, char **argv)
        if (jail->ubus)
                argv[argc++] = "-u";
 
+       if (jail->udebug)
+               argv[argc++] = "-D";
+
        if (jail->log)
                argv[argc++] = "-l";
 
@@ -1171,6 +1176,10 @@ instance_jail_parse(struct service_instance *in, struct blob_attr *attr)
                jail->ubus = true;
                jail->argc++;
        }
+       if (tb[JAIL_ATTR_UDEBUG] && blobmsg_get_bool(tb[JAIL_ATTR_UDEBUG])) {
+               jail->udebug = true;
+               jail->argc++;
+       }
        if (tb[JAIL_ATTR_LOG] && blobmsg_get_bool(tb[JAIL_ATTR_LOG])) {
                jail->log = true;
                jail->argc++;
index 215cbc77ed8aa5af30f7f326ece53b2a97fd8415..32fae194a3c8854837ceaaa5ad4d51c719f2e18c 100644 (file)
@@ -29,6 +29,7 @@ struct jail {
                        uint32_t procfs:1;
                        uint32_t sysfs:1;
                        uint32_t ubus:1;
+                       uint32_t udebug:1;
                        uint32_t log:1;
                        uint32_t ronly:1;
                        uint32_t netns:1;