Skip to content

Commit e9ed1eb

Browse files
ebiggersjrjohansen
authored andcommitted
apparmor: use SHA-256 library API instead of crypto_shash API
This user of SHA-256 does not support any other algorithm, so the crypto_shash abstraction provides no value. Just use the SHA-256 library API instead, which is much simpler and easier to use. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: John Johansen <john.johansen@canonical.com>
1 parent 2b270e2 commit e9ed1eb

2 files changed

Lines changed: 13 additions & 75 deletions

File tree

security/apparmor/Kconfig

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ config SECURITY_APPARMOR_INTROSPECT_POLICY
5959
config SECURITY_APPARMOR_HASH
6060
bool "Enable introspection of sha256 hashes for loaded profiles"
6161
depends on SECURITY_APPARMOR_INTROSPECT_POLICY
62-
select CRYPTO
63-
select CRYPTO_SHA256
62+
select CRYPTO_LIB_SHA256
6463
default y
6564
help
6665
This option selects whether introspection of loaded policy

security/apparmor/crypto.c

Lines changed: 12 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -11,113 +11,52 @@
1111
* it should be.
1212
*/
1313

14-
#include <crypto/hash.h>
14+
#include <crypto/sha2.h>
1515

1616
#include "include/apparmor.h"
1717
#include "include/crypto.h"
1818

19-
static unsigned int apparmor_hash_size;
20-
21-
static struct crypto_shash *apparmor_tfm;
22-
2319
unsigned int aa_hash_size(void)
2420
{
25-
return apparmor_hash_size;
21+
return SHA256_DIGEST_SIZE;
2622
}
2723

2824
char *aa_calc_hash(void *data, size_t len)
2925
{
30-
SHASH_DESC_ON_STACK(desc, apparmor_tfm);
3126
char *hash;
32-
int error;
33-
34-
if (!apparmor_tfm)
35-
return NULL;
3627

37-
hash = kzalloc(apparmor_hash_size, GFP_KERNEL);
28+
hash = kzalloc(SHA256_DIGEST_SIZE, GFP_KERNEL);
3829
if (!hash)
3930
return ERR_PTR(-ENOMEM);
4031

41-
desc->tfm = apparmor_tfm;
42-
43-
error = crypto_shash_init(desc);
44-
if (error)
45-
goto fail;
46-
error = crypto_shash_update(desc, (u8 *) data, len);
47-
if (error)
48-
goto fail;
49-
error = crypto_shash_final(desc, hash);
50-
if (error)
51-
goto fail;
52-
32+
sha256(data, len, hash);
5333
return hash;
54-
55-
fail:
56-
kfree(hash);
57-
58-
return ERR_PTR(error);
5934
}
6035

6136
int aa_calc_profile_hash(struct aa_profile *profile, u32 version, void *start,
6237
size_t len)
6338
{
64-
SHASH_DESC_ON_STACK(desc, apparmor_tfm);
65-
int error;
39+
struct sha256_state state;
6640
__le32 le32_version = cpu_to_le32(version);
6741

6842
if (!aa_g_hash_policy)
6943
return 0;
7044

71-
if (!apparmor_tfm)
72-
return 0;
73-
74-
profile->hash = kzalloc(apparmor_hash_size, GFP_KERNEL);
45+
profile->hash = kzalloc(SHA256_DIGEST_SIZE, GFP_KERNEL);
7546
if (!profile->hash)
7647
return -ENOMEM;
7748

78-
desc->tfm = apparmor_tfm;
79-
80-
error = crypto_shash_init(desc);
81-
if (error)
82-
goto fail;
83-
error = crypto_shash_update(desc, (u8 *) &le32_version, 4);
84-
if (error)
85-
goto fail;
86-
error = crypto_shash_update(desc, (u8 *) start, len);
87-
if (error)
88-
goto fail;
89-
error = crypto_shash_final(desc, profile->hash);
90-
if (error)
91-
goto fail;
92-
49+
sha256_init(&state);
50+
sha256_update(&state, (u8 *)&le32_version, 4);
51+
sha256_update(&state, (u8 *)start, len);
52+
sha256_final(&state, profile->hash);
9353
return 0;
94-
95-
fail:
96-
kfree(profile->hash);
97-
profile->hash = NULL;
98-
99-
return error;
10054
}
10155

10256
static int __init init_profile_hash(void)
10357
{
104-
struct crypto_shash *tfm;
105-
106-
if (!apparmor_initialized)
107-
return 0;
108-
109-
tfm = crypto_alloc_shash("sha256", 0, 0);
110-
if (IS_ERR(tfm)) {
111-
int error = PTR_ERR(tfm);
112-
AA_ERROR("failed to setup profile sha256 hashing: %d\n", error);
113-
return error;
114-
}
115-
apparmor_tfm = tfm;
116-
apparmor_hash_size = crypto_shash_digestsize(apparmor_tfm);
117-
118-
aa_info_message("AppArmor sha256 policy hashing enabled");
119-
58+
if (apparmor_initialized)
59+
aa_info_message("AppArmor sha256 policy hashing enabled");
12060
return 0;
12161
}
122-
12362
late_initcall(init_profile_hash);

0 commit comments

Comments
 (0)