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

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

Merge "qseecom: add additonal reentrancy check before scm call"

parents b07ffac3 a1c47658
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -2129,22 +2129,24 @@ static void __qseecom_reentrancy_check_if_no_app_blocked(uint32_t smc_id)
}
}


/*
/*
 * scm_call send command to a blocked TZ app will fail
 * scm_call of send data will fail if this TA is blocked or there are more
 * So, first check and then wait until this apps is unblocked
 * than one TA requesting listener services; So, first check to see if need
 * to wait.
 */
 */
static void __qseecom_reentrancy_check_if_this_app_blocked(
static void __qseecom_reentrancy_check_if_this_app_blocked(
			struct qseecom_registered_app_list *ptr_app)
			struct qseecom_registered_app_list *ptr_app)
{
{
	sigset_t new_sigset, old_sigset;
	sigset_t new_sigset, old_sigset;
	if (qseecom.qsee_reentrancy_support) {
	if (qseecom.qsee_reentrancy_support) {
		while (ptr_app->app_blocked) {
		while (ptr_app->app_blocked || qseecom.app_block_ref_cnt > 1) {
			/* thread sleep until this app unblocked */
			/* thread sleep until this app unblocked */
			sigfillset(&new_sigset);
			sigfillset(&new_sigset);
			sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset);
			sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset);
			mutex_unlock(&app_access_lock);
			mutex_unlock(&app_access_lock);
			do {
			do {
				if (!wait_event_freezable(qseecom.app_block_wq,
				if (!wait_event_freezable(qseecom.app_block_wq,
						!ptr_app->app_blocked))
					(!ptr_app->app_blocked &&
					qseecom.app_block_ref_cnt <= 1)))
					break;
					break;
			} while (1);
			} while (1);
			mutex_lock(&app_access_lock);
			mutex_lock(&app_access_lock);