[lxc-devel] [PATCH] Check for symlinks before attempting create.

Serge Hallyn serge.hallyn at ubuntu.com
Mon Apr 28 15:22:29 UTC 2014


Quoting Michael H. Warfield (mhw at WittsEnd.com):
> Check for symlinks before attempting create.
> 
> When attempting to create the compulsory symlinks in /dev,
> check for the existence of the link using stat first before
> blindly attempting to create the link.
> 
> This works around an apparent quirk in the kernel VFS on read-only
> file systems where the returned error code might be EEXIST or EROFS
> depending on previous access to the /dev directory and its entries.
> 
> Signed-off-by: Michael H. Warfield <mhw at WittsEnd.com>

Thanks, Michael!

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

> ---
>  src/lxc/conf.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 06235fb..18da296 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -828,6 +828,7 @@ static int setup_dev_symlinks(const struct lxc_rootfs *rootfs)
>  {
>  	char path[MAXPATHLEN];
>  	int ret,i;
> +	struct stat s;
>  
>  
>  	for (i = 0; i < sizeof(dev_symlinks) / sizeof(dev_symlinks[0]); i++) {
> @@ -835,10 +836,24 @@ static int setup_dev_symlinks(const struct lxc_rootfs *rootfs)
>  		ret = snprintf(path, sizeof(path), "%s/dev/%s", rootfs->mount, d->name);
>  		if (ret < 0 || ret >= MAXPATHLEN)
>  			return -1;
> +
> +		/*
> +		 * Stat the path first.  If we don't get an error
> +		 * accept it as is and don't try to create it
> +		 */
> +		if (!stat(path, &s)) {
> +			continue;
> +		}
> +
>  		ret = symlink(d->oldpath, path);
> +
>  		if (ret && errno != EEXIST) {
> -			SYSERROR("Error creating %s", path);
> -			return -1;
> +			if ( errno == EROFS ) {
> +				WARN("Warning: Read Only file system while creating %s", path);
> +			} else {
> +				SYSERROR("Error creating %s", path);
> +				return -1;
> +			}
>  		}
>  	}
>  	return 0;
> -- 
> 1.9.0
> 
> 
> 
> 
> -- 
> Michael H. Warfield (AI4NB) | (770) 978-7061 |  mhw at WittsEnd.com
>    /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
>    NIC whois: MHW9          | An optimist believes we live in the best of all
>  PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!
> 



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