153 lines
3.6 KiB
C
153 lines
3.6 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/*
|
||
|
* Landlock variants for three processes with various domains.
|
||
|
*
|
||
|
* Copyright © 2024 Tahera Fahimi <fahimitahera@gmail.com>
|
||
|
*/
|
||
|
|
||
|
enum sandbox_type {
|
||
|
NO_SANDBOX,
|
||
|
SCOPE_SANDBOX,
|
||
|
/* Any other type of sandboxing domain */
|
||
|
OTHER_SANDBOX,
|
||
|
};
|
||
|
|
||
|
/* clang-format on */
|
||
|
FIXTURE_VARIANT(scoped_vs_unscoped)
|
||
|
{
|
||
|
const int domain_all;
|
||
|
const int domain_parent;
|
||
|
const int domain_children;
|
||
|
const int domain_child;
|
||
|
const int domain_grand_child;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* .-----------------.
|
||
|
* | ####### | P3 -> P2 : allow
|
||
|
* | P1----# P2 # | P3 -> P1 : deny
|
||
|
* | # | # |
|
||
|
* | # P3 # |
|
||
|
* | ####### |
|
||
|
* '-----------------'
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, deny_scoped) {
|
||
|
.domain_all = OTHER_SANDBOX,
|
||
|
.domain_parent = NO_SANDBOX,
|
||
|
.domain_children = SCOPE_SANDBOX,
|
||
|
.domain_child = NO_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* ###################
|
||
|
* # ####### # P3 -> P2 : allow
|
||
|
* # P1----# P2 # # P3 -> P1 : deny
|
||
|
* # # | # #
|
||
|
* # # P3 # #
|
||
|
* # ####### #
|
||
|
* ###################
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, all_scoped) {
|
||
|
.domain_all = SCOPE_SANDBOX,
|
||
|
.domain_parent = NO_SANDBOX,
|
||
|
.domain_children = SCOPE_SANDBOX,
|
||
|
.domain_child = NO_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* .-----------------.
|
||
|
* | .-----. | P3 -> P2 : allow
|
||
|
* | P1----| P2 | | P3 -> P1 : allow
|
||
|
* | | | |
|
||
|
* | | P3 | |
|
||
|
* | '-----' |
|
||
|
* '-----------------'
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, allow_with_other_domain) {
|
||
|
.domain_all = OTHER_SANDBOX,
|
||
|
.domain_parent = NO_SANDBOX,
|
||
|
.domain_children = OTHER_SANDBOX,
|
||
|
.domain_child = NO_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* .----. ###### P3 -> P2 : allow
|
||
|
* | P1 |----# P2 # P3 -> P1 : allow
|
||
|
* '----' ######
|
||
|
* |
|
||
|
* P3
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, allow_with_one_domain) {
|
||
|
.domain_all = NO_SANDBOX,
|
||
|
.domain_parent = OTHER_SANDBOX,
|
||
|
.domain_children = NO_SANDBOX,
|
||
|
.domain_child = SCOPE_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* ###### .-----. P3 -> P2 : allow
|
||
|
* # P1 #----| P2 | P3 -> P1 : allow
|
||
|
* ###### '-----'
|
||
|
* |
|
||
|
* P3
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, allow_with_grand_parent_scoped) {
|
||
|
.domain_all = NO_SANDBOX,
|
||
|
.domain_parent = SCOPE_SANDBOX,
|
||
|
.domain_children = NO_SANDBOX,
|
||
|
.domain_child = OTHER_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* ###### ###### P3 -> P2 : allow
|
||
|
* # P1 #----# P2 # P3 -> P1 : allow
|
||
|
* ###### ######
|
||
|
* |
|
||
|
* .----.
|
||
|
* | P3 |
|
||
|
* '----'
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, allow_with_parents_domain) {
|
||
|
.domain_all = NO_SANDBOX,
|
||
|
.domain_parent = SCOPE_SANDBOX,
|
||
|
.domain_children = NO_SANDBOX,
|
||
|
.domain_child = SCOPE_SANDBOX,
|
||
|
.domain_grand_child = NO_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* ###### P3 -> P2 : deny
|
||
|
* # P1 #----P2 P3 -> P1 : deny
|
||
|
* ###### |
|
||
|
* |
|
||
|
* ######
|
||
|
* # P3 #
|
||
|
* ######
|
||
|
*/
|
||
|
/* clang-format off */
|
||
|
FIXTURE_VARIANT_ADD(scoped_vs_unscoped, deny_with_self_and_grandparent_domain) {
|
||
|
.domain_all = NO_SANDBOX,
|
||
|
.domain_parent = SCOPE_SANDBOX,
|
||
|
.domain_children = NO_SANDBOX,
|
||
|
.domain_child = NO_SANDBOX,
|
||
|
.domain_grand_child = SCOPE_SANDBOX,
|
||
|
/* clang-format on */
|
||
|
};
|