Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linux/linux_event.c
Show First 20 Lines • Show All 415 Lines • ▼ Show 20 Lines | linux_epoll_ctl(struct thread *td, struct linux_epoll_ctl_args *args) | ||||
if (args->op != LINUX_EPOLL_CTL_DEL) { | if (args->op != LINUX_EPOLL_CTL_DEL) { | ||||
error = copyin(args->event, &le, sizeof(le)); | error = copyin(args->event, &le, sizeof(le)); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
} | } | ||||
error = fget(td, args->epfd, | error = fget(td, args->epfd, | ||||
cap_rights_init(&rights, CAP_KQUEUE_CHANGE), &epfp); | cap_rights_init_one(&rights, CAP_KQUEUE_CHANGE), &epfp); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
if (epfp->f_type != DTYPE_KQUEUE) { | if (epfp->f_type != DTYPE_KQUEUE) { | ||||
error = EINVAL; | error = EINVAL; | ||||
goto leave1; | goto leave1; | ||||
} | } | ||||
/* Protect user data vector from incorrectly supplied fd. */ | /* Protect user data vector from incorrectly supplied fd. */ | ||||
error = fget(td, args->fd, cap_rights_init(&rights, CAP_POLL_EVENT), &fp); | error = fget(td, args->fd, | ||||
cap_rights_init_one(&rights, CAP_POLL_EVENT), &fp); | |||||
if (error != 0) | if (error != 0) | ||||
goto leave1; | goto leave1; | ||||
/* Linux disallows spying on himself */ | /* Linux disallows spying on himself */ | ||||
if (epfp == fp) { | if (epfp == fp) { | ||||
error = EINVAL; | error = EINVAL; | ||||
goto leave0; | goto leave0; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | linux_epoll_wait_common(struct thread *td, int epfd, struct epoll_event *events, | ||||
struct file *epfp; | struct file *epfp; | ||||
sigset_t omask; | sigset_t omask; | ||||
int error; | int error; | ||||
if (maxevents <= 0 || maxevents > LINUX_MAX_EVENTS) | if (maxevents <= 0 || maxevents > LINUX_MAX_EVENTS) | ||||
return (EINVAL); | return (EINVAL); | ||||
error = fget(td, epfd, | error = fget(td, epfd, | ||||
cap_rights_init(&rights, CAP_KQUEUE_EVENT), &epfp); | cap_rights_init_one(&rights, CAP_KQUEUE_EVENT), &epfp); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
if (epfp->f_type != DTYPE_KQUEUE) { | if (epfp->f_type != DTYPE_KQUEUE) { | ||||
error = EINVAL; | error = EINVAL; | ||||
goto leave; | goto leave; | ||||
} | } | ||||
if (uset != NULL) { | if (uset != NULL) { | ||||
error = kern_sigprocmask(td, SIG_SETMASK, uset, | error = kern_sigprocmask(td, SIG_SETMASK, uset, | ||||
▲ Show 20 Lines • Show All 531 Lines • Show Last 20 Lines |