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

Serge Hallyn serge.hallyn at ubuntu.com
Tue Jan 26 18:51:04 UTC 2016


Quoting Christian Brauner (christianvanbrauner at gmail.com):
> 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>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  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;

Hm, so if lower = /some/path:/other/path, strstr will result in upper =
':', then you check --upper and up with upper pointing to the last 'h'
in /some/path.  Then you set that to \0.  I'm probably off since this
would've failed for you immediately, but why am I wrong?

>  	*upper = '\0';
>  	upper++;
> -- 
> 2.7.0
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list