Handle the new LANDLOCK_ACCESS_FS_READ_METADATA and
LANDLOCK_ACCESS_FS_WRITE_METADATA access rights in the sandboxer:
READ_METADATA is added to the read-only set, WRITE_METADATA to the
read-write set, and both to ACCESS_FILE.

Update the ABI version fallback switch to remove the metadata rights
for ABI < 12, and bump LANDLOCK_ABI_LAST to 12.

Assisted-by: opencode: glm-5.3
Signed-off-by: Cai Xinchen <[email protected]>
---
 samples/landlock/sandboxer.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/samples/landlock/sandboxer.c b/samples/landlock/sandboxer.c
index 030583273f3f..1a77a675f654 100644
--- a/samples/landlock/sandboxer.c
+++ b/samples/landlock/sandboxer.c
@@ -115,6 +115,8 @@ static int parse_path(char *env_path, const char ***const 
path_list)
        LANDLOCK_ACCESS_FS_EXECUTE | \
        LANDLOCK_ACCESS_FS_WRITE_FILE | \
        LANDLOCK_ACCESS_FS_READ_FILE | \
+       LANDLOCK_ACCESS_FS_READ_METADATA | \
+       LANDLOCK_ACCESS_FS_WRITE_METADATA | \
        LANDLOCK_ACCESS_FS_TRUNCATE | \
        LANDLOCK_ACCESS_FS_IOCTL_DEV | \
        LANDLOCK_ACCESS_FS_RESOLVE_UNIX)
@@ -286,7 +288,8 @@ static bool check_ruleset_scope(const char *const env_var,
 #define ACCESS_FS_ROUGHLY_READ ( \
        LANDLOCK_ACCESS_FS_EXECUTE | \
        LANDLOCK_ACCESS_FS_READ_FILE | \
-       LANDLOCK_ACCESS_FS_READ_DIR)
+       LANDLOCK_ACCESS_FS_READ_DIR | \
+       LANDLOCK_ACCESS_FS_READ_METADATA)
 
 #define ACCESS_FS_ROUGHLY_WRITE ( \
        LANDLOCK_ACCESS_FS_WRITE_FILE | \
@@ -302,7 +305,8 @@ static bool check_ruleset_scope(const char *const env_var,
        LANDLOCK_ACCESS_FS_REFER | \
        LANDLOCK_ACCESS_FS_TRUNCATE | \
        LANDLOCK_ACCESS_FS_IOCTL_DEV | \
-       LANDLOCK_ACCESS_FS_RESOLVE_UNIX)
+       LANDLOCK_ACCESS_FS_RESOLVE_UNIX | \
+       LANDLOCK_ACCESS_FS_WRITE_METADATA)
 
 /* clang-format on */
 
@@ -369,7 +373,7 @@ static int add_quiet_access(const char *const env_var,
        return 0;
 }
 
-#define LANDLOCK_ABI_LAST 11
+#define LANDLOCK_ABI_LAST 12
 
 #define XSTR(s) #s
 #define STR(s) XSTR(s)
@@ -552,7 +556,12 @@ int main(const int argc, char *const argv[], char *const 
*const envp)
                supported_restrict_flags &=
                        ~LANDLOCK_RESTRICT_SELF_NO_NEW_PRIVS;
                set_restrict_flags &= ~LANDLOCK_RESTRICT_SELF_NO_NEW_PRIVS;
-
+               __attribute__((fallthrough));
+       case 11:
+               /* Removes metadata rights for ABI < 12 */
+               ruleset_attr.handled_access_fs &=
+                       ~(LANDLOCK_ACCESS_FS_READ_METADATA |
+                         LANDLOCK_ACCESS_FS_WRITE_METADATA);
                /* Must be printed for any ABI < LANDLOCK_ABI_LAST. */
                fprintf(stderr,
                        "Hint: You should update the running kernel "
-- 
2.18.0.huawei.25


Reply via email to