diff options
Diffstat (limited to 'security/apparmor/crypto.c')
| -rw-r--r-- | security/apparmor/crypto.c | 34 | 
1 files changed, 16 insertions, 18 deletions
diff --git a/security/apparmor/crypto.c b/security/apparmor/crypto.c index d6222ba4e919..532471d0b3a0 100644 --- a/security/apparmor/crypto.c +++ b/security/apparmor/crypto.c @@ -15,14 +15,14 @@   * it should be.   */ -#include <linux/crypto.h> +#include <crypto/hash.h>  #include "include/apparmor.h"  #include "include/crypto.h"  static unsigned int apparmor_hash_size; -static struct crypto_hash *apparmor_tfm; +static struct crypto_shash *apparmor_tfm;  unsigned int aa_hash_size(void)  { @@ -32,35 +32,33 @@ unsigned int aa_hash_size(void)  int aa_calc_profile_hash(struct aa_profile *profile, u32 version, void *start,  			 size_t len)  { -	struct scatterlist sg[2]; -	struct hash_desc desc = { -		.tfm = apparmor_tfm, -		.flags = 0 -	}; +	struct { +		struct shash_desc shash; +		char ctx[crypto_shash_descsize(apparmor_tfm)]; +	} desc;  	int error = -ENOMEM;  	u32 le32_version = cpu_to_le32(version);  	if (!apparmor_tfm)  		return 0; -	sg_init_table(sg, 2); -	sg_set_buf(&sg[0], &le32_version, 4); -	sg_set_buf(&sg[1], (u8 *) start, len); -  	profile->hash = kzalloc(apparmor_hash_size, GFP_KERNEL);  	if (!profile->hash)  		goto fail; -	error = crypto_hash_init(&desc); +	desc.shash.tfm = apparmor_tfm; +	desc.shash.flags = 0; + +	error = crypto_shash_init(&desc.shash);  	if (error)  		goto fail; -	error = crypto_hash_update(&desc, &sg[0], 4); +	error = crypto_shash_update(&desc.shash, (u8 *) &le32_version, 4);  	if (error)  		goto fail; -	error = crypto_hash_update(&desc, &sg[1], len); +	error = crypto_shash_update(&desc.shash, (u8 *) start, len);  	if (error)  		goto fail; -	error = crypto_hash_final(&desc, profile->hash); +	error = crypto_shash_final(&desc.shash, profile->hash);  	if (error)  		goto fail; @@ -75,19 +73,19 @@ fail:  static int __init init_profile_hash(void)  { -	struct crypto_hash *tfm; +	struct crypto_shash *tfm;  	if (!apparmor_initialized)  		return 0; -	tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC); +	tfm = crypto_alloc_shash("sha1", 0, CRYPTO_ALG_ASYNC);  	if (IS_ERR(tfm)) {  		int error = PTR_ERR(tfm);  		AA_ERROR("failed to setup profile sha1 hashing: %d\n", error);  		return error;  	}  	apparmor_tfm = tfm; -	apparmor_hash_size = crypto_hash_digestsize(apparmor_tfm); +	apparmor_hash_size = crypto_shash_digestsize(apparmor_tfm);  	aa_info_message("AppArmor sha1 policy hashing enabled");  | 
