[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