Browse Source

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 1 năm trước cách đây
mục cha
commit
5b4eba2697
1 tập tin đã thay đổi với 9 bổ sung8 xóa
  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 client_env = {NULL, NULL};
 	struct Object app_loader = {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);
 	ret = get_client_env_object(&client_env);
 	if (ret) {
 	if (ret) {
 		pr_err("get_client_env_object failed :%d\n", 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;
 		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,
 	ret = IAppLoader_loadFromBuffer(app_loader, (const void *)buffer, size,
 			app_controller_obj);
 			app_controller_obj);
 	if (ret) {
 	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),
 	ret = load_app(HDCPSRM_APP_NAME, &(handle->hdcpsrm_app_obj),
 		   &(handle->hdcpsrm_appcontroller_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);
 		pr_err("hdcpsrm TA load failed :%d\n", ret);
 		goto error;
 		goto error;
 	}
 	}