-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'landlock-6.14-rc1' of git://git.kernel.org/pub/scm/linux/k…
…ernel/git/mic/linux Pull landlock updates from Mickaël Salaün: "This mostly factors out some Landlock code and prepares for upcoming audit support. Because files with invalid modes might be visible after filesystem corruption, Landlock now handles those weird files too. A few sample and test issues are also fixed" * tag 'landlock-6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux: selftests/landlock: Add layout1.umount_sandboxer tests selftests/landlock: Add wrappers.h selftests/landlock: Fix error message landlock: Optimize file path walks and prepare for audit support selftests/landlock: Add test to check partial access in a mount tree landlock: Align partial refer access checks with final ones landlock: Simplify initially denied access rights landlock: Move access types landlock: Factor out check_access_path() selftests/landlock: Fix build with non-default pthread linking landlock: Use scoped guards for ruleset in landlock_add_rule() landlock: Use scoped guards for ruleset landlock: Constify get_mode_access() landlock: Handle weird files samples/landlock: Fix possible NULL dereference in parse_path() selftests/landlock: Remove unused macros in ptrace_test.c
- Loading branch information
Showing
14 changed files
with
489 additions
and
195 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Landlock LSM - Access types and helpers | ||
* | ||
* Copyright © 2016-2020 Mickaël Salaün <mic@digikod.net> | ||
* Copyright © 2018-2020 ANSSI | ||
* Copyright © 2024-2025 Microsoft Corporation | ||
*/ | ||
|
||
#ifndef _SECURITY_LANDLOCK_ACCESS_H | ||
#define _SECURITY_LANDLOCK_ACCESS_H | ||
|
||
#include <linux/bitops.h> | ||
#include <linux/build_bug.h> | ||
#include <linux/kernel.h> | ||
#include <uapi/linux/landlock.h> | ||
|
||
#include "limits.h" | ||
|
||
/* | ||
* All access rights that are denied by default whether they are handled or not | ||
* by a ruleset/layer. This must be ORed with all ruleset->access_masks[] | ||
* entries when we need to get the absolute handled access masks, see | ||
* landlock_upgrade_handled_access_masks(). | ||
*/ | ||
/* clang-format off */ | ||
#define _LANDLOCK_ACCESS_FS_INITIALLY_DENIED ( \ | ||
LANDLOCK_ACCESS_FS_REFER) | ||
/* clang-format on */ | ||
|
||
typedef u16 access_mask_t; | ||
|
||
/* Makes sure all filesystem access rights can be stored. */ | ||
static_assert(BITS_PER_TYPE(access_mask_t) >= LANDLOCK_NUM_ACCESS_FS); | ||
/* Makes sure all network access rights can be stored. */ | ||
static_assert(BITS_PER_TYPE(access_mask_t) >= LANDLOCK_NUM_ACCESS_NET); | ||
/* Makes sure all scoped rights can be stored. */ | ||
static_assert(BITS_PER_TYPE(access_mask_t) >= LANDLOCK_NUM_SCOPE); | ||
/* Makes sure for_each_set_bit() and for_each_clear_bit() calls are OK. */ | ||
static_assert(sizeof(unsigned long) >= sizeof(access_mask_t)); | ||
|
||
/* Ruleset access masks. */ | ||
struct access_masks { | ||
access_mask_t fs : LANDLOCK_NUM_ACCESS_FS; | ||
access_mask_t net : LANDLOCK_NUM_ACCESS_NET; | ||
access_mask_t scope : LANDLOCK_NUM_SCOPE; | ||
}; | ||
|
||
union access_masks_all { | ||
struct access_masks masks; | ||
u32 all; | ||
}; | ||
|
||
/* Makes sure all fields are covered. */ | ||
static_assert(sizeof(typeof_member(union access_masks_all, masks)) == | ||
sizeof(typeof_member(union access_masks_all, all))); | ||
|
||
typedef u16 layer_mask_t; | ||
|
||
/* Makes sure all layers can be checked. */ | ||
static_assert(BITS_PER_TYPE(layer_mask_t) >= LANDLOCK_MAX_NUM_LAYERS); | ||
|
||
/* Upgrades with all initially denied by default access rights. */ | ||
static inline struct access_masks | ||
landlock_upgrade_handled_access_masks(struct access_masks access_masks) | ||
{ | ||
/* | ||
* All access rights that are denied by default whether they are | ||
* explicitly handled or not. | ||
*/ | ||
if (access_masks.fs) | ||
access_masks.fs |= _LANDLOCK_ACCESS_FS_INITIALLY_DENIED; | ||
|
||
return access_masks; | ||
} | ||
|
||
#endif /* _SECURITY_LANDLOCK_ACCESS_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.