diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 11:18:12 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 11:18:12 -0500 |
commit | 33673dcb372b5d8179c22127ca71deb5f3dc7016 (patch) | |
tree | d182e9dc6aa127375a92b5eb619d6cd2ddc23ce7 /security/integrity/evm | |
parent | fe9453a1dcb5fb146f9653267e78f4a558066f6f (diff) | |
parent | 5b2660326039a32b28766cb4c1a8b1bdcfadc375 (diff) |
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
Pull security subsystem updates from James Morris:
"This is basically a maintenance update for the TPM driver and EVM/IMA"
Fix up conflicts in lib/digsig.c and security/integrity/ima/ima_main.c
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (45 commits)
tpm/ibmvtpm: build only when IBM pseries is configured
ima: digital signature verification using asymmetric keys
ima: rename hash calculation functions
ima: use new crypto_shash API instead of old crypto_hash
ima: add policy support for file system uuid
evm: add file system uuid to EVM hmac
tpm_tis: check pnp_acpi_device return code
char/tpm/tpm_i2c_stm_st33: drop temporary variable for return value
char/tpm/tpm_i2c_stm_st33: remove dead assignment in tpm_st33_i2c_probe
char/tpm/tpm_i2c_stm_st33: Remove __devexit attribute
char/tpm/tpm_i2c_stm_st33: Don't use memcpy for one byte assignment
tpm_i2c_stm_st33: removed unused variables/code
TPM: Wait for TPM_ACCESS tpmRegValidSts to go high at startup
tpm: Fix cancellation of TPM commands (interrupt mode)
tpm: Fix cancellation of TPM commands (polling mode)
tpm: Store TPM vendor ID
TPM: Work around buggy TPMs that block during continue self test
tpm_i2c_stm_st33: fix oops when i2c client is unavailable
char/tpm: Use struct dev_pm_ops for power management
TPM: STMicroelectronics ST33 I2C BUILD STUFF
...
Diffstat (limited to 'security/integrity/evm')
-rw-r--r-- | security/integrity/evm/Kconfig | 13 | ||||
-rw-r--r-- | security/integrity/evm/evm.h | 2 | ||||
-rw-r--r-- | security/integrity/evm/evm_crypto.c | 3 | ||||
-rw-r--r-- | security/integrity/evm/evm_main.c | 10 | ||||
-rw-r--r-- | security/integrity/evm/evm_secfs.c | 6 |
5 files changed, 18 insertions, 16 deletions
diff --git a/security/integrity/evm/Kconfig b/security/integrity/evm/Kconfig index afbb59dd262d..fea9749c3756 100644 --- a/security/integrity/evm/Kconfig +++ b/security/integrity/evm/Kconfig | |||
@@ -11,3 +11,16 @@ config EVM | |||
11 | integrity attacks. | 11 | integrity attacks. |
12 | 12 | ||
13 | If you are unsure how to answer this question, answer N. | 13 | If you are unsure how to answer this question, answer N. |
14 | |||
15 | config EVM_HMAC_VERSION | ||
16 | int "EVM HMAC version" | ||
17 | depends on EVM | ||
18 | default 2 | ||
19 | help | ||
20 | This options adds EVM HMAC version support. | ||
21 | 1 - original version | ||
22 | 2 - add per filesystem unique identifier (UUID) (default) | ||
23 | |||
24 | WARNING: changing the HMAC calculation method or adding | ||
25 | additional info to the calculation, requires existing EVM | ||
26 | labeled file systems to be relabeled. | ||
diff --git a/security/integrity/evm/evm.h b/security/integrity/evm/evm.h index c885247ebcf7..30bd1ec0232e 100644 --- a/security/integrity/evm/evm.h +++ b/security/integrity/evm/evm.h | |||
@@ -24,6 +24,7 @@ | |||
24 | extern int evm_initialized; | 24 | extern int evm_initialized; |
25 | extern char *evm_hmac; | 25 | extern char *evm_hmac; |
26 | extern char *evm_hash; | 26 | extern char *evm_hash; |
27 | extern int evm_hmac_version; | ||
27 | 28 | ||
28 | extern struct crypto_shash *hmac_tfm; | 29 | extern struct crypto_shash *hmac_tfm; |
29 | extern struct crypto_shash *hash_tfm; | 30 | extern struct crypto_shash *hash_tfm; |
@@ -45,6 +46,5 @@ extern int evm_calc_hash(struct dentry *dentry, const char *req_xattr_name, | |||
45 | extern int evm_init_hmac(struct inode *inode, const struct xattr *xattr, | 46 | extern int evm_init_hmac(struct inode *inode, const struct xattr *xattr, |
46 | char *hmac_val); | 47 | char *hmac_val); |
47 | extern int evm_init_secfs(void); | 48 | extern int evm_init_secfs(void); |
48 | extern void evm_cleanup_secfs(void); | ||
49 | 49 | ||
50 | #endif | 50 | #endif |
diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c index 7dd538ef5b83..3bab89eb21d6 100644 --- a/security/integrity/evm/evm_crypto.c +++ b/security/integrity/evm/evm_crypto.c | |||
@@ -110,6 +110,9 @@ static void hmac_add_misc(struct shash_desc *desc, struct inode *inode, | |||
110 | hmac_misc.gid = from_kgid(&init_user_ns, inode->i_gid); | 110 | hmac_misc.gid = from_kgid(&init_user_ns, inode->i_gid); |
111 | hmac_misc.mode = inode->i_mode; | 111 | hmac_misc.mode = inode->i_mode; |
112 | crypto_shash_update(desc, (const u8 *)&hmac_misc, sizeof hmac_misc); | 112 | crypto_shash_update(desc, (const u8 *)&hmac_misc, sizeof hmac_misc); |
113 | if (evm_hmac_version > 1) | ||
114 | crypto_shash_update(desc, inode->i_sb->s_uuid, | ||
115 | sizeof(inode->i_sb->s_uuid)); | ||
113 | crypto_shash_final(desc, digest); | 116 | crypto_shash_final(desc, digest); |
114 | } | 117 | } |
115 | 118 | ||
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index eb5484504f50..cdbde1762189 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c | |||
@@ -26,6 +26,7 @@ int evm_initialized; | |||
26 | 26 | ||
27 | char *evm_hmac = "hmac(sha1)"; | 27 | char *evm_hmac = "hmac(sha1)"; |
28 | char *evm_hash = "sha1"; | 28 | char *evm_hash = "sha1"; |
29 | int evm_hmac_version = CONFIG_EVM_HMAC_VERSION; | ||
29 | 30 | ||
30 | char *evm_config_xattrnames[] = { | 31 | char *evm_config_xattrnames[] = { |
31 | #ifdef CONFIG_SECURITY_SELINUX | 32 | #ifdef CONFIG_SECURITY_SELINUX |
@@ -427,15 +428,6 @@ err: | |||
427 | return error; | 428 | return error; |
428 | } | 429 | } |
429 | 430 | ||
430 | static void __exit cleanup_evm(void) | ||
431 | { | ||
432 | evm_cleanup_secfs(); | ||
433 | if (hmac_tfm) | ||
434 | crypto_free_shash(hmac_tfm); | ||
435 | if (hash_tfm) | ||
436 | crypto_free_shash(hash_tfm); | ||
437 | } | ||
438 | |||
439 | /* | 431 | /* |
440 | * evm_display_config - list the EVM protected security extended attributes | 432 | * evm_display_config - list the EVM protected security extended attributes |
441 | */ | 433 | */ |
diff --git a/security/integrity/evm/evm_secfs.c b/security/integrity/evm/evm_secfs.c index ac7629950578..30f670ad6ac3 100644 --- a/security/integrity/evm/evm_secfs.c +++ b/security/integrity/evm/evm_secfs.c | |||
@@ -100,9 +100,3 @@ int __init evm_init_secfs(void) | |||
100 | error = -EFAULT; | 100 | error = -EFAULT; |
101 | return error; | 101 | return error; |
102 | } | 102 | } |
103 | |||
104 | void __exit evm_cleanup_secfs(void) | ||
105 | { | ||
106 | if (evm_init_tpm) | ||
107 | securityfs_remove(evm_init_tpm); | ||
108 | } | ||