mirror of
https://github.com/torvalds/linux.git
synced 2026-01-12 00:42:35 +08:00
Merge tag 'tee-sha1-lib-for-v6.18' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee into soc/drivers
Use SHA-1 library instead of crypto_shash * tag 'tee-sha1-lib-for-v6.18' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee: tee: Use SHA-1 library instead of crypto_shash Link: https://lore.kernel.org/r/20250912091611.GA1442659@rayden Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -3,8 +3,7 @@
|
||||
menuconfig TEE
|
||||
tristate "Trusted Execution Environment support"
|
||||
depends on HAVE_ARM_SMCCC || COMPILE_TEST || CPU_SUP_AMD
|
||||
select CRYPTO
|
||||
select CRYPTO_SHA1
|
||||
select CRYPTO_LIB_SHA1
|
||||
select DMA_SHARED_BUFFER
|
||||
select GENERIC_ALLOCATOR
|
||||
help
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/tee_core.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <crypto/hash.h>
|
||||
#include <crypto/sha1.h>
|
||||
#include "tee_private.h"
|
||||
|
||||
@@ -142,58 +141,22 @@ static int tee_release(struct inode *inode, struct file *filp)
|
||||
* This implements section (for SHA-1):
|
||||
* 4.3. Algorithm for Creating a Name-Based UUID
|
||||
*/
|
||||
static int uuid_v5(uuid_t *uuid, const uuid_t *ns, const void *name,
|
||||
size_t size)
|
||||
static void uuid_v5(uuid_t *uuid, const uuid_t *ns, const void *name,
|
||||
size_t size)
|
||||
{
|
||||
unsigned char hash[SHA1_DIGEST_SIZE];
|
||||
struct crypto_shash *shash = NULL;
|
||||
struct shash_desc *desc = NULL;
|
||||
int rc;
|
||||
struct sha1_ctx ctx;
|
||||
|
||||
shash = crypto_alloc_shash("sha1", 0, 0);
|
||||
if (IS_ERR(shash)) {
|
||||
rc = PTR_ERR(shash);
|
||||
pr_err("shash(sha1) allocation failed\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
desc = kzalloc(sizeof(*desc) + crypto_shash_descsize(shash),
|
||||
GFP_KERNEL);
|
||||
if (!desc) {
|
||||
rc = -ENOMEM;
|
||||
goto out_free_shash;
|
||||
}
|
||||
|
||||
desc->tfm = shash;
|
||||
|
||||
rc = crypto_shash_init(desc);
|
||||
if (rc < 0)
|
||||
goto out_free_desc;
|
||||
|
||||
rc = crypto_shash_update(desc, (const u8 *)ns, sizeof(*ns));
|
||||
if (rc < 0)
|
||||
goto out_free_desc;
|
||||
|
||||
rc = crypto_shash_update(desc, (const u8 *)name, size);
|
||||
if (rc < 0)
|
||||
goto out_free_desc;
|
||||
|
||||
rc = crypto_shash_final(desc, hash);
|
||||
if (rc < 0)
|
||||
goto out_free_desc;
|
||||
sha1_init(&ctx);
|
||||
sha1_update(&ctx, (const u8 *)ns, sizeof(*ns));
|
||||
sha1_update(&ctx, (const u8 *)name, size);
|
||||
sha1_final(&ctx, hash);
|
||||
|
||||
memcpy(uuid->b, hash, UUID_SIZE);
|
||||
|
||||
/* Tag for version 5 */
|
||||
uuid->b[6] = (hash[6] & 0x0F) | 0x50;
|
||||
uuid->b[8] = (hash[8] & 0x3F) | 0x80;
|
||||
|
||||
out_free_desc:
|
||||
kfree(desc);
|
||||
|
||||
out_free_shash:
|
||||
crypto_free_shash(shash);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method,
|
||||
@@ -203,7 +166,7 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method,
|
||||
kgid_t grp = INVALID_GID;
|
||||
char *name = NULL;
|
||||
int name_len;
|
||||
int rc;
|
||||
int rc = 0;
|
||||
|
||||
if (connection_method == TEE_IOCTL_LOGIN_PUBLIC ||
|
||||
connection_method == TEE_IOCTL_LOGIN_REE_KERNEL) {
|
||||
@@ -260,7 +223,7 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method,
|
||||
goto out_free_name;
|
||||
}
|
||||
|
||||
rc = uuid_v5(uuid, &tee_client_uuid_ns, name, name_len);
|
||||
uuid_v5(uuid, &tee_client_uuid_ns, name, name_len);
|
||||
out_free_name:
|
||||
kfree(name);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user