Hi,
When calling revoke(2) on a no-tty device, we return ENOTTY without
relaxing the vnode obtained with namei().
Use the error code path instead to call vrele(vp) before returning
ENOTTY.
OK ?
--
Sebastien Marie
Index: kern/vfs_syscalls.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_syscalls.c,v
retrieving revision 1.257
diff -u -p -r1.257 vfs_syscalls.c
--- kern/vfs_syscalls.c 26 Jun 2016 14:27:14 -0000 1.257
+++ kern/vfs_syscalls.c 26 Jun 2016 16:21:29 -0000
@@ -2796,8 +2801,10 @@ sys_revoke(struct proc *p, void *v, regi
return (error);
vp = nd.ni_vp;
if (vp->v_type != VCHR || (u_int)major(vp->v_rdev) >= nchrdev ||
- cdevsw[major(vp->v_rdev)].d_type != D_TTY)
- return (ENOTTY);
+ cdevsw[major(vp->v_rdev)].d_type != D_TTY) {
+ error = ENOTTY;
+ goto out;
+ }
if ((error = VOP_GETATTR(vp, &vattr, p->p_ucred, p)) != 0)
goto out;
if (p->p_ucred->cr_uid != vattr.va_uid &&