summaryrefslogtreecommitdiffstats
path: root/sys/cddl/compat/opensolaris
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cddl/compat/opensolaris')
-rw-r--r--sys/cddl/compat/opensolaris/sys/file.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/cddl/compat/opensolaris/sys/file.h b/sys/cddl/compat/opensolaris/sys/file.h
index 811b78c..7a3df36 100644
--- a/sys/cddl/compat/opensolaris/sys/file.h
+++ b/sys/cddl/compat/opensolaris/sys/file.h
@@ -36,12 +36,18 @@
#ifdef _KERNEL
typedef struct file file_t;
+#include <sys/capability.h>
+
static __inline file_t *
getf(int fd)
{
struct file *fp;
- if (fget(curthread, fd, &fp) == 0)
+ /*
+ * We wouldn't need all of these rights on every invocation
+ * if we had more information about intent.
+ */
+ if (fget(curthread, fd, CAP_READ | CAP_WRITE | CAP_SEEK, &fp) == 0)
return (fp);
return (NULL);
}
@@ -51,7 +57,8 @@ releasef(int fd)
{
struct file *fp;
- if (fget(curthread, fd, &fp) == 0) {
+ /* No CAP_ rights required, as we're only releasing. */
+ if (fget(curthread, fd, 0, &fp) == 0) {
fdrop(fp, curthread);
fdrop(fp, curthread);
}
OpenPOWER on IntegriCloud