| .. | .. |
|---|
| 423 | 423 | if (ret) { |
|---|
| 424 | 424 | arg->ret_origin = TEEC_ORIGIN_COMMS; |
|---|
| 425 | 425 | arg->ret = TEEC_ERROR_COMMUNICATION; |
|---|
| 426 | | - } else if (arg->ret == TEEC_SUCCESS) { |
|---|
| 427 | | - ret = get_ta_refcount(load_cmd.ta_handle); |
|---|
| 428 | | - if (!ret) { |
|---|
| 429 | | - arg->ret_origin = TEEC_ORIGIN_COMMS; |
|---|
| 430 | | - arg->ret = TEEC_ERROR_OUT_OF_MEMORY; |
|---|
| 426 | + } else { |
|---|
| 427 | + arg->ret_origin = load_cmd.return_origin; |
|---|
| 431 | 428 | |
|---|
| 432 | | - /* Unload the TA on error */ |
|---|
| 433 | | - unload_cmd.ta_handle = load_cmd.ta_handle; |
|---|
| 434 | | - psp_tee_process_cmd(TEE_CMD_ID_UNLOAD_TA, |
|---|
| 435 | | - (void *)&unload_cmd, |
|---|
| 436 | | - sizeof(unload_cmd), &ret); |
|---|
| 437 | | - } else { |
|---|
| 438 | | - set_session_id(load_cmd.ta_handle, 0, &arg->session); |
|---|
| 429 | + if (arg->ret == TEEC_SUCCESS) { |
|---|
| 430 | + ret = get_ta_refcount(load_cmd.ta_handle); |
|---|
| 431 | + if (!ret) { |
|---|
| 432 | + arg->ret_origin = TEEC_ORIGIN_COMMS; |
|---|
| 433 | + arg->ret = TEEC_ERROR_OUT_OF_MEMORY; |
|---|
| 434 | + |
|---|
| 435 | + /* Unload the TA on error */ |
|---|
| 436 | + unload_cmd.ta_handle = load_cmd.ta_handle; |
|---|
| 437 | + psp_tee_process_cmd(TEE_CMD_ID_UNLOAD_TA, |
|---|
| 438 | + (void *)&unload_cmd, |
|---|
| 439 | + sizeof(unload_cmd), &ret); |
|---|
| 440 | + } else { |
|---|
| 441 | + set_session_id(load_cmd.ta_handle, 0, &arg->session); |
|---|
| 442 | + } |
|---|
| 439 | 443 | } |
|---|
| 440 | 444 | } |
|---|
| 441 | 445 | mutex_unlock(&ta_refcount_mutex); |
|---|