diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 18:18:30 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-18 18:18:30 -0700 | 
| commit | 3925e6fc1f774048404fdd910b0345b06c699eb4 (patch) | |
| tree | c9a58417d9492f39f7fe81d4721d674c34dd8be2 /security/selinux/ss | |
| parent | 334d094504c2fe1c44211ecb49146ae6bca8c321 (diff) | |
| parent | 7cea51be4e91edad05bd834f3235b45c57783f0d (diff) | |
| download | linux-3925e6fc1f774048404fdd910b0345b06c699eb4.tar.bz2 | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6:
  security: fix up documentation for security_module_enable
  Security: Introduce security= boot parameter
  Audit: Final renamings and cleanup
  SELinux: use new audit hooks, remove redundant exports
  Audit: internally use the new LSM audit hooks
  LSM/Audit: Introduce generic Audit LSM hooks
  SELinux: remove redundant exports
  Netlink: Use generic LSM hook
  Audit: use new LSM hooks instead of SELinux exports
  SELinux: setup new inode/ipc getsecid hooks
  LSM: Introduce inode_getsecid and ipc_getsecid hooks
Diffstat (limited to 'security/selinux/ss')
| -rw-r--r-- | security/selinux/ss/services.c | 45 | 
1 files changed, 34 insertions, 11 deletions
| diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 33425b1ac8d6..b341b8fd8c7c 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -57,6 +57,7 @@  #include "netlabel.h"  #include "xfrm.h"  #include "ebitmap.h" +#include "audit.h"  extern void selnl_notify_policyload(u32 seqno);  unsigned int policydb_loaded_version; @@ -2296,21 +2297,23 @@ struct selinux_audit_rule {  	struct context au_ctxt;  }; -void selinux_audit_rule_free(struct selinux_audit_rule *rule) +void selinux_audit_rule_free(void *vrule)  { +	struct selinux_audit_rule *rule = vrule; +  	if (rule) {  		context_destroy(&rule->au_ctxt);  		kfree(rule);  	}  } -int selinux_audit_rule_init(u32 field, u32 op, char *rulestr, -                            struct selinux_audit_rule **rule) +int selinux_audit_rule_init(u32 field, u32 op, char *rulestr, void **vrule)  {  	struct selinux_audit_rule *tmprule;  	struct role_datum *roledatum;  	struct type_datum *typedatum;  	struct user_datum *userdatum; +	struct selinux_audit_rule **rule = (struct selinux_audit_rule **)vrule;  	int rc = 0;  	*rule = NULL; @@ -2397,12 +2400,37 @@ int selinux_audit_rule_init(u32 field, u32 op, char *rulestr,  	return rc;  } -int selinux_audit_rule_match(u32 sid, u32 field, u32 op, -                             struct selinux_audit_rule *rule, +/* Check to see if the rule contains any selinux fields */ +int selinux_audit_rule_known(struct audit_krule *rule) +{ +	int i; + +	for (i = 0; i < rule->field_count; i++) { +		struct audit_field *f = &rule->fields[i]; +		switch (f->type) { +		case AUDIT_SUBJ_USER: +		case AUDIT_SUBJ_ROLE: +		case AUDIT_SUBJ_TYPE: +		case AUDIT_SUBJ_SEN: +		case AUDIT_SUBJ_CLR: +		case AUDIT_OBJ_USER: +		case AUDIT_OBJ_ROLE: +		case AUDIT_OBJ_TYPE: +		case AUDIT_OBJ_LEV_LOW: +		case AUDIT_OBJ_LEV_HIGH: +			return 1; +		} +	} + +	return 0; +} + +int selinux_audit_rule_match(u32 sid, u32 field, u32 op, void *vrule,                               struct audit_context *actx)  {  	struct context *ctxt;  	struct mls_level *level; +	struct selinux_audit_rule *rule = vrule;  	int match = 0;  	if (!rule) { @@ -2509,7 +2537,7 @@ out:  	return match;  } -static int (*aurule_callback)(void) = NULL; +static int (*aurule_callback)(void) = audit_update_lsm_rules;  static int aurule_avc_callback(u32 event, u32 ssid, u32 tsid,                                 u16 class, u32 perms, u32 *retained) @@ -2534,11 +2562,6 @@ static int __init aurule_init(void)  }  __initcall(aurule_init); -void selinux_audit_set_callback(int (*callback)(void)) -{ -	aurule_callback = callback; -} -  #ifdef CONFIG_NETLABEL  /**   * security_netlbl_cache_add - Add an entry to the NetLabel cache |