[LTP] [PATCH 2/2] poll: add test for POLLNVAL on invalid fd
Jinseok Kim
always.starving0@gmail.com
Thu Feb 19 17:36:37 CET 2026
Add a poll() test to verify that POLLNVAL is reported for invalid file
descriptors.
The test closes one end of a pipe and passes the closed descriptor to
poll(). poll() is expected to return successfully and set POLLNVAL in
revents.
This verifies poll() handling of invalid file descriptors without
triggering an error return.
Signed-off-by: Jinseok Kim <always.starving0@gmail.com>
---
testcases/kernel/syscalls/poll/poll04.c | 60 +++++++++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 testcases/kernel/syscalls/poll/poll04.c
diff --git a/testcases/kernel/syscalls/poll/poll04.c b/testcases/kernel/syscalls/poll/poll04.c
new file mode 100644
index 000000000..2013de642
--- /dev/null
+++ b/testcases/kernel/syscalls/poll/poll04.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2026 Jinseok Kim <always.starving0@gmail.com>
+ */
+
+/*
+ * Check that poll() reports POLLNVAL for invalid file descriptors.
+ */
+#include <unistd.h>
+#include <errno.h>
+#include <sys/poll.h>
+
+#include "tst_test.h"
+
+static int fds[2];
+
+void verify_pollnval(void)
+{
+ int invalid_fd = fds[0];
+ struct pollfd pfd = {
+ .fd = invalid_fd, .events = POLLIN,
+ };
+
+ SAFE_CLOSE(fds[0]);
+ fds[0] = -1;
+
+ TEST(poll(&pfd, 1, 0));
+
+ if (TST_RET == -1) {
+ tst_res(TFAIL | TTERRNO, "poll() failed");
+ return;
+ }
+
+ if (!(pfd.revents & POLLNVAL)) {
+ tst_res(TFAIL, "poll() did not report POLLNVAL");
+ return;
+ }
+
+ tst_res(TPASS, "poll() reported POLLNVAL");
+}
+
+static void setup(void)
+{
+ SAFE_PIPE(fds);
+}
+
+static void cleanup(void)
+{
+ if (fds[0] >= 0)
+ SAFE_CLOSE(fds[0]);
+
+ if (fds[1] >= 0)
+ SAFE_CLOSE(fds[1]);
+}
+
+static struct tst_test test = {
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = verify_pollnval,
+};
\ No newline at end of file
--
2.43.0
More information about the ltp
mailing list