UBUNTU: SAUCE: apparmor4.0.0 [03/90]: LSM stacking v39: LSM: Add the lsmblob data structure.

BugLink: http://bugs.launchpad.net/bugs/2028253

When more than one security module is exporting data to audit and
networking sub-systems a single 32 bit integer is no longer
sufficient to represent the data. Add a structure to be used instead.

The lsmblob structure definition is intended to keep the LSM
specific information private to the individual security modules.
The module specific information is included in a new set of
header files under include/lsm. Each security module is allowed
to define the information included for its use in the lsmblob.
SELinux includes a u32 secid. Smack includes a pointer into its
global label list. The conditional compilation based on feature
inclusion is contained in the include/lsm files.

Suggested-by: Paul Moore <paul@paul-moore.com>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
(cherry picked from commit d3e05576b36f2e19e14956bc2a9043316c817ddb
https://git.launchpad.net/~apparmor-dev/ubuntu-kernel-next)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
This commit is contained in:
Casey Schaufler
2023-08-28 15:24:23 -07:00
committed by Paolo Pisati
parent 0278a672f0
commit 51e1dcf334
5 changed files with 86 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Linux Security Module interface to other subsystems.
* AppArmor presents a single u32 value which is known as a secid.
*/
#ifndef __LINUX_LSM_APPARMOR_H
#define __LINUX_LSM_APPARMOR_H
struct aa_label;
struct lsmblob_apparmor {
#ifdef CONFIG_SECURITY_APPARMOR
struct aa_label *label;
#endif
};
#endif /* ! __LINUX_LSM_APPARMOR_H */
+16
View File
@@ -0,0 +1,16 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Linux Security Module interface to other subsystems.
* BPF may present a single u32 value.
*/
#ifndef __LINUX_LSM_BPF_H
#define __LINUX_LSM_BPF_H
#include <linux/types.h>
struct lsmblob_bpf {
#ifdef CONFIG_BPF_LSM
u32 secid;
#endif
};
#endif /* ! __LINUX_LSM_BPF_H */
+16
View File
@@ -0,0 +1,16 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Linux Security Module interface to other subsystems.
* SELinux presents a single u32 value which is known as a secid.
*/
#ifndef __LINUX_LSM_SELINUX_H
#define __LINUX_LSM_SELINUX_H
#include <linux/types.h>
struct lsmblob_selinux {
#ifdef CONFIG_SECURITY_SELINUX
u32 secid;
#endif
};
#endif /* ! __LINUX_LSM_SELINUX_H */
+17
View File
@@ -0,0 +1,17 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Linux Security Module interface to other subsystems.
* Smack presents a pointer into the global Smack label list.
*/
#ifndef __LINUX_LSM_SMACK_H
#define __LINUX_LSM_SMACK_H
struct smack_known;
struct lsmblob_smack {
#ifdef CONFIG_SECURITY_SMACK
struct smack_known *skp;
#endif
};
#endif /* ! __LINUX_LSM_SMACK_H */
+20
View File
@@ -33,6 +33,10 @@
#include <linux/mm.h>
#include <linux/sockptr.h>
#include <uapi/linux/lsm.h>
#include <linux/lsm/selinux.h>
#include <linux/lsm/smack.h>
#include <linux/lsm/apparmor.h>
#include <linux/lsm/bpf.h>
struct linux_binprm;
struct cred;
@@ -139,6 +143,22 @@ enum lockdown_reason {
LOCKDOWN_CONFIDENTIALITY_MAX,
};
/* stacking scaffolding */
struct lsmblob_scaffold {
u32 secid;
};
/*
* Data exported by the security modules
*/
struct lsmblob {
struct lsmblob_selinux selinux;
struct lsmblob_smack smack;
struct lsmblob_apparmor apparmor;
struct lsmblob_bpf bpf;
struct lsmblob_scaffold scaffold;
};
extern const char *const lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1];
extern u32 lsm_active_cnt;
extern const struct lsm_id *lsm_idlist[];