From: Christian Brauner Date: Sat, 23 Jan 2016 23:17:36 +0000 (+0100) Subject: aufs: support multiple lower layers X-Git-Tag: lxc-2.0.0.beta2~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=410d0f6e5cff1ded97f8dc4c7a9b05236647b86b;p=thirdparty%2Flxc.git aufs: support multiple lower layers Do it in a safe way by using strstr() to check for the substring ":/" should ':' be part of a pathname. Signed-off-by: Christian Brauner Acked-by: Serge E. Hallyn --- diff --git a/src/lxc/bdev/lxcaufs.c b/src/lxc/bdev/lxcaufs.c index a5c34aa66..408f6a385 100644 --- a/src/lxc/bdev/lxcaufs.c +++ b/src/lxc/bdev/lxcaufs.c @@ -234,7 +234,7 @@ int aufs_detect(const char *path) int aufs_mount(struct bdev *bdev) { - char *options, *dup, *lower, *upper; + char *tmp, *options, *dup, *lower, *upper; int len; unsigned long mntflags; char *mntdata; @@ -250,9 +250,15 @@ int aufs_mount(struct bdev *bdev) // mount -t aufs -obr=${upper}=rw:${lower}=ro lower dest dup = alloca(strlen(bdev->src)+1); strcpy(dup, bdev->src); - if (!(lower = strchr(dup, ':'))) - return -22; - if (!(upper = strchr(++lower, ':'))) + /* support multiple lower layers */ + if (!(lower = strstr(dup, ":/"))) + return -22; + lower++; + upper = lower; + while ((tmp = strstr(++upper, ":/"))) { + upper = tmp; + } + if (--upper == lower) return -22; *upper = '\0'; upper++;