]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
aufs: support multiple lower layers
authorChristian Brauner <christianvanbrauner@gmail.com>
Sat, 23 Jan 2016 23:17:36 +0000 (00:17 +0100)
committerStéphane Graber <stgraber@ubuntu.com>
Thu, 28 Jan 2016 11:02:23 +0000 (12:02 +0100)
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@mailbox.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/bdev/lxcaufs.c

index a5c34aa661163bd55fca2d7490893054e5b32c2a..408f6a38516689cca82b58c0c9d1f69b3360973f 100644 (file)
@@ -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++;