Date: Sat, 14 Oct 2017 19:03:45 +0200 From: Tijl Coosemans <tijl@FreeBSD.org> To: Chagin Dmitry <dchagin@freebsd.org>, emulation@FreeBSD.org Subject: [patch] Fix linux readlink of dead link Message-ID: <20171014190345.2d6bcf68@kalimero.tijl.coosemans.org>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi,
Can you review the attached patch? Currently kern_alternate_path follows
symbolic links which means it fails to return the alternate path if it's
a dead link. This means syscalls like readlink and lstat fail on a dead
link that exists under /compat/linux but not under /. I also think it's
better to report an error to applications that try to open such a path
instead of ignoring the link and trying the path under /.
[-- Attachment #2 --]
Index: sys/kern/vfs_lookup.c
===================================================================
--- sys/kern/vfs_lookup.c (revision 324614)
+++ sys/kern/vfs_lookup.c (working copy)
@@ -1390,13 +1390,13 @@ kern_alternate_path(struct thread *td, const char *pre
for (cp = &ptr[len] - 1; *cp != '/'; cp--);
*cp = '\0';
- NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, buf, td);
+ NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_SYSSPACE, buf, td);
error = namei(&nd);
*cp = '/';
if (error != 0)
goto keeporig;
} else {
- NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, buf, td);
+ NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_SYSSPACE, buf, td);
error = namei(&nd);
if (error != 0)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171014190345.2d6bcf68>
