1c7841597SChristian Brauner // SPDX-License-Identifier: GPL-2.0
2c7841597SChristian Brauner #define _GNU_SOURCE
3c7841597SChristian Brauner #define __SANE_USERSPACE_TYPES__
4c7841597SChristian Brauner
5c7841597SChristian Brauner #include <fcntl.h>
6c7841597SChristian Brauner #include <stdio.h>
7c7841597SChristian Brauner #include <sys/stat.h>
8c7841597SChristian Brauner
9c7841597SChristian Brauner #include "../kselftest_harness.h"
10*4cb6c8afSMark Brown #include "wrappers.h"
11c7841597SChristian Brauner
TEST(anon_inode_no_chown)12c7841597SChristian Brauner TEST(anon_inode_no_chown)
13c7841597SChristian Brauner {
14c7841597SChristian Brauner int fd_context;
15c7841597SChristian Brauner
16c7841597SChristian Brauner fd_context = sys_fsopen("tmpfs", 0);
17c7841597SChristian Brauner ASSERT_GE(fd_context, 0);
18c7841597SChristian Brauner
19c7841597SChristian Brauner ASSERT_LT(fchown(fd_context, 1234, 5678), 0);
20c7841597SChristian Brauner ASSERT_EQ(errno, EOPNOTSUPP);
21c7841597SChristian Brauner
22c7841597SChristian Brauner EXPECT_EQ(close(fd_context), 0);
23c7841597SChristian Brauner }
24c7841597SChristian Brauner
TEST(anon_inode_no_chmod)25fcf31ec7SChristian Brauner TEST(anon_inode_no_chmod)
26fcf31ec7SChristian Brauner {
27fcf31ec7SChristian Brauner int fd_context;
28fcf31ec7SChristian Brauner
29fcf31ec7SChristian Brauner fd_context = sys_fsopen("tmpfs", 0);
30fcf31ec7SChristian Brauner ASSERT_GE(fd_context, 0);
31fcf31ec7SChristian Brauner
32fcf31ec7SChristian Brauner ASSERT_LT(fchmod(fd_context, 0777), 0);
33fcf31ec7SChristian Brauner ASSERT_EQ(errno, EOPNOTSUPP);
34fcf31ec7SChristian Brauner
35fcf31ec7SChristian Brauner EXPECT_EQ(close(fd_context), 0);
36fcf31ec7SChristian Brauner }
37fcf31ec7SChristian Brauner
TEST(anon_inode_no_exec)38f8ca403aSChristian Brauner TEST(anon_inode_no_exec)
39f8ca403aSChristian Brauner {
40f8ca403aSChristian Brauner int fd_context;
41f8ca403aSChristian Brauner
42f8ca403aSChristian Brauner fd_context = sys_fsopen("tmpfs", 0);
43f8ca403aSChristian Brauner ASSERT_GE(fd_context, 0);
44f8ca403aSChristian Brauner
45f8ca403aSChristian Brauner ASSERT_LT(execveat(fd_context, "", NULL, NULL, AT_EMPTY_PATH), 0);
46f8ca403aSChristian Brauner ASSERT_EQ(errno, EACCES);
47f8ca403aSChristian Brauner
48f8ca403aSChristian Brauner EXPECT_EQ(close(fd_context), 0);
49f8ca403aSChristian Brauner }
50f8ca403aSChristian Brauner
TEST(anon_inode_no_open)5125a6cc9aSChristian Brauner TEST(anon_inode_no_open)
5225a6cc9aSChristian Brauner {
5325a6cc9aSChristian Brauner int fd_context;
5425a6cc9aSChristian Brauner
5525a6cc9aSChristian Brauner fd_context = sys_fsopen("tmpfs", 0);
5625a6cc9aSChristian Brauner ASSERT_GE(fd_context, 0);
5725a6cc9aSChristian Brauner
5825a6cc9aSChristian Brauner ASSERT_GE(dup2(fd_context, 500), 0);
5925a6cc9aSChristian Brauner ASSERT_EQ(close(fd_context), 0);
6025a6cc9aSChristian Brauner fd_context = 500;
6125a6cc9aSChristian Brauner
6225a6cc9aSChristian Brauner ASSERT_LT(open("/proc/self/fd/500", 0), 0);
6325a6cc9aSChristian Brauner ASSERT_EQ(errno, ENXIO);
6425a6cc9aSChristian Brauner
6525a6cc9aSChristian Brauner EXPECT_EQ(close(fd_context), 0);
6625a6cc9aSChristian Brauner }
6725a6cc9aSChristian Brauner
68c7841597SChristian Brauner TEST_HARNESS_MAIN
69c7841597SChristian Brauner
70