summaryrefslogtreecommitdiff
path: root/regress/sys/kern
diff options
context:
space:
mode:
authorMartin Pieuchot <mpi@cvs.openbsd.org>2021-10-29 13:13:05 +0000
committerMartin Pieuchot <mpi@cvs.openbsd.org>2021-10-29 13:13:05 +0000
commit4555536135efaffcc4c0415b64f9e74c3af696e8 (patch)
tree383914a0bd9d1ef30d9a0899790fbbc43fbba5d6 /regress/sys/kern
parente7b40e3bd38a1c75eb5a3422467af9209744f8ef (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/Makefile5
-rw-r--r--regress/sys/kern/poll/pollnval.c37
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;
+}