selftests: add F_CREATED_QUERY tests

Add simple selftests for fcntl(fd, F_CREATED_QUERY, 0).

Link: https://lore.kernel.org/r/20240724-work-fcntl-v1-2-e8153a2f1991@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
Christian Brauner 2024-07-24 15:15:36 +02:00
parent 820a185896
commit d0fe8920cb

View File

@ -26,6 +26,10 @@
#define F_DUPFD_QUERY (F_LINUX_SPECIFIC_BASE + 3)
#endif
#ifndef F_CREATED_QUERY
#define F_CREATED_QUERY (F_LINUX_SPECIFIC_BASE + 4)
#endif
static inline int sys_close_range(unsigned int fd, unsigned int max_fd,
unsigned int flags)
{
@ -624,4 +628,39 @@ TEST(close_range_bitmap_corruption)
EXPECT_EQ(0, WEXITSTATUS(status));
}
TEST(fcntl_created)
{
for (int i = 0; i < 101; i++) {
int fd;
char path[PATH_MAX];
fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0) {
if (errno == ENOENT)
SKIP(return,
"Skipping test since /dev/null does not exist");
}
/* We didn't create "/dev/null". */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 0);
close(fd);
sprintf(path, "aaaa_%d", i);
fd = open(path, O_CREAT | O_RDONLY | O_CLOEXEC, 0600);
ASSERT_GE(fd, 0);
/* We created "aaaa_%d". */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 1);
close(fd);
fd = open(path, O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0);
/* We're opening it again, so no positive creation check. */
EXPECT_EQ(fcntl(fd, F_CREATED_QUERY, 0), 0);
close(fd);
unlink(path);
}
}
TEST_HARNESS_MAIN