# Create and access multiple type of files # Makes a character device /dev/null mknodat(0xffffffffffffff9c, &AUTO='./file0\x00', 0x21c0, 0x103) # Makes a directory. mkdirat(0xffffffffffffff9c, &AUTO='./file1\x00', 0x1c0) # Makes a regular file. mknodat(0xffffffffffffff9c, &AUTO='./file2\x00', 0x81c0, 0x0) # Makes a socket. mknodat(0xffffffffffffff9c, &AUTO='./file3\x00', 0xc1c0, 0x0) # Makes a fifo. mknodat(0xffffffffffffff9c, &AUTO='./file4\x00', 0x11c0, 0x0) # Makes a block device /dev/loop0 mknodat(0xffffffffffffff9c, &AUTO='./file5\x00', 0x61c0, 0x700) # Makes a symlink. symlinkat(&AUTO='./file2\x00', 0xffffffffffffff9c, &AUTO='./file6\x00') # Creates a ruleset to restrict all kind of file creation. r0 = landlock_create_ruleset(&AUTO={0x1fff, 0x0, 0x0}, AUTO, 0x0) prctl$PR_SET_NO_NEW_PRIVS(0x26, 0x1) landlock_restrict_self(r0, 0x0) # No need to close this FD for this test. # Checks LANDLOCK_ACCESS_FS_EXECUTE. execveat(0xffffffffffffff9c, &AUTO='./file2\x00', 0x0, 0x0, 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_WRITE_FILE. openat$dir(0xffffffffffffff9c, &AUTO='./file2\x00', 0x1, 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_READ_FILE. openat$dir(0xffffffffffffff9c, &AUTO='./file2\x00', 0x0, 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_READ_DIR. openat$dir(0xffffffffffffff9c, &AUTO='./file1\x00', 0x0, 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_REMOVE_DIR. unlinkat(0xffffffffffffff9c, &AUTO='./file1\x00', 0x200) # EACCES # Checks LANDLOCK_ACCESS_FS_REMOVE_FILE. unlinkat(0xffffffffffffff9c, &AUTO='./file2\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_CHAR. mknodat(0xffffffffffffff9c, &AUTO='./file7\x00', 0x21c0, 0x103) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file0\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file0\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_DIR. mkdirat(0xffffffffffffff9c, &AUTO='./file7\x00', 0x1c0) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file1\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_REG. mknodat(0xffffffffffffff9c, &AUTO='./file7\x00', 0x81c0, 0x0) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file2\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file2\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_SOCK. mknodat(0xffffffffffffff9c, &AUTO='./file7\x00', 0xc1c0, 0x0) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file3\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file3\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_FIFO. mknodat(0xffffffffffffff9c, &AUTO='./file7\x00', 0x11c0, 0x0) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file4\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file4\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_BLOCK. mknodat(0xffffffffffffff9c, &AUTO='./file7\x00', 0x61c0, 0x700) # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file5\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file5\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES # Checks LANDLOCK_ACCESS_FS_MAKE_SYM. symlinkat(&AUTO='./file2\x00', 0xffffffffffffff9c, &AUTO='./file7\x00') # EACCES renameat2(0xffffffffffffff9c, &AUTO='./file6\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES linkat(0xffffffffffffff9c, &AUTO='./file6\x00', 0xffffffffffffff9c, &AUTO='./file7\x00', 0x0) # EACCES