Forráskód Böngészése

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 éve
szülő
commit
5b4eba2697
1 módosított fájl, 9 hozzáadás és 8 törlés
  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;
 	}