From: Christian Brauner Date: Wed, 3 Feb 2016 12:17:51 +0000 (+0100) Subject: no rootfs => mounts are always relative to hosts / X-Git-Tag: lxc-2.0.0.rc1~12^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F800%2Fhead;p=thirdparty%2Flxc.git no rootfs => mounts are always relative to hosts / All lxc.mount.entry entries will be relative to the hosts / when a container does not specify a lxc.rootfs. Signed-off-by: Christian Brauner --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 41e9ef83d..39a86c776 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -1807,7 +1807,22 @@ static inline int mount_entry_on_generic(struct mntent *mntent, static inline int mount_entry_on_systemfs(struct mntent *mntent) { - return mount_entry_on_generic(mntent, mntent->mnt_dir, NULL, NULL, NULL); + char path[MAXPATHLEN]; + int ret; + + /* For containers created without a rootfs all mounts are treated as + * absolute paths starting at / on the host. */ + if (mntent->mnt_dir[0] != '/') + ret = snprintf(path, sizeof(path), "/%s", mntent->mnt_dir); + else + ret = snprintf(path, sizeof(path), "%s", mntent->mnt_dir); + + if (ret < 0 || ret >= sizeof(path)) { + ERROR("path name too long"); + return -1; + } + + return mount_entry_on_generic(mntent, path, NULL, NULL, NULL); } static int mount_entry_on_absolute_rootfs(struct mntent *mntent, @@ -1868,7 +1883,7 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent, /* relative to root mount point */ ret = snprintf(path, sizeof(path), "%s/%s", rootfs->mount, mntent->mnt_dir); - if (ret >= sizeof(path)) { + if (ret < 0 || ret >= sizeof(path)) { ERROR("path name too long"); return -1; }