]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
check for NULL pointers before calling setenv() 638/head
authorRobert Schiele <rschiele@gmail.com>
Fri, 21 Aug 2015 05:35:34 +0000 (07:35 +0200)
committerRobert Schiele <rschiele@gmail.com>
Fri, 21 Aug 2015 10:41:50 +0000 (12:41 +0200)
Latest glibc release actually honours calling setenv with a NULL
pointer by causing SIGSEGV but checking pointers before submitting
to any system function is a good idea anyway.

Signed-off-by: Robert Schiele <rschiele@gmail.com>
src/lxc/lxccontainer.c
src/lxc/start.c

index 4918aabad8c6a591b811ea07e0383ea452165b1b..d7da125542c78a108277a6e7f728d8e85a6a49ec 100644 (file)
@@ -2174,16 +2174,16 @@ static bool container_destroy(struct lxc_container *c)
 
        if (conf && !lxc_list_empty(&conf->hooks[LXCHOOK_DESTROY])) {
                /* Start of environment variable setup for hooks */
-               if (setenv("LXC_NAME", c->name, 1)) {
+               if (c->name && setenv("LXC_NAME", c->name, 1)) {
                        SYSERROR("failed to set environment variable for container name");
                }
-               if (setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
+               if (conf->rcfile && setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
                        SYSERROR("failed to set environment variable for config path");
                }
-               if (setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) {
+               if (conf->rootfs.mount && setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) {
                        SYSERROR("failed to set environment variable for rootfs mount");
                }
-               if (setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
+               if (conf->rootfs.path && setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
                        SYSERROR("failed to set environment variable for rootfs mount");
                }
                if (conf->console.path && setenv("LXC_CONSOLE", conf->console.path, 1)) {
@@ -2743,19 +2743,19 @@ static int clone_update_rootfs(struct clone_update_data *data)
 
        if (!lxc_list_empty(&conf->hooks[LXCHOOK_CLONE])) {
                /* Start of environment variable setup for hooks */
-               if (setenv("LXC_SRC_NAME", c0->name, 1)) {
+               if (c0->name && setenv("LXC_SRC_NAME", c0->name, 1)) {
                        SYSERROR("failed to set environment variable for source container name");
                }
-               if (setenv("LXC_NAME", c->name, 1)) {
+               if (c->name && setenv("LXC_NAME", c->name, 1)) {
                        SYSERROR("failed to set environment variable for container name");
                }
-               if (setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
+               if (conf->rcfile && setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
                        SYSERROR("failed to set environment variable for config path");
                }
-               if (setenv("LXC_ROOTFS_MOUNT", bdev->dest, 1)) {
+               if (bdev->dest && setenv("LXC_ROOTFS_MOUNT", bdev->dest, 1)) {
                        SYSERROR("failed to set environment variable for rootfs mount");
                }
-               if (setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
+               if (conf->rootfs.path && setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
                        SYSERROR("failed to set environment variable for rootfs mount");
                }
 
index 2fc026ef3e57324ece11d8004074f3e93d1ce94d..ad8867eb5102efc5d792998f7bbf39a09849f92a 100644 (file)
@@ -406,16 +406,16 @@ struct lxc_handler *lxc_init(const char *name, struct lxc_conf *conf, const char
        }
 
        /* Start of environment variable setup for hooks */
-       if (setenv("LXC_NAME", name, 1)) {
+       if (name && setenv("LXC_NAME", name, 1)) {
                SYSERROR("failed to set environment variable for container name");
        }
-       if (setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
+       if (conf->rcfile && setenv("LXC_CONFIG_FILE", conf->rcfile, 1)) {
                SYSERROR("failed to set environment variable for config path");
        }
-       if (setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) {
+       if (conf->rootfs.mount && setenv("LXC_ROOTFS_MOUNT", conf->rootfs.mount, 1)) {
                SYSERROR("failed to set environment variable for rootfs mount");
        }
-       if (setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
+       if (conf->rootfs.path && setenv("LXC_ROOTFS_PATH", conf->rootfs.path, 1)) {
                SYSERROR("failed to set environment variable for rootfs mount");
        }
        if (conf->console.path && setenv("LXC_CONSOLE", conf->console.path, 1)) {