Loading drivers/misc/qseecom.c +27 −17 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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"); Loading @@ -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))) { Loading @@ -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, Loading @@ -2002,6 +2010,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( goto exit; } } } do { session_id = resp->resp_type; Loading Loading @@ -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); Loading Loading
drivers/misc/qseecom.c +27 −17 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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"); Loading @@ -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))) { Loading @@ -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, Loading @@ -2002,6 +2010,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( goto exit; } } } do { session_id = resp->resp_type; Loading Loading @@ -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); Loading