diff --git a/src/media.c b/src/media.c index e3a1bcc..7bf2cc8 100644 --- a/src/media.c +++ b/src/media.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include @@ -78,19 +78,19 @@ int media_request_queue(int request_fd) int media_request_wait_completion(int request_fd) { - struct timeval tv = { 0, 300000 }; - fd_set except_fds; + /* poll() instead of select(): Firefox's RDD seccomp policy admits + * poll/ppoll but not select/pselect6 (as of FF150). Functionally + * equivalent here — the media request fd signals completion via + * exceptional condition, mapped to POLLPRI for poll(). */ + struct pollfd pfd = { .fd = request_fd, .events = POLLPRI }; int rc; - FD_ZERO(&except_fds); - FD_SET(request_fd, &except_fds); - - rc = select(request_fd + 1, NULL, NULL, &except_fds, &tv); + rc = poll(&pfd, 1, 300 /* ms */); if (rc == 0) { request_log("Timeout when waiting for media request\n"); return -1; } else if (rc < 0) { - request_log("Unable to select media request: %s\n", + request_log("Unable to poll media request: %s\n", strerror(errno)); return -1; }