]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
conf: add personality_t
authorChristian Brauner <christian.brauner@ubuntu.com>
Tue, 4 May 2021 14:09:48 +0000 (16:09 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Tue, 4 May 2021 14:09:48 +0000 (16:09 +0200)
Catch errors in personality handling better.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/attach.c
src/lxc/conf.c
src/lxc/conf.h
src/lxc/confile.c

index 929a6fea32812d164addbb02ffa5d451f3ac1a54..b3aa8ca08cedd56107d5e1ff51751251818364db 100644 (file)
@@ -95,7 +95,7 @@ struct attach_context {
        uid_t target_host_gid;
        char *lsm_label;
        struct lxc_container *container;
-       signed long personality;
+       personality_t personality;
        unsigned long long capability_mask;
        int ns_inherited;
        int ns_fd[LXC_NS_MAX];
@@ -197,7 +197,7 @@ static struct attach_context *alloc_attach_context(void)
 }
 
 static int get_personality(const char *name, const char *lxcpath,
-                          signed long *personality)
+                          personality_t *personality)
 {
        __do_free char *p = NULL;
        int ret;
@@ -1153,7 +1153,7 @@ __noreturn static void do_attach(struct attach_payload *ap)
                        new_personality = options->personality;
 
                if (new_personality != LXC_ARCH_UNCHANGED) {
-                       ret = personality(new_personality);
+                       ret = lxc_personality(new_personality);
                        if (ret < 0)
                                goto on_error;
 
index bd9849b078174a4a288cb844debb8d555f481da9..72e21b5300ce4ca9aee9c110797fbf3013b60d8f 100644 (file)
@@ -1728,14 +1728,14 @@ static int lxc_setup_devpts_child(struct lxc_handler *handler)
        return 0;
 }
 
-static int setup_personality(signed long persona)
+static int setup_personality(personality_t persona)
 {
        int ret;
 
        if (persona == LXC_ARCH_UNCHANGED)
                return log_debug(0, "Retaining original personality");
 
-       ret = personality(persona);
+       ret = lxc_personality(persona);
        if (ret < 0)
                return syserror("Failed to set personality to \"0lx%lx\"", persona);
 
index 969f75b9b4c20f5e5dead3c9298f3ffdcb988f42..a518e830a5d724976b39f57b12ccb72974d0f86e 100644 (file)
@@ -26,6 +26,7 @@
 #include "start.h"
 #include "storage/storage.h"
 #include "string_utils.h"
+#include "syscall_wrappers.h"
 #include "terminal.h"
 
 #if HAVE_SYS_RESOURCE_H
@@ -36,6 +37,8 @@
 typedef void * scmp_filter_ctx;
 #endif
 
+typedef signed long personality_t;
+
 /* worth moving to configure.ac? */
 #define subuidfile "/etc/subuid"
 #define subgidfile "/etc/subgid"
@@ -327,7 +330,7 @@ struct lxc_conf {
        const char *name;
        bool is_execute;
        int reboot;
-       signed long personality;
+       personality_t personality;
        struct utsname *utsname;
 
        struct {
@@ -628,4 +631,12 @@ static inline void lxc_clear_cgroup2_devices(struct bpf_devices *bpf_devices)
        lxc_list_init(&bpf_devices->device_item);
 }
 
+static inline int lxc_personality(personality_t persona)
+{
+       if (persona < 0)
+               return ret_errno(EINVAL);
+
+       return personality(persona);
+}
+
 #endif /* __LXC_CONF_H */
index d895568fb3cb8bfb25ad877af3410c66d7368e2c..524c151a5c15fce7526aa0d9167b275b80e09a0e 100644 (file)
@@ -1389,7 +1389,7 @@ static int set_config_personality(const char *key, const char *value,
                                  struct lxc_conf *lxc_conf, void *data)
 {
        int ret;
-       signed long personality;
+       personality_t personality;
 
        ret = lxc_config_parse_arch(value, &personality);
        if (ret < 0)