diff options
author | ed <ed@FreeBSD.org> | 2015-08-11 08:44:19 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2015-08-11 08:44:19 +0000 |
commit | 7e9beb0309df2f3a59a0e470282b5e9185cb0190 (patch) | |
tree | 395b467a141dfd82c83495efd98aa51bc28208e2 /sys/compat | |
parent | 8fba8d3894b0df35e793695331271458e1478729 (diff) | |
download | FreeBSD-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.c | 8 |
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); } |