mirror of
https://github.com/openharmony/tee_tee_os_framework.git
synced 2026-07-19 19:53:44 -04:00
+18
-4
@@ -87,6 +87,10 @@ export OUTPUTDIR := $(TOPDIR)/output
|
||||
|
||||
export SDK_VER := tee-kernel-local-release
|
||||
|
||||
ifneq ($(PLATFORM),)
|
||||
export PLATFORM_DRIVERS_PATH := $(DRIVERS_PATH)/platform/$(PLATFORM)
|
||||
endif
|
||||
|
||||
PHONY += default
|
||||
default: all
|
||||
|
||||
@@ -133,11 +137,20 @@ HDR_INSTALL_DIR:=$(HDR_L_DIR)
|
||||
$(shell test -d $(HDR_INSTALL_DIR) || mkdir -p $(HDR_INSTALL_DIR))
|
||||
endif
|
||||
|
||||
check_platform:
|
||||
ifndef PLATFORM
|
||||
$(error PLATFORM is not set)
|
||||
endif
|
||||
@echo "PLATFORM is set to $(PLATFORM)"
|
||||
|
||||
PHONY += check_platform
|
||||
|
||||
# default target
|
||||
PHONY += libs $(drivers) $(frameworks) $(service) package
|
||||
all: install_headers setup_links libs $(drivers) $(frameworks) $(service) package
|
||||
tees: setup_links libs $(drivers) $(frameworks) $(service)
|
||||
PHONY += libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
|
||||
all: install_headers setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
|
||||
tees: setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service)
|
||||
$(drivers): setup_links libs link_libs
|
||||
$(platform_drivers): check_platform setup_links libs link_libs
|
||||
$(frameworks): setup_links libs link_libs
|
||||
$(service): setup_links libs link_libs
|
||||
package: check_sym
|
||||
@@ -197,7 +210,8 @@ check_sym: $(product_apps)
|
||||
echo " [ CHECK a64 SYMS ]: $$i" ;\
|
||||
$(BUILD_TOOLS)/generate_img/check-syms.sh $$i \
|
||||
$(PREBUILD_LIBS)/aarch64/libc_shared.so \
|
||||
$(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so; \
|
||||
$(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so \
|
||||
$(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so; \
|
||||
done ; fi
|
||||
$(BUILD_TOOLS)/generate_img/smart-strip.sh $(product_apps)
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
# PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 GEN_CONF_FILE -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PREBUILD_OPENSSL -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 install_headers -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 libs -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 tees -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 package -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 GEN_CONF_FILE -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 PREBUILD_OPENSSL -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 install_headers -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 libs -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 tees -j
|
||||
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 package -j
|
||||
|
||||
@@ -36,7 +36,7 @@ endif
|
||||
else #32bit
|
||||
|
||||
cfi-no-icall := libswcrypto_engine_a32.a tarunner_a32.elf libtimer_a32.a libcrypto_hal_a32.a libteeos_a32.a \
|
||||
libpermission_service_a32.a libtaentry_a32.a libcrypto_a32.a libssa_a32.a #libdrv_frame_a32.a
|
||||
libpermission_service_a32.a libtaentry_a32.a libcrypto_a32.a libssa_a32.a libdrv_frame_a32.a
|
||||
|
||||
no-cfi:= libopenssl${TARG}.a
|
||||
|
||||
|
||||
@@ -53,9 +53,9 @@ flags += -DTEE_SUPPORT_HUK_SERVICE_32BIT
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_DRVMGR_64BIT), true)
|
||||
#flags += -DTEE_SUPPORT_DRV_SERVER_64BIT
|
||||
flags += -DTEE_SUPPORT_DRV_SERVER_64BIT
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_DRVMGR_64BIT), false)
|
||||
#flags += -DTEE_SUPPORT_DRV_SERVER_32BIT
|
||||
flags += -DTEE_SUPPORT_DRV_SERVER_32BIT
|
||||
endif
|
||||
|
||||
@@ -19,16 +19,16 @@ include $(BUILD_CONFIG)/arch_config.mk
|
||||
libtee_shared_a32: libteeconfig libtimer libteeagentcommon_client libcrypto_hal libswcrypto_engine $(crypto_lib) libteedynsrv libtee_stub
|
||||
libtee_shared: libteeconfig libtimer libteeagentcommon_client libcrypto_hal libswcrypto_engine $(crypto_lib) libteedynsrv libtee_stub
|
||||
|
||||
libdrv_shared_a32: #libteeconfig_a32
|
||||
libdrv_shared: #libteeconfig
|
||||
libdrv_shared_a32: libteeconfig_a32
|
||||
libdrv_shared: libteeconfig
|
||||
|
||||
teelib := libcrypto_hal libtimer libagent libagent_base libdrv libteeos libpermission_service \
|
||||
libswcrypto_engine libtaentry libteeagentcommon_client libcrypto libteeconfig libteemem \
|
||||
libssa libhuk libteedynsrv libopenssl libipc_hal libtee_stub
|
||||
syslib := libelf_verify libspawn_common libelf_verify_key libdynconfmgr libdynconfbuilder
|
||||
drvlib := #libdrv_frame
|
||||
drvlib := libdrv_frame
|
||||
|
||||
libs: libtee_shared $(syslib) #libdrv_shared
|
||||
libs: libtee_shared $(syslib) libdrv_shared
|
||||
@echo "libsok"
|
||||
|
||||
$(teelib):
|
||||
@@ -58,7 +58,7 @@ libdrv_shared: $(drvlib)
|
||||
|
||||
# compile drivers rules
|
||||
|
||||
frameworks := gtask teesmcmgr tarunner #drvmgr
|
||||
frameworks := gtask teesmcmgr tarunner drvmgr
|
||||
service := huk_service
|
||||
|
||||
ifdef CONFIG_SSA_64BIT
|
||||
@@ -69,12 +69,21 @@ ifdef CONFIG_PERMSRV_64BIT
|
||||
service += permission_service
|
||||
endif
|
||||
|
||||
#drivers := crypto_mgr
|
||||
drivers := crypto_mgr
|
||||
platform_drivers :=
|
||||
|
||||
ifdef CONFIG_TEE_MISC_DRIVER_64BIT
|
||||
#drivers += tee_misc_driver
|
||||
drivers += tee_misc_driver
|
||||
endif
|
||||
|
||||
ifdef CONFIG_HADRWARE_CRYPTO_ENABLE
|
||||
platform_drivers += libhardware_crypto_drv
|
||||
endif
|
||||
|
||||
$(platform_drivers):
|
||||
@echo "building platform_drivers=$@ target path $(PLATFORM_DRIVERS_PATH)/$@"
|
||||
$(VER) LDFLAGS= $(MAKE) -C $(PLATFORM_DRIVERS_PATH)/$@ ARCH=aarch64 -f $(PREBUILD_HEADER)/.config -f Makefile all
|
||||
|
||||
$(drivers):
|
||||
@echo "building ARCH=arm driver=$@ target"
|
||||
$(VER) LDFLAGS= $(MAKE) -C $(DRIVERS_PATH)/$@ ARCH=arm TARG=_a32 -f $(PREBUILD_HEADER)/.config -f Makefile all
|
||||
|
||||
@@ -72,42 +72,42 @@ endif
|
||||
|
||||
ifneq ($(CONFIG_DRVMGR_64BIT),)
|
||||
ifeq ($(CONFIG_SUPPORT_64BIT),)
|
||||
#product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
|
||||
#product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
|
||||
product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
|
||||
product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
|
||||
else
|
||||
ifeq ($(CONFIG_SUPPORT_64BIT), true)
|
||||
#product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
|
||||
product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
|
||||
endif
|
||||
ifeq ($(CONFIG_SUPPORT_64BIT), false)
|
||||
#product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
|
||||
product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_DRVMGR_64BIT), true)
|
||||
#product_apps += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
|
||||
#check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
|
||||
product_apps += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
|
||||
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
|
||||
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), true)
|
||||
#product_apps += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
|
||||
#check-s64-syms-y += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
|
||||
product_apps += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
|
||||
check-s64-syms-y += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CONFIG_DRVMGR_64BIT), false)
|
||||
#product_apps += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
|
||||
#check-syms-y += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
|
||||
product_apps += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
|
||||
check-syms-y += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
|
||||
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), false)
|
||||
#product_apps += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
|
||||
#check-syms-y += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
|
||||
product_apps += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
|
||||
check-syms-y += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT), true)
|
||||
#product_apps += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
|
||||
#check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
|
||||
product_apps += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
|
||||
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
|
||||
endif
|
||||
ifeq ($(CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT), false)
|
||||
#product_apps += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
|
||||
#check-syms-y += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
|
||||
product_apps += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
|
||||
check-syms-y += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_ARCH_AARCH64),y)
|
||||
@@ -117,3 +117,8 @@ else
|
||||
product_apps += $(OUTPUTDIR)/arm/apps/teesmcmgr.elf
|
||||
check-syms-y += $(OUTPUTDIR)/arm/apps/teesmcmgr.elf
|
||||
endif
|
||||
|
||||
ifdef CONFIG_HADRWARE_CRYPTO_ENABLE
|
||||
product_apps += $(OUTPUTDIR)/aarch64/drivers/libhardware_crypto_drv.so
|
||||
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/libhardware_crypto_drv.so
|
||||
endif
|
||||
|
||||
@@ -46,6 +46,7 @@ CONFIG_APP_TEE_PERM=y
|
||||
CONFIG_APP_TEE_HUK=y
|
||||
CONFIG_OH_LOAD_KEY=y
|
||||
CONFIG_DISABLE_PERM_STORAGE=y
|
||||
CONFIG_DISABLE_MULTI_DRV=y
|
||||
#
|
||||
# lib
|
||||
#
|
||||
@@ -95,3 +96,7 @@ CONFIG_CC_STACKPROTECTOR_STRONG=y
|
||||
# Log
|
||||
#
|
||||
TLOG_USE_TEE_PRINT=y
|
||||
|
||||
CRYPTO_MGR_SERVER_ENABLE=y
|
||||
CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT=true
|
||||
CONFIG_HADRWARE_CRYPTO_ENABLE=y
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "crypto_syscall_pm.h"
|
||||
|
||||
struct crypto_drv_ops_t *g_drv_entry = NULL;
|
||||
#define DRV_NAME "/tafs/libhardware_crypto_drv.so"
|
||||
#define DRV_NAME "libhardware_crypto_drv.so"
|
||||
|
||||
static int32_t load_drv_hardware(void)
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <tee_log.h>
|
||||
#include "drv_random.h"
|
||||
#include "crypto_driver_adaptor.h"
|
||||
#include <securec.h>
|
||||
|
||||
const char *g_debug_prefix = "crypto_mgr";
|
||||
uint8_t *g_src_ctx_buf = NULL;
|
||||
@@ -50,7 +51,7 @@ static int32_t crypto_ioctl_alloc_ctx_buf(struct drv_data *drv, uint32_t cmd, un
|
||||
tloge("Malloc ctx buffer failed, ctx size=%d\n", ctx_size);
|
||||
return CRYPTO_OVERFLOW;
|
||||
}
|
||||
if (memset_s(ctx_buffer, (size_t)ctx_size, 0, (size_t)ctx_size) != EOK) {
|
||||
if (memset_s(ctx_buffer, (size_t)ctx_size, 0, (size_t)ctx_size) != 0) {
|
||||
tloge("memset ctx buffer failed\n");
|
||||
free(ctx_buffer);
|
||||
return CRYPTO_ERROR_SECURITY;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
|
||||
# Licensed under the Mulan PSL v2.
|
||||
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
# You may obtain a copy of Mulan PSL v2 at:
|
||||
# http://license.coscl.org.cn/MulanPSL2
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
# PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
DRIVER := libhardware_crypto_drv.so
|
||||
|
||||
include $(BUILD_CONFIG)/var.mk
|
||||
|
||||
libhardware_crypto_drv_c_files += $(wildcard src/*.c)
|
||||
|
||||
inc-flags += -I$(FRAMEWORK_PATH)/drvmgr/src
|
||||
inc-flags += -I$(DRIVERS_PATH)/include
|
||||
inc-flags += -I$(DRVLIB)/common/libdrv_frame/include
|
||||
inc-flags += -I$(DRVLIB)/libdrv_shared/include
|
||||
inc-flags += -I$(DRIVERS_PATH)/crypto_mgr/src/crypto_ioctl/
|
||||
inc-flags += -I$(TEELIB)/libcrypto_hal/include
|
||||
inc-flags += -I$(TEELIB)/libteeos/include/tee
|
||||
inc-flags += -I$(TEELIB)/libteeos/include/legacy
|
||||
inc-flags += -I$(TEELIB)/libtimer/include
|
||||
inc-flags += -I$(TEELIB)/libteemem/include
|
||||
|
||||
# Libraries
|
||||
|
||||
SVC_PARTITIAL_LINK = y
|
||||
include $(BUILD_SERVICE)/svc-common.mk
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
|
||||
* Licensed under the Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
#include <crypto_driver_adaptor_ops.h>
|
||||
#include <drv_io_share.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define MIN(x, y) ((x) < (y) ? (x) : (y))
|
||||
#define BIT(x) (1 << (x))
|
||||
|
||||
#define TRNG_64_BIT_LEN (0 << 4)
|
||||
#define TRNG_128_BIT_LEN (1 << 4)
|
||||
#define TRNG_192_BIT_LEN (2 << 4)
|
||||
#define TRNG_256_BIT_LEN (3 << 4)
|
||||
#define TRNG_FATESY_SOC_RING (0 << 2)
|
||||
#define TRNG_SLOWER_SOC_RING_0 (1 << 2)
|
||||
#define TRNG_SLOWER_SOC_RING_1 (2 << 2)
|
||||
#define TRNG_SLOWEST_SOC_RING (3 << 2)
|
||||
#define TRNG_ENABLE BIT(1)
|
||||
#define TRNG_START BIT(0)
|
||||
#define TRNG_BASE (0xfe370000)
|
||||
#define TRNG_SIZE (0x10000)
|
||||
#define TRNG_RNG_CTL(addr) ((addr) + 0x0400)
|
||||
#define TRNG_RST_CTL(addr) ((addr) + 0x0004)
|
||||
#define TRNG_RNG_SAMPLE_CNT(addr) ((addr) + 0x0404)
|
||||
#define TRNG_RNG_DOUT(addr, x) ((addr) + 0x0410 + 4 * (x))
|
||||
|
||||
static void put32(unsigned long addr, uint32_t val)
|
||||
{
|
||||
*(volatile uint32_t *)addr = val;
|
||||
}
|
||||
|
||||
static uint32_t get32(unsigned long addr)
|
||||
{
|
||||
return *(volatile uint32_t *)addr;
|
||||
}
|
||||
|
||||
static void set32(unsigned long addr, uint32_t set_mask)
|
||||
{
|
||||
put32(addr, get32(addr) | set_mask);
|
||||
}
|
||||
|
||||
static unsigned long s_trng_vaddr;
|
||||
|
||||
int32_t init(void)
|
||||
{
|
||||
s_trng_vaddr = (unsigned long)ioremap((uintptr_t)TRNG_BASE, TRNG_SIZE, PROT_READ | PROT_WRITE);
|
||||
if ((void *)s_trng_vaddr == NULL)
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t hw_rng(void)
|
||||
{
|
||||
int reg = 0;
|
||||
uint64_t rnd;
|
||||
|
||||
set32(TRNG_RNG_SAMPLE_CNT(s_trng_vaddr), 100);
|
||||
|
||||
reg |= TRNG_64_BIT_LEN;
|
||||
reg |= TRNG_SLOWER_SOC_RING_0;
|
||||
reg |= TRNG_ENABLE;
|
||||
reg |= TRNG_START;
|
||||
|
||||
put32(TRNG_RNG_CTL(s_trng_vaddr), ((0xffff) | (reg)) << 16 | (reg));
|
||||
|
||||
set32(TRNG_RNG_CTL(s_trng_vaddr), 0b1);
|
||||
while (get32(TRNG_RNG_CTL(s_trng_vaddr)) & 1);
|
||||
|
||||
rnd = ((uint64_t)get32(TRNG_RNG_DOUT(s_trng_vaddr, 0)) << 32) | (uint64_t)get32(TRNG_RNG_DOUT(s_trng_vaddr, 1));
|
||||
|
||||
put32(TRNG_RNG_CTL(s_trng_vaddr), (0xffff) << 16);
|
||||
|
||||
return rnd;
|
||||
}
|
||||
|
||||
int32_t generate_random(void *buffer, size_t size)
|
||||
{
|
||||
size_t i;
|
||||
int rnd;
|
||||
for (i = 0; i < size; i += sizeof(uint64_t)) {
|
||||
rnd = hw_rng();
|
||||
memcpy(buffer + i, &rnd, MIN(sizeof(uint64_t), size - i));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
__attribute__((visibility("default"))) const struct crypto_drv_ops_t g_crypto_drv_ops = {
|
||||
.init = init,
|
||||
.generate_random = generate_random,
|
||||
};
|
||||
@@ -9,6 +9,7 @@
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include "drv_sharedmem.h"
|
||||
#include <securec.h>
|
||||
#include "tee_log.h"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "target_type.h"
|
||||
#include "tee_config.h"
|
||||
#include "tee_log.h"
|
||||
#include <securec.h>
|
||||
|
||||
const struct base_driver_node g_product_base_drv[] = {
|
||||
#ifdef CRYPTO_MGR_SERVER_ENABLE
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include "drv_dispatch.h"
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
@@ -37,7 +38,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req_msg_t *msg,
|
||||
const struct cap_message_info *info)
|
||||
const struct src_msginfo *info)
|
||||
{
|
||||
spawn_uuid_t uuid;
|
||||
int32_t ret;
|
||||
@@ -46,27 +47,21 @@ static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t cnode_idx = info->src_cnode_idx;
|
||||
if ((cnode_idx == 0) || (info->msg_size < sizeof(struct drv_req_msg_t))) {
|
||||
tloge("invalid cnode or invalid msg size\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = getuuid(info->src_cred.pid, &uuid);
|
||||
ret = getuuid(info->src_pid, &uuid);
|
||||
if (ret != 0) {
|
||||
tloge("get pid:%u uuid failed\n", info->src_cred.pid);
|
||||
tloge("get pid:%u uuid failed\n", info->src_pid);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = memcpy_s(&(params->uuid), sizeof(params->uuid), &uuid.uuid, sizeof(uuid.uuid));
|
||||
if (ret != 0) {
|
||||
tloge("copy pid:%u uuid:0x%x to params failed\n", info->src_cred.pid, uuid.uuid.timeLow);
|
||||
tloge("copy pid:%u uuid:0x%x to params failed\n", info->src_pid, uuid.uuid.timeLow);
|
||||
return -1;
|
||||
}
|
||||
|
||||
params->args = (uintptr_t)msg->args;
|
||||
params->data = (uintptr_t)msg->data;
|
||||
params->caller_pid = pid_to_taskid(TCBCREF2TID(info->src_tcb_cref), info->src_cred.pid);
|
||||
params->caller_pid = pid_to_taskid(info->src_tid, info->src_pid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -745,7 +740,7 @@ static void driver_reply_error_handle(int32_t swi_id, const struct tee_drv_param
|
||||
driver_open_reply_error_callback(ret_val, params);
|
||||
}
|
||||
|
||||
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct cap_message_info *info,
|
||||
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
|
||||
struct drv_reply_msg_t *rmsg, const cref_t *msg_hdl)
|
||||
{
|
||||
int64_t ret_val = -1;
|
||||
@@ -791,7 +786,7 @@ static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const stru
|
||||
return ret;
|
||||
}
|
||||
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct cap_message_info *info)
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
|
||||
{
|
||||
int32_t ret;
|
||||
struct drv_reply_msg_t reply_raw_buf;
|
||||
|
||||
@@ -166,6 +166,7 @@ static int32_t init_spawn_argv(const char *drv_name, uint32_t drv_name_len,
|
||||
|
||||
static void init_spawn_buffer(struct spawn_drv_buffer *buffer)
|
||||
{
|
||||
g_argv[ARGV_ELF_PATH_INDEX] = (char *)g_drv_loader;
|
||||
g_argv[ARGV_TASK_NAME_INDEX] = buffer->argv.task_name;
|
||||
g_argv[ARGV_TASK_PATH_INDEX] = buffer->argv.task_path;
|
||||
g_argv[ARGV_UNCOMMIT_INDEX] = buffer->argv.uncommit;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "drv_thread.h"
|
||||
#include "drv_process_mgr.h"
|
||||
#include "tee_log.h"
|
||||
#include "cs.h"
|
||||
|
||||
const char *g_debug_prefix = "drvmgr";
|
||||
|
||||
@@ -33,7 +34,6 @@ int32_t main(int32_t argc __attribute__((unused)), char *argv[] __attribute__((u
|
||||
{
|
||||
static dispatch_fn_t dispatch_fns[] = {
|
||||
[0] = driver_dispatch,
|
||||
[HM_MSG_HEADER_CLASS_ACMGR_PUSH] = ac_dispatch,
|
||||
};
|
||||
|
||||
tlogi("drvmgr main begin\n");
|
||||
@@ -74,6 +74,7 @@ int32_t main(int32_t argc __attribute__((unused)), char *argv[] __attribute__((u
|
||||
tloge("drv thread init fail\n");
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
tlogi("%s: start server loop\n", drv_frame.name);
|
||||
cs_server_loop(ch, dispatch_fns, ARRAY_SIZE(dispatch_fns), NULL, NULL);
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "task_mgr.h"
|
||||
#include <tee_log.h>
|
||||
#include <ipclib.h>
|
||||
#include <ac_const.h>
|
||||
#include <libdrv_frame.h>
|
||||
#include <dyn_conf_dispatch_inf.h>
|
||||
#include <target_type.h>
|
||||
@@ -24,6 +23,7 @@
|
||||
#include "drv_dyn_policy_mgr.h"
|
||||
#include "drv_index_mgr.h"
|
||||
#include "drv_dyn_conf_mgr.h"
|
||||
#include <securec.h>
|
||||
|
||||
static struct dlist_node g_task_list = dlist_head_init(g_task_list);
|
||||
static pthread_mutex_t g_task_mtx = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
@@ -130,13 +130,6 @@ static int32_t create_task_channel(const char *task_name, const struct env_param
|
||||
}
|
||||
|
||||
tlogd("create drv:%s channel:0x%llx\n", task_name, (unsigned long long)(*drv_channel));
|
||||
|
||||
/* used for irq thread */
|
||||
ret = ipc_create_channel(NULL, IPC_CHANNEL_NUM, NULL, reg_items);
|
||||
if (ret != 0) {
|
||||
tloge("create drv irq channel failed\n");
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
/* Create 2 IPC channels */
|
||||
ret = ipc_create_channel(task_name, IPC_CHANNEL_NUM, NULL, reg_items);
|
||||
|
||||
@@ -11,14 +11,19 @@
|
||||
*/
|
||||
#ifndef PLATDRV_DRV_THREAD_H
|
||||
#define PLATDRV_DRV_THREAD_H
|
||||
#include <alltypes.h>
|
||||
#include <bits/alltypes.h>
|
||||
#include <drv.h>
|
||||
#include <spawn_ext.h>
|
||||
|
||||
#define DRV_CALL_OK 0
|
||||
#define DRV_CALL_ERROR (-1)
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info);
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
|
||||
|
||||
#ifdef CONFIG_DISABLE_MULTI_DRV
|
||||
#define DRV_THREAD_MAX 0
|
||||
#else /* CONFIG_DISABLE_MULTI_DRV */
|
||||
#define DRV_THREAD_MAX 8
|
||||
#endif /* CONFIG_DISABLE_MULTI_DRV */
|
||||
#define INVALID_CALLER_PID (-1)
|
||||
#define TASK_MAX 20
|
||||
#define REPLY_BUF_LEN 2048U
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#define LIBDRV_FRAME_DRV_FRAME_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "ipclib.h"
|
||||
|
||||
typedef int32_t (*drv_frame_init_t)(void);
|
||||
|
||||
|
||||
@@ -10,11 +10,12 @@
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include "drv_param_ops.h"
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <drv_thread.h>
|
||||
#include <tee_log.h>
|
||||
#include <unistd.h>
|
||||
#include <tee_sharemem_ops.h>
|
||||
|
||||
static int32_t get_drv_caller_taskid(uint32_t *taskid)
|
||||
|
||||
@@ -11,11 +11,14 @@
|
||||
*/
|
||||
#include "drv_thread.h"
|
||||
#include <errno.h>
|
||||
#include <securec.h>
|
||||
#include <ipclib.h>
|
||||
#include <tee_log.h>
|
||||
#include <mem_page_ops.h>
|
||||
#include <tee_drv_internal.h>
|
||||
#include <ipclib_hal.h>
|
||||
#include <semaphore.h>
|
||||
#include "cs.h"
|
||||
|
||||
#define IPC_CHANNEL_NUM 2
|
||||
static pthread_mutex_t g_drv_caller_info_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
@@ -15,11 +15,8 @@
|
||||
#include <dlfcn.h>
|
||||
#include <unistd.h>
|
||||
#include <ipclib.h>
|
||||
#include <sys/kuapi.h>
|
||||
#include <fileio.h>
|
||||
#include <timer.h>
|
||||
#include <irqmgr.h>
|
||||
#include <tamgr_ext.h>
|
||||
#include <tee_tag.h>
|
||||
#include <tee_drv_internal.h>
|
||||
#include <ipclib_hal.h>
|
||||
@@ -71,7 +68,7 @@ static int32_t system_init(const char *name)
|
||||
|
||||
set_log_use_tid_flag();
|
||||
|
||||
ret = hm_tamgr_register(name);
|
||||
ret = tamgr_register(name);
|
||||
if (ret != 0) {
|
||||
tloge("%s: tamgr registration for platdrv failed\n", name);
|
||||
return -1;
|
||||
@@ -90,7 +87,6 @@ int32_t register_drv_framework(const struct drv_frame_t *drv_frame, cref_t *ch,
|
||||
}
|
||||
|
||||
print_drv_info(drv_frame->name);
|
||||
_init();
|
||||
|
||||
ret = ipc_init(drv_frame->name, ch);
|
||||
if (ret != 0)
|
||||
|
||||
@@ -50,6 +50,11 @@ inc-flags += -I$(SYSLIB)/libspawn_common/include
|
||||
inc-flags += -I$(TEELIB)/libteeconfig/include
|
||||
endif
|
||||
|
||||
ifneq ($(CRYPTO_MGR_SERVER_ENABLE), )
|
||||
inc-flags += -I$(TEELIB)/libcrypto_hal/include
|
||||
inc-flags += -I$(TEELIB)/libcrypto/include
|
||||
endif
|
||||
|
||||
include $(BUILD_CONFIG)/feature-macro.mk
|
||||
|
||||
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
|
||||
@@ -73,7 +78,7 @@ $(BUILD_DIR)/export.txt: export.txt
|
||||
@${CC} ${flags} -P -E -o $@ -x c $<
|
||||
|
||||
ld-flags :=
|
||||
ld-flags += -lhwi$(TARG) -lc_shared$(TARG) -lteemem$(TARG) -lteeconfig$(TARG) -lio$(TARG)
|
||||
ld-flags += -lc_shared$(TARG) -lteemem$(TARG) -lteeconfig$(TARG)
|
||||
|
||||
ld-flags += -z separate-loadable-segments
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
|
||||
* Licensed under the Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#ifndef LIBDRV_IO_SHARED_H
|
||||
#define LIBDRV_IO_SHARED_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void *ioremap(uintptr_t phys_addr, unsigned long size, int32_t prot);
|
||||
int32_t iounmap(uintptr_t pddr, const void *addr);
|
||||
|
||||
#endif
|
||||
@@ -9,6 +9,7 @@
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include "drv_dispatch.h"
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
@@ -26,23 +27,17 @@
|
||||
#include <unistd.h>
|
||||
|
||||
static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req_msg_t *msg,
|
||||
const struct hmcap_message_info *info)
|
||||
const struct src_msginfo *info)
|
||||
{
|
||||
if (msg == NULL || info == NULL) {
|
||||
tloge("invalid parameters\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t cnode_idx = info->src_cnode_idx;
|
||||
if ((cnode_idx == 0) || (info->msg_size < sizeof(struct drv_req_msg_t))) {
|
||||
tloge("invalid cnode or invalid msg size\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* params uuid will set in open/ioctl/close function */
|
||||
params->args = (uintptr_t)msg->args;
|
||||
params->data = (uintptr_t)msg->data;
|
||||
params->caller_pid = pid_to_taskid(TCBCREF2TID(info->src_tcb_cref), info->src_cred.pid);
|
||||
params->caller_pid = pid_to_taskid(info->src_tid, info->src_pid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -156,7 +151,7 @@ static int32_t driver_syscall_dispatch(int32_t swi_id, struct tee_drv_param *par
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int32_t driver_syscall(const struct drv_req_msg_t *msg, const struct hmcap_message_info *info,
|
||||
static int32_t driver_syscall(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
|
||||
struct tee_drv_param *params, int32_t swi_id, int64_t *ret_val)
|
||||
{
|
||||
int32_t ret;
|
||||
@@ -204,7 +199,7 @@ static void driver_reply_error_handle(int32_t swi_id, const struct tee_drv_param
|
||||
tloge("close fd:%" PRIx64 " failed in reply error handle\n", ret_val);
|
||||
}
|
||||
|
||||
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct hmcap_message_info *info,
|
||||
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
|
||||
struct drv_reply_msg_t *rmsg, const cref_t *msg_hdl)
|
||||
{
|
||||
int64_t ret_val = -1;
|
||||
@@ -230,7 +225,7 @@ static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const stru
|
||||
return ret;
|
||||
}
|
||||
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info)
|
||||
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
|
||||
{
|
||||
struct drv_reply_msg_t reply_raw_buf;
|
||||
int32_t ret;
|
||||
|
||||
@@ -10,9 +10,7 @@
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#include "drv_random.h"
|
||||
#include <rnd_seed.h>
|
||||
#include <priorities.h>
|
||||
#include <fileio.h>
|
||||
#include "tee_log.h"
|
||||
|
||||
static crypto_drv_init g_rand = 0;
|
||||
@@ -24,43 +22,10 @@ void register_crypto_rand_driver(crypto_drv_init fun, void *ops)
|
||||
g_crypto_ops = ops;
|
||||
}
|
||||
|
||||
static int32_t drv_push_random(struct hmcap_message_info *info)
|
||||
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
|
||||
{
|
||||
int32_t ret;
|
||||
uint64_t rnd[PUSHED_RND_64_NUM] = { 0 };
|
||||
|
||||
if (info == NULL || g_rand == 0 || g_crypto_ops == NULL) {
|
||||
tloge("invalid args or fun is not register\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = g_rand(g_crypto_ops, rnd, sizeof(rnd));
|
||||
if (ret != 0) {
|
||||
tloge("gen random failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return push_random(info, rnd, sizeof(rnd));
|
||||
}
|
||||
|
||||
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info)
|
||||
{
|
||||
int32_t ret;
|
||||
|
||||
if (p_msg_hdl == NULL || msg == NULL || info == NULL)
|
||||
return -1;
|
||||
|
||||
cref_t msg_hdl = *p_msg_hdl;
|
||||
msg_header *msg_hdr = (msg_header *)msg;
|
||||
|
||||
switch (msg_hdr->send.msg_id) {
|
||||
case HM_MSG_ID_DRV_PUSHED_RANDOM:
|
||||
ret = drv_push_random(info);
|
||||
break;
|
||||
default:
|
||||
ret = reply_invalid_rand_request(msg_hdl);
|
||||
break;
|
||||
}
|
||||
|
||||
return (intptr_t)ret;
|
||||
(void)msg;
|
||||
(void)p_msg_hdl;
|
||||
(void)info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -15,8 +15,9 @@
|
||||
#include <stdint.h>
|
||||
#include <tee_defines.h>
|
||||
#include <errno.h>
|
||||
#include <ipclib.h>
|
||||
|
||||
typedef int32_t (*crypto_drv_init) (const void *ops, void *buf, uint32_t buf_len);
|
||||
void register_crypto_rand_driver(crypto_drv_init fun, void *ops);
|
||||
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info);
|
||||
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
|
||||
#endif
|
||||
|
||||
@@ -14,19 +14,8 @@
|
||||
#include <stdint.h>
|
||||
#include "drv_io_share.h"
|
||||
#include "drv_addr_share.h"
|
||||
#include "iomgr_ext.h"
|
||||
#include "drv_thread.h"
|
||||
|
||||
void *ioremap(uintptr_t phys_addr, unsigned long size, int32_t prot)
|
||||
{
|
||||
return hm_io_remap((uintptr_t)phys_addr, NULL, size, prot);
|
||||
}
|
||||
|
||||
int32_t iounmap(uintptr_t pddr, const void *addr)
|
||||
{
|
||||
return hm_io_unmap(pddr, addr);
|
||||
}
|
||||
|
||||
uint64_t drv_virt_to_phys(uintptr_t addr)
|
||||
{
|
||||
return virt_to_phys(addr);
|
||||
|
||||
@@ -14,16 +14,15 @@
|
||||
#include <inttypes.h>
|
||||
#include <priorities.h>
|
||||
#include <ipclib.h>
|
||||
#include <irqmgr.h>
|
||||
#include <spawn_init.h>
|
||||
#include <tee_log.h>
|
||||
#include "drv_dispatch.h"
|
||||
#include "drv_thread.h"
|
||||
#include "drv_operations.h"
|
||||
#include "cs.h"
|
||||
#ifdef CRYPTO_MGR_SERVER_ENABLE
|
||||
#include "drv_random.h"
|
||||
#include "crypto_manager.h"
|
||||
#include <rnd_seed.h>
|
||||
#endif
|
||||
|
||||
static taskid_t g_drv_mgr_pid;
|
||||
@@ -56,32 +55,6 @@ uint32_t get_drv_index(void)
|
||||
return g_drv_index;
|
||||
}
|
||||
|
||||
static int32_t hwi_context_init(const char *drv_name)
|
||||
{
|
||||
cref_t hwi_ch = 0;
|
||||
const int channel_index = 1;
|
||||
|
||||
int32_t ret = ipc_get_my_channel(channel_index, &hwi_ch);
|
||||
if (ret != 0) {
|
||||
tloge("drv %s get ipc channel for hwi fail:0x%x\n", drv_name, ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = hwi_init(hwi_ch);
|
||||
if (ret != 0) {
|
||||
tloge("drv %s hwi init failed 0x%x\n", drv_name, ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = hwi_create_irq_thread();
|
||||
if (ret != 0) {
|
||||
tloge("drv %s create hwi irq thread fail:0x%x\n", drv_name, ret);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t send_succ_msg_to_drvmgr(void)
|
||||
{
|
||||
cref_t ch = -1;
|
||||
@@ -148,9 +121,6 @@ void tee_drv_entry(const struct tee_driver_module *drv_func, const char *drv_nam
|
||||
{
|
||||
static dispatch_fn_t dispatch_fns[] = {
|
||||
[0] = driver_dispatch,
|
||||
#ifdef CRYPTO_MGR_SERVER_ENABLE
|
||||
[HM_MSG_HEADER_CLASS_UPDATE_RND] = rand_update,
|
||||
#endif
|
||||
};
|
||||
|
||||
int32_t ret = param_check(drv_func, drv_name, param);
|
||||
@@ -159,24 +129,9 @@ void tee_drv_entry(const struct tee_driver_module *drv_func, const char *drv_nam
|
||||
|
||||
tlogi("%s begin thread_limit:%u drv_index:%u\n", drv_name, param->thread_limit, param->drv_index);
|
||||
|
||||
#ifdef CRYPTO_MGR_SERVER_ENABLE
|
||||
if (strcmp(drv_name, TEE_CRYPTO_DRIVER_NAME) == 0) {
|
||||
ret = ipc_register_ch_path(RAND_DRV_PATH, ch);
|
||||
if (ret != 0) {
|
||||
tloge("failed to register channel with name \"%s\":%d\n", RAND_DRV_PATH, ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
g_drv_func = drv_func;
|
||||
g_drv_index = param->drv_index;
|
||||
|
||||
ret = hwi_context_init(drv_name);
|
||||
if (ret != 0) {
|
||||
tloge("drv:%s hwi init failed\n", drv_name);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = hunt_drv_mgr_pid(&g_drv_mgr_pid);
|
||||
if (ret != 0)
|
||||
return;
|
||||
|
||||
@@ -1457,8 +1457,11 @@ void dump_drv_conf(void)
|
||||
{
|
||||
uint64_t args[] = {};
|
||||
uint32_t lens[] = {};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
(void)drv_call_new("drvmgr_multi", DUMP_DRV_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#else
|
||||
(void)drv_call_new("drvmgr", DUMP_DRV_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#endif
|
||||
}
|
||||
|
||||
static int32_t send_drv_service_name(const char *service_name, uint32_t name_size)
|
||||
@@ -1472,8 +1475,11 @@ static int32_t send_drv_service_name(const char *service_name, uint32_t name_siz
|
||||
name_size,
|
||||
0,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
return drv_call_new("drvmgr_multi", UNREGISTER_DRV_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#else
|
||||
return drv_call_new("drvmgr", UNREGISTER_DRV_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#endif
|
||||
}
|
||||
|
||||
void uninstall_drv_permission(const void *obj, uint32_t obj_size)
|
||||
|
||||
@@ -293,8 +293,11 @@ static int32_t send_drvcall_uuid(const struct tee_uuid *uuid, uint32_t uuid_size
|
||||
uuid_size,
|
||||
0,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
return drv_call_new("drvmgr_multi", UNREGISTER_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#else
|
||||
return drv_call_new("drvmgr", UNREGISTER_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#endif
|
||||
}
|
||||
|
||||
void dump_drvcall_conf(void)
|
||||
@@ -302,7 +305,11 @@ void dump_drvcall_conf(void)
|
||||
uint64_t args[] = {};
|
||||
uint32_t lens[] = {};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
(void)drv_call_new("drvmgr_multi", DUMP_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#else
|
||||
(void)drv_call_new("drvmgr", DUMP_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
|
||||
#endif
|
||||
}
|
||||
|
||||
void uninstall_drvcall_permission(const void *obj, uint32_t obj_size)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
MODULE := libipc_hal${TARG}.a
|
||||
|
||||
CPPFLAGS += -I$(TEELIB)/libipc_hal/include
|
||||
CPPFLAGS += -I$(TEELIB)/libdrv/include
|
||||
CPPFLAGS += -I$(TEELIB)/libteeos/include/tee
|
||||
CPPFLAGS += -I$(PREBUILD_HEADER)/sys
|
||||
# Source files required to build the target
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
|
||||
* Licensed under the Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#ifndef __CS_H
|
||||
#define __CS_H
|
||||
|
||||
#include <tee_msg_type.h>
|
||||
#include <ipclib.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <semaphore.h>
|
||||
|
||||
#define CS_SERVER_MAX_MSG_LEN 2048
|
||||
|
||||
struct cs_req_msg {
|
||||
msg_header hdr;
|
||||
char payload[];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct reply_cs_msg {
|
||||
msg_header hdr;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct thread_init_info {
|
||||
cref_t channel;
|
||||
void *(*func)(void *arg);
|
||||
uint32_t max_thread;
|
||||
sem_t *thread_sem;
|
||||
int32_t capid;
|
||||
int32_t task_id;
|
||||
int32_t shadow;
|
||||
size_t stack_size;
|
||||
void* args;
|
||||
};
|
||||
|
||||
typedef intptr_t (*dispatch_fn_t)(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
|
||||
|
||||
void cs_server_loop(cref_t channel, const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, int (*hook)(void), void *cur_thread);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
|
||||
* Licensed under the Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
* PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#include <cs.h>
|
||||
#include <ipclib_hal.h>
|
||||
#include <tee_log.h>
|
||||
#include <securec.h>
|
||||
#include <drv.h>
|
||||
|
||||
static int do_deal_with_msg(const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, void *msg_buff,
|
||||
struct src_msginfo *info, cref_t *msg_hdl)
|
||||
{
|
||||
msg_header *msg_hdr = (msg_header *)(uintptr_t)msg_buff;
|
||||
uint8_t class = msg_hdr->send.msg_class;
|
||||
struct reply_cs_msg rmsg;
|
||||
int32_t ret = 0;
|
||||
(void)memset_s(&rmsg, sizeof(rmsg), 0, sizeof(rmsg));
|
||||
|
||||
bool flag = (class >= n_dispatch_fns) || (dispatch_fns[class] == NULL);
|
||||
if (flag) {
|
||||
rmsg.hdr.reply.ret_val = -EINVAL;
|
||||
if (info->msg_type == MSG_TYPE_CALL) {
|
||||
ret = ipc_msg_reply(*msg_hdl, &rmsg, sizeof(rmsg));
|
||||
if (ret != 0)
|
||||
tloge("cs reply msg error %d\n", ret);
|
||||
}
|
||||
} else {
|
||||
ret = dispatch_fns[class](msg_buff, msg_hdl, info);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void cs_server_loop(cref_t channel, const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, int (*hook)(void), void *cur_thread)
|
||||
{
|
||||
(void)hook;
|
||||
(void)cur_thread;
|
||||
int32_t ret;
|
||||
char msg_buf[SYSCAL_MSG_BUFFER_SIZE] = {0};
|
||||
struct cs_req_msg *msg = (struct cs_req_msg *)msg_buf;
|
||||
struct src_msginfo info = { 0 };
|
||||
for (;;) {
|
||||
cref_t msg_hdl = ipc_get_my_msghdl();
|
||||
|
||||
ret = ipc_msg_receive(channel, msg, sizeof(msg_buf), msg_hdl, &info, -1);
|
||||
if (ret != 0) {
|
||||
tloge("message receive failed, %llx\n", ret);
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = do_deal_with_msg(dispatch_fns, n_dispatch_fns, msg, &info, &msg_hdl);
|
||||
if (ret != 0) {
|
||||
tloge("deal with msg error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,6 +156,9 @@ tee_ext_root_uuid_derive_key;
|
||||
tee_hal_get_provision_key;
|
||||
g_debug_prefix;
|
||||
|
||||
cs_server_loop;
|
||||
get_valid_bit;
|
||||
|
||||
/* the following apis are exported for gtask dynamic link tee_shared library*/
|
||||
BN_new;
|
||||
BN_free;
|
||||
|
||||
@@ -155,6 +155,9 @@ tee_ext_root_uuid_derive_key;
|
||||
tee_hal_get_provision_key;
|
||||
g_debug_prefix;
|
||||
|
||||
cs_server_loop;
|
||||
get_valid_bit;
|
||||
|
||||
/* the following apis are exported for gtask dynamic link tee_shared library*/
|
||||
BN_new;
|
||||
BN_free;
|
||||
|
||||
@@ -14,8 +14,6 @@ MODULE := libteeconfig$(TARG).a
|
||||
|
||||
flags += -fno-builtin
|
||||
|
||||
flags += -DCONFIG_TEE_DRV_STUB
|
||||
|
||||
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), false)
|
||||
flags += -DCONFIG_TEE_MISC_DRIVER
|
||||
endif
|
||||
|
||||
@@ -229,8 +229,11 @@ int64_t tee_drv_open(const char *drv_name, const void *param, uint32_t param_len
|
||||
name_len,
|
||||
0,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
int64_t fd = drv_call_new("drvmgr_multi", DRV_GENERAL_CMD_ID, args, lens, ARRAY_SIZE(args));
|
||||
#else
|
||||
int64_t fd = drv_call_new("drvmgr", DRV_GENERAL_CMD_ID, args, lens, ARRAY_SIZE(args));
|
||||
#endif
|
||||
if (fd <= 0) {
|
||||
tloge("alloc fd failed\n");
|
||||
return fd;
|
||||
@@ -316,7 +319,12 @@ static int64_t tee_drv_close_handle(int64_t fd)
|
||||
(uint64_t)fd,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
int64_t ret = drv_call_new("drvmgr_multi", DRV_GENERAL_CMD_ID, args, NULL, ARRAY_SIZE(args));
|
||||
#else
|
||||
int64_t ret = drv_call_new("drvmgr", DRV_GENERAL_CMD_ID, args, NULL, ARRAY_SIZE(args));
|
||||
#endif
|
||||
|
||||
if (ret != 0)
|
||||
tloge("close fd:0x%llx fail\n", fd);
|
||||
|
||||
@@ -357,14 +365,23 @@ void tee_drv_task_exit(uint32_t exit_pid)
|
||||
exit_pid,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
int64_t ret = drv_call_new("drvmgr_multi", DRV_EXCEPTION_CMD_ID, args, NULL, ARRAY_SIZE(args));
|
||||
#else
|
||||
int64_t ret = drv_call_new("drvmgr", DRV_EXCEPTION_CMD_ID, args, NULL, ARRAY_SIZE(args));
|
||||
#endif
|
||||
|
||||
if (ret != 0)
|
||||
tloge("call driver exception failed\n");
|
||||
}
|
||||
|
||||
void tee_drv_task_dump(void)
|
||||
{
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
int64_t ret = drv_call_new("drvmgr_multi", DRV_DUMP_CMD_ID, NULL, NULL, 0);
|
||||
#else
|
||||
int64_t ret = drv_call_new("drvmgr", DRV_DUMP_CMD_ID, NULL, NULL, 0);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
tloge("drv task dump drv call failed\n");
|
||||
}
|
||||
|
||||
@@ -14,8 +14,10 @@
|
||||
|
||||
static struct drv_frame_info g_drv_frame_configs[] = {
|
||||
#if defined(TEE_SUPPORT_DRV_SERVER_64BIT) || defined(TEE_SUPPORT_DRV_SERVER_32BIT)
|
||||
{ "drvmgr", AC_SID_DRVMGR, 0, 0, 0, DRVMGR, true },
|
||||
{ "drvmgr_multi", AC_SID_DRVMGR, 0, 0, 0, DRVMGR, false },
|
||||
{ "drvmgr", 0, 0, 0, 0, DRVMGR, true },
|
||||
#ifndef CONFIG_DISABLE_MULTI_DRV
|
||||
{ "drvmgr_multi", 0, 0, 0, 0, DRVMGR, false },
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user