Loading drivers/misc/qseecom.c +27 −17 Original line number Diff line number Diff line Loading @@ -335,6 +335,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 { Loading Loading @@ -2099,6 +2100,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"); Loading @@ -2107,10 +2109,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))) { Loading @@ -2118,8 +2126,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, Loading @@ -2128,6 +2136,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( goto exit; } } } do { session_id = resp->resp_type; Loading Loading @@ -4963,6 +4972,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); Loading Loading
drivers/misc/qseecom.c +27 −17 Original line number Diff line number Diff line Loading @@ -335,6 +335,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 { Loading Loading @@ -2099,6 +2100,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"); Loading @@ -2107,10 +2109,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))) { Loading @@ -2118,8 +2126,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, Loading @@ -2128,6 +2136,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( goto exit; } } } do { session_id = resp->resp_type; Loading Loading @@ -4963,6 +4972,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); Loading