summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2015-08-11 08:44:19 +0000
committered <ed@FreeBSD.org>2015-08-11 08:44:19 +0000
commit7e9beb0309df2f3a59a0e470282b5e9185cb0190 (patch)
tree395b467a141dfd82c83495efd98aa51bc28208e2 /sys/compat
parent8fba8d3894b0df35e793695331271458e1478729 (diff)
downloadFreeBSD-src-7e9beb0309df2f3a59a0e470282b5e9185cb0190.zip
FreeBSD-src-7e9beb0309df2f3a59a0e470282b5e9185cb0190.tar.gz
Make cap_rights_limit() work for CloudABI processes.
Call into the recently introduced kern_cap_rights_limit() function to restrict rights.
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/cloudabi/cloudabi_fd.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/compat/cloudabi/cloudabi_fd.c b/sys/compat/cloudabi/cloudabi_fd.c
index f16d668..5eab621 100644
--- a/sys/compat/cloudabi/cloudabi_fd.c
+++ b/sys/compat/cloudabi/cloudabi_fd.c
@@ -523,6 +523,7 @@ cloudabi_sys_fd_stat_put(struct thread *td,
struct cloudabi_sys_fd_stat_put_args *uap)
{
cloudabi_fdstat_t fsb;
+ cap_rights_t rights;
int error, oflags;
error = copyin(uap->buf, &fsb, sizeof(fsb));
@@ -540,6 +541,13 @@ cloudabi_sys_fd_stat_put(struct thread *td,
CLOUDABI_FDFLAG_DSYNC | CLOUDABI_FDFLAG_RSYNC))
oflags |= O_SYNC;
return (kern_fcntl(td, uap->fd, F_SETFL, oflags));
+ } else if (uap->flags == CLOUDABI_FDSTAT_RIGHTS) {
+ /* Convert rights. */
+ error = cloudabi_convert_rights(
+ fsb.fs_rights_base | fsb.fs_rights_inheriting, &rights);
+ if (error != 0)
+ return (error);
+ return (kern_cap_rights_limit(td, uap->fd, &rights));
}
return (EINVAL);
}
OpenPOWER on IntegriCloud