Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ada7ff5 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom: fix a blocked listener request issue"

parents 25156dae 0ea975d6
Loading
Loading
Loading
Loading
+27 −17
Original line number Diff line number Diff line
@@ -331,6 +331,7 @@ struct qseecom_client_handle {
	char app_name[MAX_APP_NAME_SIZE];
	u32  app_arch;
	struct qseecom_sec_buf_fd_info sec_buf_fd[MAX_ION_FD];
	bool from_smcinvoke;
};

struct qseecom_listener_handle {
@@ -1973,6 +1974,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
	sigset_t old_sigset;
	unsigned long flags;
	bool found_app = false;
	struct qseecom_registered_app_list dummy_app_entry = { {NULL} };

	if (!resp || !data) {
		pr_err("invalid resp or data pointer\n");
@@ -1981,10 +1983,16 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
	}

	/* find app_id & img_name from list */
	if (!ptr_app && data->client.app_arch != ELFCLASSNONE) {
		spin_lock_irqsave(&qseecom.registered_app_list_lock, flags);
		list_for_each_entry(ptr_app, &qseecom.registered_app_list_head,
							list) {
	if (!ptr_app) {
		if (data->client.from_smcinvoke) {
			pr_debug("This request is from smcinvoke\n");
			ptr_app = &dummy_app_entry;
			ptr_app->app_id = data->client.app_id;
		} else {
			spin_lock_irqsave(&qseecom.registered_app_list_lock,
						flags);
			list_for_each_entry(ptr_app,
				&qseecom.registered_app_list_head, list) {
				if ((ptr_app->app_id == data->client.app_id) &&
					(!strcmp(ptr_app->app_name,
						data->client.app_name))) {
@@ -1992,8 +2000,8 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
					break;
				}
			}
		spin_unlock_irqrestore(&qseecom.registered_app_list_lock,
					flags);
			spin_unlock_irqrestore(
				&qseecom.registered_app_list_lock, flags);
			if (!found_app) {
				pr_err("app_id %d (%s) is not found\n",
					data->client.app_id,
@@ -2002,6 +2010,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
				goto exit;
			}
		}
	}

	do {
		session_id = resp->resp_type;
@@ -4943,6 +4952,7 @@ int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc)
	resp.data = desc->ret[2];	/*listener_id*/

	dummy_private_data.client.app_id = desc->ret[1];
	dummy_private_data.client.from_smcinvoke = true;
	dummy_app_entry.app_id = desc->ret[1];

	mutex_lock(&app_access_lock);