mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
lsm: add lsmprop_to_secctx hook
Add a new hook security_lsmprop_to_secctx() and its LSM specific implementations. The LSM specific code will use the lsm_prop element allocated for that module. This allows for the possibility that more than one module may be called upon to translate a secid to a string, as can occur in the audit code. Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> [PM: subject line tweak] Signed-off-by: Paul Moore <paul@paul-moore.com>
This commit is contained in:
committed by
Paul Moore
parent
870b7fdc66
commit
6f2f724f0e
@@ -4768,7 +4768,7 @@ static int smack_audit_rule_known(struct audit_krule *krule)
|
||||
static int smack_audit_rule_match(struct lsm_prop *prop, u32 field, u32 op,
|
||||
void *vrule)
|
||||
{
|
||||
struct smack_known *skp;
|
||||
struct smack_known *skp = prop->smack.skp;
|
||||
char *rule = vrule;
|
||||
|
||||
if (unlikely(!rule)) {
|
||||
@@ -4780,10 +4780,8 @@ static int smack_audit_rule_match(struct lsm_prop *prop, u32 field, u32 op,
|
||||
return 0;
|
||||
|
||||
/* scaffolding */
|
||||
if (!prop->smack.skp && prop->scaffold.secid)
|
||||
if (!skp && prop->scaffold.secid)
|
||||
skp = smack_from_secid(prop->scaffold.secid);
|
||||
else
|
||||
skp = prop->smack.skp;
|
||||
|
||||
/*
|
||||
* No need to do string comparisons. If a match occurs,
|
||||
@@ -4814,7 +4812,6 @@ static int smack_ismaclabel(const char *name)
|
||||
return (strcmp(name, XATTR_SMACK_SUFFIX) == 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* smack_secid_to_secctx - return the smack label for a secid
|
||||
* @secid: incoming integer
|
||||
@@ -4833,6 +4830,29 @@ static int smack_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* smack_lsmprop_to_secctx - return the smack label
|
||||
* @prop: includes incoming Smack data
|
||||
* @secdata: destination
|
||||
* @seclen: how long it is
|
||||
*
|
||||
* Exists for audit code.
|
||||
*/
|
||||
static int smack_lsmprop_to_secctx(struct lsm_prop *prop, char **secdata,
|
||||
u32 *seclen)
|
||||
{
|
||||
struct smack_known *skp = prop->smack.skp;
|
||||
|
||||
/* scaffolding */
|
||||
if (!skp && prop->scaffold.secid)
|
||||
skp = smack_from_secid(prop->scaffold.secid);
|
||||
|
||||
if (secdata)
|
||||
*secdata = skp->smk_known;
|
||||
*seclen = strlen(skp->smk_known);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* smack_secctx_to_secid - return the secid for a smack label
|
||||
* @secdata: smack label
|
||||
@@ -5192,6 +5212,7 @@ static struct security_hook_list smack_hooks[] __ro_after_init = {
|
||||
|
||||
LSM_HOOK_INIT(ismaclabel, smack_ismaclabel),
|
||||
LSM_HOOK_INIT(secid_to_secctx, smack_secid_to_secctx),
|
||||
LSM_HOOK_INIT(lsmprop_to_secctx, smack_lsmprop_to_secctx),
|
||||
LSM_HOOK_INIT(secctx_to_secid, smack_secctx_to_secid),
|
||||
LSM_HOOK_INIT(inode_notifysecctx, smack_inode_notifysecctx),
|
||||
LSM_HOOK_INIT(inode_setsecctx, smack_inode_setsecctx),
|
||||
|
||||
Reference in New Issue
Block a user