O_PATH: Allow to open symlink
When O_NOFOLLOW is specified, namei() returns the symlink itself. In this case, open(O_PATH) should be allowed, to denote the location of symlink itself. Prevent O_EXEC in this case, execve(2) code is not ready to try to execute symlinks. Reported by: wulf Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D29323
This commit is contained in:
parent
a5970a529c
commit
f9b923af34
@ -385,8 +385,10 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
|
||||
accmode_t accmode;
|
||||
int error;
|
||||
|
||||
if (vp->v_type == VLNK)
|
||||
return (EMLINK);
|
||||
if (vp->v_type == VLNK) {
|
||||
if ((fmode & O_PATH) == 0 || (fmode & FEXEC) != 0)
|
||||
return (EMLINK);
|
||||
}
|
||||
if (vp->v_type == VSOCK)
|
||||
return (EOPNOTSUPP);
|
||||
if (vp->v_type != VDIR && fmode & O_DIRECTORY)
|
||||
|
Loading…
Reference in New Issue
Block a user