summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_event.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_event.c')
-rw-r--r--sys/kern/kern_event.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index 4c068bf..d23452a 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -835,10 +835,17 @@ kern_kevent(struct thread *td, int fd, int nchanges, int nevents,
cap_rights_t rights;
int i, n, nerrors, error;
- error = fget(td, fd, cap_rights_init(&rights, CAP_POST_EVENT), &fp);
+ cap_rights_init(&rights);
+ if (nchanges > 0)
+ cap_rights_set(&rights, CAP_KQUEUE_CHANGE);
+ if (nevents > 0)
+ cap_rights_set(&rights, CAP_KQUEUE_EVENT);
+ error = fget(td, fd, &rights, &fp);
if (error != 0)
return (error);
- if ((error = kqueue_acquire(fp, &kq)) != 0)
+
+ error = kqueue_acquire(fp, &kq);
+ if (error != 0)
goto done_norel;
nerrors = 0;
@@ -995,7 +1002,7 @@ findkn:
if (fops->f_isfd) {
KASSERT(td != NULL, ("td is NULL"));
error = fget(td, kev->ident,
- cap_rights_init(&rights, CAP_POLL_EVENT), &fp);
+ cap_rights_init(&rights, CAP_EVENT), &fp);
if (error)
goto done;
@@ -2279,7 +2286,7 @@ kqfd_register(int fd, struct kevent *kev, struct thread *td, int waitok)
cap_rights_t rights;
int error;
- error = fget(td, fd, cap_rights_init(&rights, CAP_POST_EVENT), &fp);
+ error = fget(td, fd, cap_rights_init(&rights, CAP_KQUEUE_CHANGE), &fp);
if (error != 0)
return (error);
if ((error = kqueue_acquire(fp, &kq)) != 0)
OpenPOWER on IntegriCloud