From b65be047f1a756bab8569ec1fa6db6d65274a34d Mon Sep 17 00:00:00 2001 From: y00809290 Date: Wed, 22 Nov 2023 19:33:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9agent=20buffer=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=EF=BC=8C=E5=A2=9E=E5=8A=A0mailbox=20pool=20count=20?= =?UTF-8?q?=E5=88=B032=EF=BC=8C=E6=BB=A1=E8=B6=B3=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=20=E8=BD=AF=E7=8B=97=E9=97=AE=E9=A2=98patch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Yinxuyang --- Makefile | 2 +- core/agent.c | 4 +++- core/smc_smp.c | 2 ++ core/tc_client_driver.c | 20 ++++++++++++++++++-- tc_ns_client.h | 4 ++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 9417880..f9f1e16 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ EXTRA_CFLAGS += -DTEECD_PATH_UID_AUTH_CTX=\"/usr/bin/teecd:0\" EXTRA_CFLAGS += -DCONFIG_AUTH_SUPPORT_UNAME -DCONFIG_AUTH_HASH -std=gnu99 EXTRA_CFLAGS += -DCONFIG_TEE_UPGRADE -DCONFIG_TEE_REBOOT -DCONFIG_CONFIDENTIAL_TEE EXTRA_CFLAGS += -I$(PWD)/tzdriver_internal/tee_reboot -EXTRA_CFLAGS += -DMAILBOX_POOL_COUNT=8 +EXTRA_CFLAGS += -DMAILBOX_POOL_COUNT=32 all: make -C $(KDIR) M=$(PWD) modules clean: diff --git a/core/agent.c b/core/agent.c index cae297b..5918a8d 100644 --- a/core/agent.c +++ b/core/agent.c @@ -53,6 +53,7 @@ #include "ko_adapt.h" #include "internal_functions.h" #include "auth_base_impl.h" +#include "tee_compat_check.h" #ifdef CONFIG_CMS_CAHASH_AUTH #define HASH_FILE_MAX_SIZE CONFIG_HASH_FILE_SIZE @@ -808,8 +809,9 @@ err_out: static bool is_valid_agent(unsigned int agent_id, unsigned int buffer_size, bool user_agent) { + unsigned int agent_buffer_threshold = is_ccos() ? SZ_512K : SZ_4K; (void)agent_id; - if (user_agent && (buffer_size > SZ_4K)) { + if (user_agent && (buffer_size > agent_buffer_threshold)) { tloge("size: %u of user agent's shared mem is invalid\n", buffer_size); return false; diff --git a/core/smc_smp.c b/core/smc_smp.c index 53139bc..8284d3f 100644 --- a/core/smc_smp.c +++ b/core/smc_smp.c @@ -1809,6 +1809,8 @@ static int smc_svc_thread_fn(void *arg) smc_cmd.cmd_id = GLOBAL_CMD_ID_SET_SERVE_CMD; ret = smp_smc_send_func(&smc_cmd, false); tlogd("smc svc return 0x%x\n", ret); + /* add schedule to avoid upgrading or rebooting soft lockup */ + cond_resched(); } tloge("smc svc thread stop\n"); return 0; diff --git a/core/tc_client_driver.c b/core/tc_client_driver.c index efe4906..9cb052c 100644 --- a/core/tc_client_driver.c +++ b/core/tc_client_driver.c @@ -92,7 +92,7 @@ #endif #include "tee_info.h" - +#include "tee_compat_check.h" static struct class *g_driver_class; static struct device_node *g_dev_node; @@ -700,6 +700,19 @@ static int ioctl_check_agent_owner(const struct tc_ns_dev_file *dev_file, return 0; } +static int ioctl_check_is_ccos(void __user *argp) +{ + int ret = 0; + unsigned int check_ccos = is_ccos() ? 1 : 0; + if (!argp) { + tloge("error input parameter\n"); + return -EINVAL; + } + if (copy_to_user(argp, &check_ccos, sizeof(unsigned int)) != 0) + ret = -EFAULT; + return ret; +} + /* ioctls for the secure storage daemon */ int public_ioctl(const struct file *file, unsigned int cmd, unsigned long arg, bool is_from_client_node) { @@ -738,8 +751,11 @@ int public_ioctl(const struct file *file, unsigned int cmd, unsigned long arg, b case TC_NS_CLIENT_IOCTL_LOAD_APP_REQ: ret = tc_ns_load_secfile(file->private_data, argp, NULL, is_from_client_node); break; + case TC_NS_CLIENT_IOCTL_CHECK_CCOS: + ret = ioctl_check_is_ccos(argp); + break; default: - tloge("invalid cmd!"); + tloge("invalid cmd! 0x%x\n", cmd); return ret; } tlogd("client ioctl ret = 0x%x\n", ret); diff --git a/tc_ns_client.h b/tc_ns_client.h index bb66146..1152a32 100644 --- a/tc_ns_client.h +++ b/tc_ns_client.h @@ -209,4 +209,8 @@ struct tc_ns_log_pool { #endif #define TC_NS_CLIENT_IOCTL_GET_TEE_INFO \ _IOWR(TC_NS_CLIENT_IOC_MAGIC, 26, struct tc_ns_tee_info) + +#define TC_NS_CLIENT_IOCTL_CHECK_CCOS \ + _IOWR(TC_NS_CLIENT_IOC_MAGIC, 32, unsigned int) + #endif -- Gitee