@@ -267,35 +267,34 @@ int amdtee_open_session(struct tee_context *ctx,
267
267
goto out ;
268
268
}
269
269
270
+ /* Open session with loaded TA */
271
+ handle_open_session (arg , & session_info , param );
272
+ if (arg -> ret != TEEC_SUCCESS ) {
273
+ pr_err ("open_session failed %d\n" , arg -> ret );
274
+ handle_unload_ta (ta_handle );
275
+ kref_put (& sess -> refcount , destroy_session );
276
+ goto out ;
277
+ }
278
+
270
279
/* Find an empty session index for the given TA */
271
280
spin_lock (& sess -> lock );
272
281
i = find_first_zero_bit (sess -> sess_mask , TEE_NUM_SESSIONS );
273
- if (i < TEE_NUM_SESSIONS )
282
+ if (i < TEE_NUM_SESSIONS ) {
283
+ sess -> session_info [i ] = session_info ;
284
+ set_session_id (ta_handle , i , & arg -> session );
274
285
set_bit (i , sess -> sess_mask );
286
+ }
275
287
spin_unlock (& sess -> lock );
276
288
277
289
if (i >= TEE_NUM_SESSIONS ) {
278
290
pr_err ("reached maximum session count %d\n" , TEE_NUM_SESSIONS );
291
+ handle_close_session (ta_handle , session_info );
279
292
handle_unload_ta (ta_handle );
280
293
kref_put (& sess -> refcount , destroy_session );
281
294
rc = - ENOMEM ;
282
295
goto out ;
283
296
}
284
297
285
- /* Open session with loaded TA */
286
- handle_open_session (arg , & session_info , param );
287
- if (arg -> ret != TEEC_SUCCESS ) {
288
- pr_err ("open_session failed %d\n" , arg -> ret );
289
- spin_lock (& sess -> lock );
290
- clear_bit (i , sess -> sess_mask );
291
- spin_unlock (& sess -> lock );
292
- handle_unload_ta (ta_handle );
293
- kref_put (& sess -> refcount , destroy_session );
294
- goto out ;
295
- }
296
-
297
- sess -> session_info [i ] = session_info ;
298
- set_session_id (ta_handle , i , & arg -> session );
299
298
out :
300
299
free_pages ((u64 )ta , get_order (ta_size ));
301
300
return rc ;
0 commit comments