mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 00:44:31 +01:00
Introduce the LANDLOCK_RESTRICT_SELF_TSYNC flag. With this flag, a given Landlock ruleset is applied to all threads of the calling process, instead of only the current one. Without this flag, multithreaded userspace programs currently resort to using the nptl(7)/libpsx hack for multithreaded policy enforcement, which is also used by libcap and for setuid(2). Using this userspace-based scheme, the threads of a process enforce the same Landlock policy, but the resulting Landlock domains are still separate. The domains being separate causes multiple problems: * When using Landlock's "scoped" access rights, the domain identity is used to determine whether an operation is permitted. As a result, when using LANLDOCK_SCOPE_SIGNAL, signaling between sibling threads stops working. This is a problem for programming languages and frameworks which are inherently multithreaded (e.g. Go). * In audit logging, the domains of separate threads in a process will get logged with different domain IDs, even when they are based on the same ruleset FD, which might confuse users. Cc: Andrew G. Morgan <morgan@kernel.org> Cc: John Johansen <john.johansen@canonical.com> Cc: Paul Moore <paul@paul-moore.com> Suggested-by: Jann Horn <jannh@google.com> Signed-off-by: Günther Noack <gnoack@google.com> Link: https://lore.kernel.org/r/20251127115136.3064948-2-gnoack@google.com [mic: Fix restrict_self_flags test, clean up Makefile, allign comments, reduce local variable scope, add missing includes] Closes: https://github.com/landlock-lsm/linux/issues/2 Signed-off-by: Mickaël Salaün <mic@digikod.net>
16 lines
378 B
C
16 lines
378 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Landlock - Cross-thread ruleset enforcement
|
|
*
|
|
* Copyright © 2025 Google LLC
|
|
*/
|
|
|
|
#ifndef _SECURITY_LANDLOCK_TSYNC_H
|
|
#define _SECURITY_LANDLOCK_TSYNC_H
|
|
|
|
#include <linux/cred.h>
|
|
|
|
int landlock_restrict_sibling_threads(const struct cred *old_cred,
|
|
const struct cred *new_cred);
|
|
|
|
#endif /* _SECURITY_LANDLOCK_TSYNC_H */
|