[lxc-devel] [PATCH] Check for symlinks before attempting create.
Michael H. Warfield
mhw at WittsEnd.com
Fri Apr 25 16:06:44 UTC 2014
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>
---
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!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 482 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140425/157686ec/attachment.sig>
More information about the lxc-devel
mailing list