diff options
Diffstat (limited to 'freebsd/sys/kern/sys_generic.c')
-rw-r--r-- | freebsd/sys/kern/sys_generic.c | 123 |
1 files changed, 28 insertions, 95 deletions
diff --git a/freebsd/sys/kern/sys_generic.c b/freebsd/sys/kern/sys_generic.c index 0d5193c7..9e41f0f6 100644 --- a/freebsd/sys/kern/sys_generic.c +++ b/freebsd/sys/kern/sys_generic.c @@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$"); #include <rtems/bsd/local/opt_capsicum.h> -#include <rtems/bsd/local/opt_compat.h> #include <rtems/bsd/local/opt_ktrace.h> #include <sys/param.h> @@ -201,9 +200,7 @@ struct read_args { }; #endif int -sys_read(td, uap) - struct thread *td; - struct read_args *uap; +sys_read(struct thread *td, struct read_args *uap) { struct uio auio; struct iovec aiov; @@ -296,10 +293,9 @@ int kern_readv(struct thread *td, int fd, struct uio *auio) { struct file *fp; - cap_rights_t rights; int error; - error = fget_read(td, fd, cap_rights_init(&rights, CAP_READ), &fp); + error = fget_read(td, fd, &cap_read_rights, &fp); if (error) return (error); error = dofileread(td, fd, fp, auio, (off_t)-1, 0); @@ -333,17 +329,12 @@ sys_preadv(struct thread *td, struct preadv_args *uap) } int -kern_preadv(td, fd, auio, offset) - struct thread *td; - int fd; - struct uio *auio; - off_t offset; +kern_preadv(struct thread *td, int fd, struct uio *auio, off_t offset) { struct file *fp; - cap_rights_t rights; int error; - error = fget_read(td, fd, cap_rights_init(&rights, CAP_PREAD), &fp); + error = fget_read(td, fd, &cap_pread_rights, &fp); if (error) return (error); if (!(fp->f_ops->fo_flags & DFLAG_SEEKABLE)) @@ -362,13 +353,8 @@ kern_preadv(td, fd, auio, offset) * from a file using the passed in uio, offset, and flags. */ static int -dofileread(td, fd, fp, auio, offset, flags) - struct thread *td; - int fd; - struct file *fp; - struct uio *auio; - off_t offset; - int flags; +dofileread(struct thread *td, int fd, struct file *fp, struct uio *auio, + off_t offset, int flags) { ssize_t cnt; int error; @@ -415,9 +401,7 @@ struct write_args { }; #endif int -sys_write(td, uap) - struct thread *td; - struct write_args *uap; +sys_write(struct thread *td, struct write_args *uap) { struct uio auio; struct iovec aiov; @@ -511,10 +495,9 @@ int kern_writev(struct thread *td, int fd, struct uio *auio) { struct file *fp; - cap_rights_t rights; int error; - error = fget_write(td, fd, cap_rights_init(&rights, CAP_WRITE), &fp); + error = fget_write(td, fd, &cap_write_rights, &fp); if (error) return (error); error = dofilewrite(td, fd, fp, auio, (off_t)-1, 0); @@ -548,17 +531,12 @@ sys_pwritev(struct thread *td, struct pwritev_args *uap) } int -kern_pwritev(td, fd, auio, offset) - struct thread *td; - struct uio *auio; - int fd; - off_t offset; +kern_pwritev(struct thread *td, int fd, struct uio *auio, off_t offset) { struct file *fp; - cap_rights_t rights; int error; - error = fget_write(td, fd, cap_rights_init(&rights, CAP_PWRITE), &fp); + error = fget_write(td, fd, &cap_pwrite_rights, &fp); if (error) return (error); if (!(fp->f_ops->fo_flags & DFLAG_SEEKABLE)) @@ -577,13 +555,8 @@ kern_pwritev(td, fd, auio, offset) * a file using the passed in uio, offset, and flags. */ static int -dofilewrite(td, fd, fp, auio, offset, flags) - struct thread *td; - int fd; - struct file *fp; - struct uio *auio; - off_t offset; - int flags; +dofilewrite(struct thread *td, int fd, struct file *fp, struct uio *auio, + off_t offset, int flags) { ssize_t cnt; int error; @@ -632,19 +605,15 @@ dofilewrite(td, fd, fp, auio, offset, flags) * descriptor isn't writable. */ int -kern_ftruncate(td, fd, length) - struct thread *td; - int fd; - off_t length; +kern_ftruncate(struct thread *td, int fd, off_t length) { struct file *fp; - cap_rights_t rights; int error; AUDIT_ARG_FD(fd); if (length < 0) return (EINVAL); - error = fget(td, fd, cap_rights_init(&rights, CAP_FTRUNCATE), &fp); + error = fget(td, fd, &cap_ftruncate_rights, &fp); if (error) return (error); AUDIT_ARG_FILE(td->td_proc, fp); @@ -665,9 +634,7 @@ struct ftruncate_args { }; #endif int -sys_ftruncate(td, uap) - struct thread *td; - struct ftruncate_args *uap; +sys_ftruncate(struct thread *td, struct ftruncate_args *uap) { return (kern_ftruncate(td, uap->fd, uap->length)); @@ -681,9 +648,7 @@ struct oftruncate_args { }; #endif int -oftruncate(td, uap) - struct thread *td; - struct oftruncate_args *uap; +oftruncate(struct thread *td, struct oftruncate_args *uap) { return (kern_ftruncate(td, uap->fd, uap->length)); @@ -772,9 +737,6 @@ kern_ioctl(struct thread *td, int fd, u_long com, caddr_t data) { struct file *fp; struct filedesc *fdp; -#ifndef CAPABILITIES - cap_rights_t rights; -#endif int error, tmp, locked; AUDIT_ARG_FD(fd); @@ -813,7 +775,7 @@ kern_ioctl(struct thread *td, int fd, u_long com, caddr_t data) locked = LA_UNLOCKED; } #else - error = fget(td, fd, cap_rights_init(&rights, CAP_IOCTL), &fp); + error = fget(td, fd, &cap_ioctl_rights, &fp); if (error != 0) { fp = NULL; goto out; @@ -1284,11 +1246,8 @@ selsetbits(fd_mask **ibits, fd_mask **obits, int idx, fd_mask bit, int events) static __inline int getselfd_cap(struct filedesc *fdp, int fd, struct file **fpp) { - cap_rights_t rights; - cap_rights_init(&rights, CAP_EVENT); - - return (fget_unlocked(fdp, fd, &rights, fpp, NULL)); + return (fget_unlocked(fdp, fd, &cap_event_rights, fpp, NULL)); } /* @@ -1342,10 +1301,7 @@ selrescan(struct thread *td, fd_mask **ibits, fd_mask **obits) * each selinfo. */ static int -selscan(td, ibits, obits, nfd) - struct thread *td; - fd_mask **ibits, **obits; - int nfd; +selscan(struct thread *td, fd_mask **ibits, fd_mask **obits, int nfd) { struct filedesc *fdp; struct file *fp; @@ -1573,9 +1529,6 @@ pollrescan(struct thread *td) struct filedesc *fdp; struct file *fp; struct pollfd *fd; -#ifdef CAPABILITIES - cap_rights_t rights; -#endif int n; n = 0; @@ -1600,8 +1553,7 @@ pollrescan(struct thread *td) #endif /* __rtems__ */ #ifdef CAPABILITIES if (fp == NULL || - cap_check(cap_rights(fdp, fd->fd), - cap_rights_init(&rights, CAP_EVENT)) != 0) + cap_check(cap_rights(fdp, fd->fd), &cap_event_rights) != 0) #else if (fp == NULL) #endif @@ -1630,11 +1582,7 @@ pollrescan(struct thread *td) static int -pollout(td, fds, ufds, nfd) - struct thread *td; - struct pollfd *fds; - struct pollfd *ufds; - u_int nfd; +pollout(struct thread *td, struct pollfd *fds, struct pollfd *ufds, u_int nfd) { int error = 0; u_int i = 0; @@ -1655,10 +1603,7 @@ pollout(td, fds, ufds, nfd) } static int -pollscan(td, fds, nfd) - struct thread *td; - struct pollfd *fds; - u_int nfd; +pollscan(struct thread *td, struct pollfd *fds, u_int nfd) { #ifndef __rtems__ struct filedesc *fdp = td->td_proc->p_fd; @@ -1666,9 +1611,6 @@ pollscan(td, fds, nfd) struct filedesc *fdp = NULL; #endif /* __rtems__ */ struct file *fp; -#ifdef CAPABILITIES - cap_rights_t rights; -#endif int i, n = 0; FILEDESC_SLOCK(fdp); @@ -1690,8 +1632,7 @@ pollscan(td, fds, nfd) #endif /* __rtems__ */ #ifdef CAPABILITIES if (fp == NULL || - cap_check(cap_rights(fdp, fds->fd), - cap_rights_init(&rights, CAP_EVENT)) != 0) + cap_check(cap_rights(fdp, fds->fd), &cap_event_rights) != 0) #else if (fp == NULL) #endif @@ -1822,8 +1763,7 @@ selfdfree(struct seltd *stp, struct selfd *sfp) /* Drain the waiters tied to all the selfd belonging the specified selinfo. */ void -seldrain(sip) - struct selinfo *sip; +seldrain(struct selinfo *sip) { /* @@ -1841,9 +1781,7 @@ seldrain(sip) * Record a select request. */ void -selrecord(selector, sip) - struct thread *selector; - struct selinfo *sip; +selrecord(struct thread *selector, struct selinfo *sip) { struct selfd *sfp; struct seltd *stp; @@ -1892,17 +1830,14 @@ selrecord(selector, sip) /* Wake up a selecting thread. */ void -selwakeup(sip) - struct selinfo *sip; +selwakeup(struct selinfo *sip) { doselwakeup(sip, -1); } /* Wake up a selecting thread, and set its priority. */ void -selwakeuppri(sip, pri) - struct selinfo *sip; - int pri; +selwakeuppri(struct selinfo *sip, int pri) { doselwakeup(sip, pri); } @@ -1911,9 +1846,7 @@ selwakeuppri(sip, pri) * Do a wakeup when a selectable event occurs. */ static void -doselwakeup(sip, pri) - struct selinfo *sip; - int pri; +doselwakeup(struct selinfo *sip, int pri) { struct selfd *sfp; struct selfd *sfn; |