Module Name: src Committed By: riastradh Date: Wed Dec 18 16:01:28 UTC 2024
Modified Files: src/sys/kern: sys_timerfd.c src/tests/lib/libc/sys: t_timerfd.c Log Message: timerfd(2): Do not claim writable. Writes will fail with EOPNOTSUPP. PR kern/58916: timerfd(2) claims ready for write To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/kern/sys_timerfd.c cvs rdiff -u -r1.5 -r1.6 src/tests/lib/libc/sys/t_timerfd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/sys_timerfd.c diff -u src/sys/kern/sys_timerfd.c:1.8 src/sys/kern/sys_timerfd.c:1.9 --- src/sys/kern/sys_timerfd.c:1.8 Thu Feb 17 16:28:29 2022 +++ src/sys/kern/sys_timerfd.c Wed Dec 18 16:01:28 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_timerfd.c,v 1.8 2022/02/17 16:28:29 thorpej Exp $ */ +/* $NetBSD: sys_timerfd.c,v 1.9 2024/12/18 16:01:28 riastradh Exp $ */ /*- * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_timerfd.c,v 1.8 2022/02/17 16:28:29 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_timerfd.c,v 1.9 2024/12/18 16:01:28 riastradh Exp $"); /* * timerfd @@ -337,7 +337,7 @@ static int timerfd_fop_poll(file_t * const fp, int const events) { struct timerfd * const tfd = fp->f_timerfd; - int revents = events & (POLLOUT | POLLWRNORM); + int revents = 0; if (events & (POLLIN | POLLRDNORM)) { itimer_lock(); Index: src/tests/lib/libc/sys/t_timerfd.c diff -u src/tests/lib/libc/sys/t_timerfd.c:1.5 src/tests/lib/libc/sys/t_timerfd.c:1.6 --- src/tests/lib/libc/sys/t_timerfd.c:1.5 Sat Jul 8 15:32:58 2023 +++ src/tests/lib/libc/sys/t_timerfd.c Wed Dec 18 16:01:28 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_timerfd.c,v 1.5 2023/07/08 15:32:58 riastradh Exp $ */ +/* $NetBSD: t_timerfd.c,v 1.6 2024/12/18 16:01:28 riastradh Exp $ */ /*- * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ #include <sys/cdefs.h> __COPYRIGHT("@(#) Copyright (c) 2020\ The NetBSD Foundation, inc. All rights reserved."); -__RCSID("$NetBSD: t_timerfd.c,v 1.5 2023/07/08 15:32:58 riastradh Exp $"); +__RCSID("$NetBSD: t_timerfd.c,v 1.6 2024/12/18 16:01:28 riastradh Exp $"); #include <sys/types.h> #include <sys/event.h> @@ -391,20 +391,19 @@ ATF_TC_BODY(timerfd_select_poll_kevent_i ATF_REQUIRE(kevent(kq, kev, 1, NULL, 0, &ts) == 0); /* - * fd should be writable but not readable. Pass all of the - * event bits; we should only get back POLLOUT | POLLWRNORM. - * (It's writable only in so far as we'll get an error if we try.) + * fd should not be ready for anything. Pass all of the event + * bits; we should get back nothing. */ fds[0].fd = fd; fds[0].events = POLLIN | POLLRDNORM | POLLRDBAND | POLLPRI | POLLOUT | POLLWRNORM | POLLWRBAND | POLLHUP; fds[0].revents = 0; ATF_REQUIRE(poll(fds, 1, 0) == 1); - ATF_REQUIRE(fds[0].revents == (POLLOUT | POLLWRNORM)); + ATF_REQUIRE(fds[0].revents == 0); /* - * As above; fd should only be set in writefds upon return - * from the select() call. + * As above; fd should not be set on return from the select() + * call. */ FD_ZERO(&readfds); FD_ZERO(&writefds); @@ -416,7 +415,7 @@ ATF_TC_BODY(timerfd_select_poll_kevent_i FD_SET(fd, &exceptfds); ATF_REQUIRE(select(fd + 1, &readfds, &writefds, &exceptfds, &tv) == 1); ATF_REQUIRE(!FD_ISSET(fd, &readfds)); - ATF_REQUIRE(FD_ISSET(fd, &writefds)); + ATF_REQUIRE(!FD_ISSET(fd, &writefds)); ATF_REQUIRE(!FD_ISSET(fd, &exceptfds)); /* @@ -438,8 +437,7 @@ ATF_TC_BODY(timerfd_select_poll_kevent_i POLLOUT | POLLWRNORM | POLLWRBAND | POLLHUP; fds[0].revents = 0; ATF_REQUIRE(poll(fds, 1, 0) == 1); - ATF_REQUIRE(fds[0].revents == (POLLIN | POLLRDNORM | - POLLOUT | POLLWRNORM)); + ATF_REQUIRE(fds[0].revents == (POLLIN | POLLRDNORM)); FD_ZERO(&readfds); FD_ZERO(&writefds); @@ -451,7 +449,7 @@ ATF_TC_BODY(timerfd_select_poll_kevent_i FD_SET(fd, &exceptfds); ATF_REQUIRE(select(fd + 1, &readfds, &writefds, &exceptfds, &tv) == 2); ATF_REQUIRE(FD_ISSET(fd, &readfds)); - ATF_REQUIRE(FD_ISSET(fd, &writefds)); + ATF_REQUIRE(!FD_ISSET(fd, &writefds)); ATF_REQUIRE(!FD_ISSET(fd, &exceptfds)); /*