From 5b4eba2697a3fc2af81ac4cb09f6a4a2366fbccb Mon Sep 17 00:00:00 2001 From: Sheik Anwar Shabic Y Date: Sat, 15 Jul 2023 00:29:26 +0530 Subject: [PATCH] securemsm-kernel : Add validation check for shm handle release call 1.Invalid shm handle release causing in to invalid address access. so added check to release the handle only if it is valid. 2.Skip the error if hdcpsrm ta loading is failing with already loaded error becase hdcpsrm can be loaded from wfd stack also when external monior is connected with sink device. Change-Id: Ic6c48eabfc383352e8de781bebbc2e6cd7e964e0 Signed-off-by: Sheik Anwar Shabic Y --- hdcp/hdcp_smcinvoke.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/hdcp/hdcp_smcinvoke.c b/hdcp/hdcp_smcinvoke.c index 085c9e1ff9..98aa72396b 100644 --- a/hdcp/hdcp_smcinvoke.c +++ b/hdcp/hdcp_smcinvoke.c @@ -93,6 +93,12 @@ int load_app(char *app_name, struct Object *app_obj, struct Object client_env = {NULL, NULL}; struct Object app_loader = {NULL, NULL}; + buffer = firmware_request_from_smcinvoke(app_name, &size, &shm); + if (buffer == NULL) { + pr_err("firmware_request_from_smcinvoke failed\n"); + return -EINVAL; + } + ret = get_client_env_object(&client_env); if (ret) { pr_err("get_client_env_object failed :%d\n", ret); @@ -109,13 +115,6 @@ int load_app(char *app_name, struct Object *app_obj, goto error; } - buffer = firmware_request_from_smcinvoke(app_name, &size, &shm); - if (buffer == NULL) { - pr_err("firmware_request_from_smcinvoke failed\n"); - ret = -EINVAL; - goto error; - } - ret = IAppLoader_loadFromBuffer(app_loader, (const void *)buffer, size, app_controller_obj); if (ret) { @@ -537,7 +536,9 @@ static int hdcp2_app_load(struct hdcp2_smcinvoke_handle *handle) ret = load_app(HDCPSRM_APP_NAME, &(handle->hdcpsrm_app_obj), &(handle->hdcpsrm_appcontroller_obj)); - if (ret) { + if (ret == 16) { + pr_err("hdcpsrm TA already loaded\n"); + } else if (ret) { pr_err("hdcpsrm TA load failed :%d\n", ret); goto error; }