From: John Johansen <john.johansen@canonical.com>
To: Casey Schaufler <casey@schaufler-ca.com>,
casey.schaufler@intel.com, jmorris@namei.org,
linux-security-module@vger.kernel.org, selinux@vger.kernel.org
Cc: keescook@chromium.org, penguin-kernel@i-love.sakura.ne.jp,
paul@paul-moore.com, sds@tycho.nsa.gov
Subject: [PATCH v3 05/24] Use lsmblob in security_audit_rule_match
Date: Mon, 24 Jun 2019 11:39:05 -0700 [thread overview]
Message-ID: <06fc4ff8-c311-c814-e8db-907b5e6dba86@canonical.com> (raw)
In-Reply-To: <20190621185233.6766-6-casey@schaufler-ca.com>
On 6/21/19 11:52 AM, Casey Schaufler wrote:
> Change the secid parameter of security_audit_rule_match
> to a lsmblob structure pointer. Pass the entry from the
> lsmblob structure for the approprite slot to the LSM hook.
>
> Change the users of security_audit_rule_match to use the
> lsmblob instead of a u32. In some cases this requires a
> temporary conversion using lsmblob_init() that will go
> away when other interfaces get converted.
>
> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Reviewed-by: John Johansen <john.johansen@canonical.com>
> ---
> include/linux/security.h | 7 ++++---
> kernel/auditfilter.c | 4 +++-
> kernel/auditsc.c | 14 ++++++++++----
> security/integrity/ima/ima.h | 4 ++--
> security/integrity/ima/ima_policy.c | 7 +++++--
> security/security.c | 14 ++++++++++++--
> 6 files changed, 36 insertions(+), 14 deletions(-)
>
> diff --git a/include/linux/security.h b/include/linux/security.h
> index 0aa9417a5762..52d89c4a9594 100644
> --- a/include/linux/security.h
> +++ b/include/linux/security.h
> @@ -1757,7 +1757,8 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer)
> #ifdef CONFIG_SECURITY
> int security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule);
> int security_audit_rule_known(struct audit_krule *krule);
> -int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule);
> +int security_audit_rule_match(struct lsmblob *blob, u32 field, u32 op,
> + void *lsmrule);
> void security_audit_rule_free(void *lsmrule);
>
> #else
> @@ -1773,8 +1774,8 @@ static inline int security_audit_rule_known(struct audit_krule *krule)
> return 0;
> }
>
> -static inline int security_audit_rule_match(u32 secid, u32 field, u32 op,
> - void *lsmrule)
> +static inline int security_audit_rule_match(struct lsmblob *blob, u32 field,
> + u32 op, void *lsmrule)
> {
> return 0;
> }
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index 63f8b3f26fab..da211065160f 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -1324,6 +1324,7 @@ int audit_filter(int msgtype, unsigned int listtype)
> struct audit_field *f = &e->rule.fields[i];
> pid_t pid;
> u32 sid;
> + struct lsmblob blob;
>
> switch (f->type) {
> case AUDIT_PID:
> @@ -1354,7 +1355,8 @@ int audit_filter(int msgtype, unsigned int listtype)
> case AUDIT_SUBJ_CLR:
> if (f->lsm_rule) {
> security_task_getsecid(current, &sid);
> - result = security_audit_rule_match(sid,
> + lsmblob_init(&blob, sid);
> + result = security_audit_rule_match(&blob,
> f->type, f->op, f->lsm_rule);
> }
> break;
> diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> index d1eab1d4a930..18ee5556c086 100644
> --- a/kernel/auditsc.c
> +++ b/kernel/auditsc.c
> @@ -445,6 +445,7 @@ static int audit_filter_rules(struct task_struct *tsk,
> const struct cred *cred;
> int i, need_sid = 1;
> u32 sid;
> + struct lsmblob blob;
> unsigned int sessionid;
>
> cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);
> @@ -630,7 +631,9 @@ static int audit_filter_rules(struct task_struct *tsk,
> security_task_getsecid(tsk, &sid);
> need_sid = 0;
> }
> - result = security_audit_rule_match(sid, f->type,
> + lsmblob_init(&blob, sid);
> + result = security_audit_rule_match(&blob,
> + f->type,
> f->op,
> f->lsm_rule);
> }
> @@ -645,15 +648,17 @@ static int audit_filter_rules(struct task_struct *tsk,
> if (f->lsm_rule) {
> /* Find files that match */
> if (name) {
> + lsmblob_init(&blob, name->osid);
> result = security_audit_rule_match(
> - name->osid,
> + &blob,
> f->type,
> f->op,
> f->lsm_rule);
> } else if (ctx) {
> list_for_each_entry(n, &ctx->names_list, list) {
> + lsmblob_init(&blob, n->osid);
> if (security_audit_rule_match(
> - n->osid,
> + &blob,
> f->type,
> f->op,
> f->lsm_rule)) {
> @@ -665,7 +670,8 @@ static int audit_filter_rules(struct task_struct *tsk,
> /* Find ipc objects that match */
> if (!ctx || ctx->type != AUDIT_IPC)
> break;
> - if (security_audit_rule_match(ctx->ipc.osid,
> + lsmblob_init(&blob, ctx->ipc.osid);
> + if (security_audit_rule_match(&blob,
> f->type, f->op,
> f->lsm_rule))
> ++result;
> diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
> index d213e835c498..5a337239d9e4 100644
> --- a/security/integrity/ima/ima.h
> +++ b/security/integrity/ima/ima.h
> @@ -307,8 +307,8 @@ static inline int security_filter_rule_init(u32 field, u32 op, char *rulestr,
> return -EINVAL;
> }
>
> -static inline int security_filter_rule_match(u32 secid, u32 field, u32 op,
> - void *lsmrule)
> +static inline int security_filter_rule_match(struct lsmblob *blob, u32 field,
> + u32 op, void *lsmrule)
> {
> return -EINVAL;
> }
> diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
> index e0cc323f948f..e7b8ce942950 100644
> --- a/security/integrity/ima/ima_policy.c
> +++ b/security/integrity/ima/ima_policy.c
> @@ -327,6 +327,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode,
> for (i = 0; i < MAX_LSM_RULES; i++) {
> int rc = 0;
> u32 osid;
> + struct lsmblob blob;
> int retried = 0;
>
> if (!rule->lsm[i].rule)
> @@ -337,7 +338,8 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode,
> case LSM_OBJ_ROLE:
> case LSM_OBJ_TYPE:
> security_inode_getsecid(inode, &osid);
> - rc = security_filter_rule_match(osid,
> + lsmblob_init(&blob, osid);
> + rc = security_filter_rule_match(&blob,
> rule->lsm[i].type,
> Audit_equal,
> rule->lsm[i].rule);
> @@ -345,7 +347,8 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode,
> case LSM_SUBJ_USER:
> case LSM_SUBJ_ROLE:
> case LSM_SUBJ_TYPE:
> - rc = security_filter_rule_match(secid,
> + lsmblob_init(&blob, secid);
> + rc = security_filter_rule_match(&blob,
> rule->lsm[i].type,
> Audit_equal,
> rule->lsm[i].rule);
> diff --git a/security/security.c b/security/security.c
> index 7618c761060d..4692f44718c6 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -2452,9 +2452,19 @@ void security_audit_rule_free(void *lsmrule)
> call_void_hook(audit_rule_free, lsmrule);
> }
>
> -int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule)
> +int security_audit_rule_match(struct lsmblob *blob, u32 field, u32 op,
> + void *lsmrule)
> {
> - return call_int_hook(audit_rule_match, 0, secid, field, op, lsmrule);
> + struct security_hook_list *hp;
> + int rc;
> +
> + hlist_for_each_entry(hp, &security_hook_heads.audit_rule_match, list) {
> + rc = hp->hook.audit_rule_match(blob->secid[hp->slot], field,
> + op, lsmrule);
> + if (rc != 0)
> + return rc;
> + }
> + return 0;
> }
> #endif /* CONFIG_AUDIT */
>
>
next prev parent reply other threads:[~2019-06-24 18:39 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-21 18:52 [PATCH v3 00/24] LSM: Module stacking for AppArmor Casey Schaufler
2019-06-21 18:52 ` [PATCH v3 01/24] LSM: Infrastructure management of the superblock Casey Schaufler
2019-06-24 18:31 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 02/24] LSM: Infrastructure management of the sock security Casey Schaufler
2019-06-24 18:33 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 03/24] LSM: Infrastructure management of the key blob Casey Schaufler
2019-06-24 18:33 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 04/24] LSM: Create and manage the lsmblob data structure Casey Schaufler
2019-06-22 22:42 ` Kees Cook
2019-06-24 18:38 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 05/24] Use lsmblob in security_audit_rule_match Casey Schaufler
2019-06-22 22:43 ` Kees Cook
2019-06-24 18:39 ` John Johansen [this message]
2019-06-21 18:52 ` [PATCH v3 06/24] LSM: Use lsmblob in security_kernel_act_as Casey Schaufler
2019-06-22 22:43 ` Kees Cook
2019-06-24 18:38 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 07/24] net: Prepare UDS for secuirty module stacking Casey Schaufler
2019-06-22 22:43 ` Kees Cook
2019-06-24 18:39 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 08/24] LSM: Use lsmblob in security_secctx_to_secid Casey Schaufler
2019-06-22 22:44 ` Kees Cook
2019-06-24 18:38 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 09/24] LSM: Use lsmblob in security_secid_to_secctx Casey Schaufler
2019-06-22 22:44 ` Kees Cook
2019-06-24 18:39 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 10/24] Use lsmblob in security_ipc_getsecid Casey Schaufler
2019-06-22 22:48 ` Kees Cook
2019-06-24 16:39 ` Casey Schaufler
2019-06-24 17:20 ` Casey Schaufler
2019-06-24 21:09 ` Kees Cook
2019-06-24 18:39 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 11/24] LSM: Use lsmblob in security_task_getsecid Casey Schaufler
2019-06-22 22:49 ` Kees Cook
2019-06-24 18:40 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 12/24] LSM: Use lsmblob in security_inode_getsecid Casey Schaufler
2019-06-22 22:49 ` Kees Cook
2019-06-24 18:40 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 13/24] LSM: Use lsmblob in security_cred_getsecid Casey Schaufler
2019-06-22 22:50 ` Kees Cook
2019-06-24 18:40 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 14/24] IMA: Change internal interfaces to use lsmblobs Casey Schaufler
2019-06-22 22:51 ` Kees Cook
2019-06-24 18:40 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 15/24] LSM: Specify which LSM to display Casey Schaufler
2019-06-22 22:51 ` Kees Cook
2019-06-24 18:48 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 16/24] LSM: Ensure the correct LSM context releaser Casey Schaufler
2019-06-22 22:52 ` Kees Cook
2019-06-24 21:46 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 17/24] LSM: Use lsmcontext in security_secid_to_secctx Casey Schaufler
2019-06-22 22:52 ` Kees Cook
2019-06-24 21:46 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 18/24] LSM: Use lsmcontext in security_dentry_init_security Casey Schaufler
2019-06-22 22:54 ` Kees Cook
2019-06-24 21:46 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 19/24] LSM: Use lsmcontext in security_inode_getsecctx Casey Schaufler
2019-06-22 22:56 ` Kees Cook
2019-06-24 21:46 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 20/24] LSM: security_secid_to_secctx in netlink netfilter Casey Schaufler
2019-06-22 22:57 ` Kees Cook
2019-06-24 21:47 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 21/24] Audit: Store LSM audit information in an lsmblob Casey Schaufler
2019-06-22 23:12 ` Kees Cook
2019-06-24 21:33 ` John Johansen
2019-06-25 1:01 ` Casey Schaufler
2019-06-25 1:46 ` Paul Moore
2019-06-25 2:14 ` John Johansen
2019-06-25 2:42 ` Paul Moore
2019-06-25 15:30 ` Casey Schaufler
2019-06-21 18:52 ` [PATCH v3 22/24] LSM: Return the lsmblob slot on initialization Casey Schaufler
2019-06-22 23:13 ` Kees Cook
2019-06-24 21:39 ` John Johansen
2019-06-24 21:50 ` Kees Cook
2019-06-24 21:53 ` Casey Schaufler
2019-06-24 21:47 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 23/24] NET: Store LSM netlabel data in a lsmblob Casey Schaufler
2019-06-22 23:15 ` Kees Cook
2019-06-24 21:44 ` John Johansen
2019-06-21 18:52 ` [PATCH v3 24/24] AppArmor: Remove the exclusive flag Casey Schaufler
2019-06-22 23:15 ` Kees Cook
2019-06-24 21:45 ` John Johansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=06fc4ff8-c311-c814-e8db-907b5e6dba86@canonical.com \
--to=john.johansen@canonical.com \
--cc=casey.schaufler@intel.com \
--cc=casey@schaufler-ca.com \
--cc=jmorris@namei.org \
--cc=keescook@chromium.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=sds@tycho.nsa.gov \
--cc=selinux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).