Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Mar 2011 19:01:23 +0200
From:      Kostik Belousov <kostikbel@gmail.com>
To:        freebsd-fs@freebsd.org, freebsd-standards@freebsd.org
Subject:   open(O_NOFOLLOW) error when encountered symlink
Message-ID:  <20110312170123.GT78089@deviant.kiev.zoral.com.ua>

next in thread | raw e-mail | index | archive | help

--oT9u3ind7B9FXzeC
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hello,
I noted the following discussion and commits in the gnu tar repository:

http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00080.html

http://git.savannah.gnu.org/cgit/tar.git/commit/?id=1584b72ff271e7f826dd64d7a1c7cd2f66504acb
http://git.savannah.gnu.org/cgit/tar.git/commit/?id=649b747913d2b289e904b5f1d222af886acd209c

The issue is that in case of open(path, O_NOFOLLOW), when path is naming
a symlink, FreeBSD returns EMLINK error. On the other hand, the POSIX
requirement is absolutely clear that it shall be ELOOP.

I found FreeBSD commit r35088 that specifically changed the error code
from the required ELOOP to EMLINK. I doubt that somebody can remember
a reason for the change done more then 12 years ago.

Anybody have strong objections against the patch below ?

diff --git a/lib/libc/sys/open.2 b/lib/libc/sys/open.2
index deca8bc..20877b5 100644
--- a/lib/libc/sys/open.2
+++ b/lib/libc/sys/open.2
@@ -318,7 +318,7 @@ is specified and the named file would reside on a read-only file system.
 The process has already reached its limit for open file descriptors.
 .It Bq Er ENFILE
 The system file table is full.
-.It Bq Er EMLINK
+.It Bq Er ELOOP
 .Dv O_NOFOLLOW
 was specified and the target is a symbolic link.
 .It Bq Er ENXIO
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 7b5cad1..c7985ef 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -194,7 +194,7 @@ restart:
 		vp = ndp->ni_vp;
 	}
 	if (vp->v_type == VLNK) {
-		error = EMLINK;
+		error = ELOOP;
 		goto bad;
 	}
 	if (vp->v_type == VSOCK) {

--oT9u3ind7B9FXzeC
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (FreeBSD)

iEYEARECAAYFAk17puMACgkQC3+MBN1Mb4ig0ACcDtap15B/FoQHS7dsaErvo3NU
WbgAoO8kSt4R5lAnVBPQBFu5ZFFLvl9B
=JrMX
-----END PGP SIGNATURE-----

--oT9u3ind7B9FXzeC--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110312170123.GT78089>