svn commit: r306184 - head/sys/kern

Mariusz Zaborski oshogbo at FreeBSD.org
Thu Sep 22 11:54:22 UTC 2016


Author: oshogbo
Date: Thu Sep 22 11:54:20 2016
New Revision: 306184
URL: https://svnweb.freebsd.org/changeset/base/306184

Log:
  fd: simplify fgetvp_rights by using fget_cap_locked
  
  Reviewed by:	mjg

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Thu Sep 22 10:58:19 2016	(r306183)
+++ head/sys/kern/kern_descrip.c	Thu Sep 22 11:54:20 2016	(r306184)
@@ -2781,30 +2781,31 @@ fgetvp_rights(struct thread *td, int fd,
     struct filecaps *havecaps, struct vnode **vpp)
 {
 	struct filedesc *fdp;
+	struct filecaps caps;
 	struct file *fp;
-#ifdef CAPABILITIES
 	int error;
-#endif
 
 	fdp = td->td_proc->p_fd;
-	fp = fget_locked(fdp, fd);
-	if (fp == NULL || fp->f_ops == &badfileops)
-		return (EBADF);
-
-#ifdef CAPABILITIES
-	error = cap_check(cap_rights(fdp, fd), needrightsp);
+	error = fget_cap_locked(fdp, fd, needrightsp, &fp, &caps);
 	if (error != 0)
 		return (error);
-#endif
-
-	if (fp->f_vnode == NULL)
-		return (EINVAL);
+	if (fp->f_ops == &badfileops) {
+		error = EBADF;
+		goto out;
+	}
+	if (fp->f_vnode == NULL) {
+		error = EINVAL;
+		goto out;
+	}
 
+	*havecaps = caps;
 	*vpp = fp->f_vnode;
 	vref(*vpp);
-	filecaps_copy(&fdp->fd_ofiles[fd].fde_caps, havecaps, true);
 
 	return (0);
+out:
+	filecaps_free(&caps);
+	return (error);
 }
 
 int


More information about the svn-src-all mailing list