blob: 147053b357d5dd3dd1979dd66f70b03a07777729 [file] [log] [blame]
Mike Frysinger4c331892022-09-13 05:17:08 -04001/* Copyright 2022 The ChromiumOS Authors
Ben Scarlatod7e6e682022-06-30 03:27:30 +00002 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6/*
7 * Landlock functions and constants.
8 */
9
10#ifndef _LANDLOCK_UTIL_H_
11#define _LANDLOCK_UTIL_H_
12
13#include <asm/unistd.h>
14#include <stdbool.h>
15#include <stddef.h>
16#include <stdint.h>
17
18#include "landlock.h"
19
Ben Scarlatod7e6e682022-06-30 03:27:30 +000020#ifdef __cplusplus
21extern "C" {
22#endif
23
24#ifndef __NR_landlock_create_ruleset
25#define __NR_landlock_create_ruleset 444
26#endif
27
28#ifndef __NR_landlock_add_rule
29#define __NR_landlock_add_rule 445
30#endif
31
32#ifndef __NR_landlock_restrict_self
33#define __NR_landlock_restrict_self 446
34#endif
35
Allen Webbe5600d02023-11-01 16:39:56 -050036#define ACCESS_FS_ROUGHLY_READ \
37 (LANDLOCK_ACCESS_FS_READ_FILE | LANDLOCK_ACCESS_FS_READ_DIR)
Ben Scarlatod7e6e682022-06-30 03:27:30 +000038
Allen Webbe5600d02023-11-01 16:39:56 -050039#define ACCESS_FS_ROUGHLY_READ_EXECUTE \
40 (LANDLOCK_ACCESS_FS_EXECUTE | LANDLOCK_ACCESS_FS_READ_FILE | \
41 LANDLOCK_ACCESS_FS_READ_DIR)
Ben Scarlatod7e6e682022-06-30 03:27:30 +000042
Allen Webbe5600d02023-11-01 16:39:56 -050043#define ACCESS_FS_ROUGHLY_BASIC_WRITE \
44 (LANDLOCK_ACCESS_FS_WRITE_FILE | LANDLOCK_ACCESS_FS_REMOVE_DIR | \
45 LANDLOCK_ACCESS_FS_REMOVE_FILE | LANDLOCK_ACCESS_FS_MAKE_DIR | \
46 LANDLOCK_ACCESS_FS_MAKE_REG)
Ben Scarlatod7e6e682022-06-30 03:27:30 +000047
Allen Webbe5600d02023-11-01 16:39:56 -050048#define ACCESS_FS_ROUGHLY_EDIT \
49 (LANDLOCK_ACCESS_FS_WRITE_FILE | LANDLOCK_ACCESS_FS_REMOVE_DIR | \
50 LANDLOCK_ACCESS_FS_REMOVE_FILE)
Ben Scarlatof6102622022-09-05 19:31:42 +000051
Allen Webbe5600d02023-11-01 16:39:56 -050052#define ACCESS_FS_ROUGHLY_FULL_WRITE \
53 (LANDLOCK_ACCESS_FS_WRITE_FILE | LANDLOCK_ACCESS_FS_REMOVE_DIR | \
54 LANDLOCK_ACCESS_FS_REMOVE_FILE | LANDLOCK_ACCESS_FS_MAKE_CHAR | \
55 LANDLOCK_ACCESS_FS_MAKE_DIR | LANDLOCK_ACCESS_FS_MAKE_REG | \
56 LANDLOCK_ACCESS_FS_MAKE_SOCK | LANDLOCK_ACCESS_FS_MAKE_FIFO | \
57 LANDLOCK_ACCESS_FS_MAKE_BLOCK | LANDLOCK_ACCESS_FS_MAKE_SYM)
Ben Scarlatod7e6e682022-06-30 03:27:30 +000058
Allen Webbe5600d02023-11-01 16:39:56 -050059#define ACCESS_FILE \
60 (LANDLOCK_ACCESS_FS_EXECUTE | LANDLOCK_ACCESS_FS_WRITE_FILE | \
61 LANDLOCK_ACCESS_FS_READ_FILE)
Ben Scarlatod7e6e682022-06-30 03:27:30 +000062
Allen Webbe5600d02023-11-01 16:39:56 -050063#define HANDLED_ACCESS_TYPES \
64 (ACCESS_FS_ROUGHLY_READ_EXECUTE | ACCESS_FS_ROUGHLY_FULL_WRITE)
Ben Scarlatoee82b492022-08-09 18:33:25 +000065
Ben Scarlato33737f52023-03-22 18:39:13 +000066#define LANDLOCK_ABI_FS_REFER_SUPPORTED 2
67
Ben Scarlatod7e6e682022-06-30 03:27:30 +000068/*
69 * Performs Landlock create ruleset syscall.
70 *
71 * Returns the ruleset file descriptor on success, returns an error code
72 * otherwise.
73 */
Allen Webbe5600d02023-11-01 16:39:56 -050074extern int
75landlock_create_ruleset(const struct minijail_landlock_ruleset_attr *const attr,
76 const size_t size, const __u32 flags);
Ben Scarlatod7e6e682022-06-30 03:27:30 +000077
78/* Performs Landlock add rule syscall. */
79extern int landlock_add_rule(const int ruleset_fd,
80 const enum minijail_landlock_rule_type rule_type,
81 const void *const rule_attr, const __u32 flags);
82
83/* Performs Landlock restrict self syscall. */
Allen Webbe5600d02023-11-01 16:39:56 -050084extern int landlock_restrict_self(const int ruleset_fd, const __u32 flags);
Ben Scarlatod7e6e682022-06-30 03:27:30 +000085
86/* Populates the landlock ruleset for a path and any needed paths beneath. */
87extern bool populate_ruleset_internal(const char *const path,
88 const int ruleset_fd,
89 const uint64_t allowed_access);
90
91#ifdef __cplusplus
92}; /* extern "C" */
93#endif
94
95#endif /* _LANDLOCK_UTIL_H_ */