瀏覽代碼

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 <[email protected]>
Sheik Anwar Shabic Y 2 年之前
父節點
當前提交
5b4eba2697
共有 1 個文件被更改,包括 9 次插入8 次删除
  1. 9 8
      hdcp/hdcp_smcinvoke.c

+ 9 - 8
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;
 	}