Re: [PATCH net-next v7 05/10] landlock: Add LSM hooks related to filesystem
From: Mickaël Salaün <mic@digikod.net>
Date: 2017-08-22 22:01:03
Also in:
lkml, netdev
On 21/08/2017 02:09, Mickaël Salaün wrote:
Handle 33 filesystem-related LSM hooks for the Landlock filesystem event: LANDLOCK_SUBTYPE_EVENT_FS. A Landlock event wrap LSM hooks for similar kernel object types (e.g. struct file, struct path...). Multiple LSM hooks can trigger the same Landlock event. Landlock handle nine coarse-grained actions: read, write, execute, new, get, remove, ioctl, lock and fcntl. Each of them abstract LSM hook access control in a way that can be extended in the future. The Landlock LSM hook registration is done after other LSM to only run actions from user-space, via eBPF programs, if the access was granted by major (privileged) LSMs. Signed-off-by: Mickaël Salaün <mic@digikod.net> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: David S. Miller <davem@davemloft.net> Cc: James Morris <redacted> Cc: Kees Cook <redacted> Cc: Serge E. Hallyn <serge@hallyn.com> --- Changes since v6: * add 3 more sub-events: IOCTL, LOCK, FCNTL https://lkml.kernel.org/r/2fbc99a6-f190-f335-bd14-04bdeed35571@digikod.net * use the new security_add_hooks() * explain the -Werror=unused-function * constify pointers * cleanup headers Changes since v5: * split hooks.[ch] into hooks.[ch] and hooks_fs.[ch] * add more documentation * cosmetic fixes * rebase (SCALAR_VALUE) Changes since v4: * add LSM hook abstraction called Landlock event * use the compiler type checking to verify hooks use by an event * handle all filesystem related LSM hooks (e.g. file_permission, mmap_file, sb_mount...) * register BPF programs for Landlock just after LSM hooks registration * move hooks registration after other LSMs * add failsafes to check if a hook is not used by the kernel * allow partial raw value access form the context (needed for programs generated by LLVM) Changes since v3: * split commit * add hooks dealing with struct inode and struct path pointers: inode_permission and inode_getattr * add abstraction over eBPF helper arguments thanks to wrapping structs --- include/linux/lsm_hooks.h | 5 + security/landlock/Makefile | 7 +- security/landlock/common.h | 2 + security/landlock/hooks.c | 83 ++++++ security/landlock/hooks.h | 177 +++++++++++++ security/landlock/hooks_fs.c | 586 +++++++++++++++++++++++++++++++++++++++++++ security/landlock/hooks_fs.h | 19 ++ security/landlock/init.c | 10 + security/security.c | 12 +- 9 files changed, 899 insertions(+), 2 deletions(-) create mode 100644 security/landlock/hooks.c create mode 100644 security/landlock/hooks.h create mode 100644 security/landlock/hooks_fs.c create mode 100644 security/landlock/hooks_fs.h
quoted hunk ↗ jump to hunk
diff --git a/security/landlock/init.c b/security/landlock/init.c index 09acbc74abd6..1e6660fed697 100644 --- a/security/landlock/init.c +++ b/security/landlock/init.c@@ -10,8 +10,10 @@ #include <linux/bpf.h> /* enum bpf_access_type */ #include <linux/capability.h> /* capable */ +#include <linux/lsm_hooks.h> #include "common.h" /* LANDLOCK_* */ +#include "hooks_fs.h" static inline bool bpf_landlock_is_valid_access(int off, int size,@@ -23,6 +25,8 @@ static inline bool bpf_landlock_is_valid_access(int off, int size, switch (prog_subtype->landlock_rule.event) { case LANDLOCK_SUBTYPE_EVENT_FS: + return landlock_is_valid_access_event_FS(off, size, type, + &info->reg_type, prog_subtype);
I forgot to handle LANDLOCK_SUBTYPE_EVENT_FS_{IOCTL,LOCK_FCNTL} here and
I included some hunks in the wrong patches. I will fix this in the next
series and add tests for those anyway. :)
Regards,
Mickaël
Attachments
- signature.asc [application/pgp-signature] 488 bytes