.. | .. |
---|
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); |
---|