/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ /* * Landlock functions and constants. */ #ifndef _LANDLOCK_UTIL_H_ #define _LANDLOCK_UTIL_H_ #include #include #include #include #include "landlock.h" #ifdef __cplusplus extern "C" { #endif #ifndef __NR_landlock_create_ruleset #define __NR_landlock_create_ruleset 444 #endif #ifndef __NR_landlock_add_rule #define __NR_landlock_add_rule 445 #endif #ifndef __NR_landlock_restrict_self #define __NR_landlock_restrict_self 446 #endif #define ACCESS_FS_ROUGHLY_READ ( \ LANDLOCK_ACCESS_FS_READ_FILE | \ LANDLOCK_ACCESS_FS_READ_DIR) #define ACCESS_FS_ROUGHLY_READ_EXECUTE ( \ LANDLOCK_ACCESS_FS_EXECUTE | \ LANDLOCK_ACCESS_FS_READ_FILE | \ LANDLOCK_ACCESS_FS_READ_DIR) #define ACCESS_FS_ROUGHLY_BASIC_WRITE ( \ LANDLOCK_ACCESS_FS_WRITE_FILE | \ LANDLOCK_ACCESS_FS_REMOVE_DIR | \ LANDLOCK_ACCESS_FS_REMOVE_FILE | \ LANDLOCK_ACCESS_FS_MAKE_DIR | \ LANDLOCK_ACCESS_FS_MAKE_REG) #define ACCESS_FS_ROUGHLY_EDIT ( \ LANDLOCK_ACCESS_FS_WRITE_FILE | \ LANDLOCK_ACCESS_FS_REMOVE_DIR | \ LANDLOCK_ACCESS_FS_REMOVE_FILE) #define ACCESS_FS_ROUGHLY_FULL_WRITE ( \ LANDLOCK_ACCESS_FS_WRITE_FILE | \ LANDLOCK_ACCESS_FS_REMOVE_DIR | \ LANDLOCK_ACCESS_FS_REMOVE_FILE | \ LANDLOCK_ACCESS_FS_MAKE_CHAR | \ LANDLOCK_ACCESS_FS_MAKE_DIR | \ LANDLOCK_ACCESS_FS_MAKE_REG | \ LANDLOCK_ACCESS_FS_MAKE_SOCK | \ LANDLOCK_ACCESS_FS_MAKE_FIFO | \ LANDLOCK_ACCESS_FS_MAKE_BLOCK | \ LANDLOCK_ACCESS_FS_MAKE_SYM) #define ACCESS_FILE ( \ LANDLOCK_ACCESS_FS_EXECUTE | \ LANDLOCK_ACCESS_FS_WRITE_FILE | \ LANDLOCK_ACCESS_FS_READ_FILE) #define HANDLED_ACCESS_TYPES (ACCESS_FS_ROUGHLY_READ_EXECUTE | \ ACCESS_FS_ROUGHLY_FULL_WRITE) /* * Performs Landlock create ruleset syscall. * * Returns the ruleset file descriptor on success, returns an error code * otherwise. */ extern int landlock_create_ruleset(const struct minijail_landlock_ruleset_attr *const attr, const size_t size, const __u32 flags); /* Performs Landlock add rule syscall. */ extern int landlock_add_rule(const int ruleset_fd, const enum minijail_landlock_rule_type rule_type, const void *const rule_attr, const __u32 flags); /* Performs Landlock restrict self syscall. */ extern int landlock_restrict_self(const int ruleset_fd, const __u32 flags); /* Populates the landlock ruleset for a path and any needed paths beneath. */ extern bool populate_ruleset_internal(const char *const path, const int ruleset_fd, const uint64_t allowed_access); #ifdef __cplusplus }; /* extern "C" */ #endif #endif /* _LANDLOCK_UTIL_H_ */