Author: ed
Date: Wed Jul 29 17:16:53 2015
New Revision: 286020
URL: https://svnweb.freebsd.org/changeset/base/286020

Log:
  Introduce falloc_caps() to create descriptors with capabilties in place.
  
  falloc_noinstall() followed by finstall() allows you to create and
  install file descriptors with custom capabilities. Add falloc_caps()
  that can do both of these actions in one go.
  
  This will be used by CloudABI to create pipes with custom capabilities.
  
  Reviewed by:  mjg

Modified:
  head/sys/kern/kern_descrip.c
  head/sys/sys/filedesc.h

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Wed Jul 29 17:05:42 2015        
(r286019)
+++ head/sys/kern/kern_descrip.c        Wed Jul 29 17:16:53 2015        
(r286020)
@@ -1707,7 +1707,8 @@ fdallocn(struct thread *td, int minfd, i
  * release the FILEDESC lock.
  */
 int
-falloc(struct thread *td, struct file **resultfp, int *resultfd, int flags)
+falloc_caps(struct thread *td, struct file **resultfp, int *resultfd, int 
flags,
+    struct filecaps *fcaps)
 {
        struct file *fp;
        int error, fd;
@@ -1716,7 +1717,7 @@ falloc(struct thread *td, struct file **
        if (error)
                return (error);         /* no reference held on error */
 
-       error = finstall(td, fp, &fd, flags, NULL);
+       error = finstall(td, fp, &fd, flags, fcaps);
        if (error) {
                fdrop(fp, td);          /* one reference (fp only) */
                return (error);

Modified: head/sys/sys/filedesc.h
==============================================================================
--- head/sys/sys/filedesc.h     Wed Jul 29 17:05:42 2015        (r286019)
+++ head/sys/sys/filedesc.h     Wed Jul 29 17:16:53 2015        (r286020)
@@ -146,6 +146,10 @@ enum {
 /* Flags for kern_dup(). */
 #define        FDDUP_FLAG_CLOEXEC      0x1     /* Atomically set UF_EXCLOSE. */
 
+/* For backward compatibility. */
+#define        falloc(td, resultfp, resultfd, flags) \
+       falloc_caps(td, resultfp, resultfd, flags, NULL)
+
 struct thread;
 
 void   filecaps_init(struct filecaps *fcaps);
@@ -156,8 +160,8 @@ void        filecaps_free(struct filecaps *fcap
 int    closef(struct file *fp, struct thread *td);
 int    dupfdopen(struct thread *td, struct filedesc *fdp, int dfd, int mode,
            int openerror, int *indxp);
-int    falloc(struct thread *td, struct file **resultfp, int *resultfd,
-           int flags);
+int    falloc_caps(struct thread *td, struct file **resultfp, int *resultfd,
+           int flags, struct filecaps *fcaps);
 int    falloc_noinstall(struct thread *td, struct file **resultfp);
 void   _finstall(struct filedesc *fdp, struct file *fp, int fd, int flags,
            struct filecaps *fcaps);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to