diff options
author | Martin Pieuchot <mpi@cvs.openbsd.org> | 2021-10-29 13:13:05 +0000 |
---|---|---|
committer | Martin Pieuchot <mpi@cvs.openbsd.org> | 2021-10-29 13:13:05 +0000 |
commit | 4555536135efaffcc4c0415b64f9e74c3af696e8 (patch) | |
tree | 383914a0bd9d1ef30d9a0899790fbbc43fbba5d6 /regress/sys/kern | |
parent | e7b40e3bd38a1c75eb5a3422467af9209744f8ef (diff) |
Test that poll(2) returns POLLNVAL for an already closed fd.
poll(2) rewrite on top of kqueue is currently blocking instead of
returning. Regression reported by Larry Hynes with a reproducer
from Leah Neukirchen, thanks a lot!
Diffstat (limited to 'regress/sys/kern')
-rw-r--r-- | regress/sys/kern/poll/Makefile | 5 | ||||
-rw-r--r-- | regress/sys/kern/poll/pollnval.c | 37 |
2 files changed, 42 insertions, 0 deletions
diff --git a/regress/sys/kern/poll/Makefile b/regress/sys/kern/poll/Makefile new file mode 100644 index 00000000000..5b9265b9586 --- /dev/null +++ b/regress/sys/kern/poll/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2021/10/29 13:13:04 mpi Exp $ + +PROG= pollnval + +.include <bsd.regress.mk> diff --git a/regress/sys/kern/poll/pollnval.c b/regress/sys/kern/poll/pollnval.c new file mode 100644 index 00000000000..adc9132e473 --- /dev/null +++ b/regress/sys/kern/poll/pollnval.c @@ -0,0 +1,37 @@ +/* $OpenBSD: pollnval.c,v 1.1 2021/10/29 13:13:04 mpi Exp $ */ + +/* + * Copyright (c) 2021 Leah Neukirchen <leah@vuxu.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <assert.h> +#include <stdio.h> +#include <poll.h> +#include <unistd.h> + +int +main(void) +{ + struct pollfd fds[1]; + + fds[0].fd = 0; + fds[0].events = POLLIN | POLLHUP; + close(0); + + assert(poll(fds, 1, -1) == 1); + assert(fds[0].revents & POLLNVAL); + + return 0; +} |