[lxc-devel] [PATCH] aufs: support multiple lower layers

Christian Brauner christianvanbrauner at gmail.com
Sat Jan 23 23:17:36 UTC 2016


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 <christian.brauner at mailbox.org>
---
 src/lxc/bdev/lxcaufs.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/lxc/bdev/lxcaufs.c b/src/lxc/bdev/lxcaufs.c
index a5c34aa..408f6a3 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++;
-- 
2.7.0



More information about the lxc-devel mailing list