AMDTEE fix possible use-after-free

-----BEGIN PGP SIGNATURE-----
 
 iQJOBAABCgA4FiEEFV+gSSXZJY9ZyuB5LinzTIcAHJcFAmUcS+waHGplbnMud2lr
 bGFuZGVyQGxpbmFyby5vcmcACgkQLinzTIcAHJdN2xAAknJGIgVcZeoaBULyuUJ/
 oFejWdJMlE7hXEYOX6rkxwlaRZqEX0tw2jcVVLaIG3MYXEg26fHjoH3Y8mAw9RWh
 VVk5pn7JjMZj+hKCa/69Ii4Hn/WM6XrkUbjxDfelDqkDu62sH7BXTOhYjMh9SR1/
 KGv8TTav+7kdifD8pzmZP9KdnRlnyFrs8Y4NJRzXd5ax0uveBIxz79hIQLWmHOpQ
 eiB3k2EpkQQebJGK4gmWay0ScIXEModD35lcNFRPFBdY3ryxfemqxJAQQlFyruRU
 OC4wL5pPKeYQ46jRR7Dw+lsfmf/QuuvxM5p2mVYwYcDnCGSRnipVy3vbK1W55m+Z
 Tf60d5gHxYA3osqhe3FL3oSC+LtnQ/yteZ4wnurV2h3T6fl6fUH61jpi4Ik676Sx
 VwSxz9BUIfpOvTwp30r5h3fgGZkroqBgLOUH9Pd1tSQNoFurTmpWS5pLhYBgsUiU
 VKONMYf9wCIiO30ETQ1XCh0UIbNS4llyKnK9PC8jse1kLvPykTAmKasR8N6PT0SD
 p62F5eJ78x8/GiUFyqphO7SO4OkC/qxAx0LRd9/Dd+qRIi/agMOETurgZJtSbydk
 qNo6VVOeTjKDjtqlRHegEhs0fw26lC59ImsICKzxqchZRETTTp9Sry02fqTEZuZD
 ERKk6wwuOZPqbNAScoDrQvU=
 =C7+D
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmUgcc8ACgkQYKtH/8kJ
 UicFyxAAq6jAI2o3TzlY9OC++tTejGISWVeukJTuSEWIPUAxm8UtQsBk74ErCJBq
 /44SzKMiQ9DJx+r/GT4mYbIwJvw+hze+kkcHAeBIFHzMISct2V7ZZTDwR9zS4StK
 mY7Yd9FbClxMTx7GaSGNh4jtcbWugICEAxm6xNO0kk/z/YtfFOmD8RinOLnQXosF
 AzVTB0K1ozr/BPQdbDFV40cuf1YoqnzhEKZhN1jcFTpnI4s31hZ8zgZYrkscdpI4
 LUDAafKEGwXEq3kZbyjE3vtWToPsMtdjCJojlXf1DL9NU+Vp/LfeKEN2DylMmM2o
 Natsl+r8q78HUewmcbhaEwIN5uLfn0ge0K6NJFVQspsEFwYmI+Fq4dXKILxiJSo2
 KalqAR8odfPJ2Vb4SSDcFj53QgRN3vkch9fi0l1JjaJa4LKOGYAoWorx/6jgD4Y6
 2iDtgRvUINVt2OHqQ98FVY6CwOYIcqWFOZKztJ0BKng3P6odVt/SZ1ziIwqLSqSi
 fXNsHhl4BJAiNKoDFlqIvUikzKEjPzWP++Ft+t3s1Bm1fG3Z2BPSTluUZa69Ew+9
 GM8n0CZpp8U6mzj8SMLPn20sGOvoicNvnlYqBvKaChdNBvrmO6esGAbb+Jhoifl8
 +4SCwX29VmYcNL3STyLYJQC12IY4jKkUnWvzT/7N1c6yfpzQuYE=
 =IZuU
 -----END PGP SIGNATURE-----

Merge tag 'amdtee-fix-for-v6.6' of https://git.linaro.org/people/jens.wiklander/linux-tee into arm/fixes

AMDTEE fix possible use-after-free

* tag 'amdtee-fix-for-v6.6' of https://git.linaro.org/people/jens.wiklander/linux-tee:
  tee: amdtee: fix use-after-free vulnerability in amdtee_close_session

Link: https://lore.kernel.org/r/20231003171835.GA669924@rayden
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2023-10-06 22:45:02 +02:00
commit a41e95a7c1

View File

@ -217,12 +217,12 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta,
return rc;
}
/* mutex must be held by caller */
static void destroy_session(struct kref *ref)
{
struct amdtee_session *sess = container_of(ref, struct amdtee_session,
refcount);
mutex_lock(&session_list_mutex);
list_del(&sess->list_node);
mutex_unlock(&session_list_mutex);
kfree(sess);
@ -272,7 +272,8 @@ int amdtee_open_session(struct tee_context *ctx,
if (arg->ret != TEEC_SUCCESS) {
pr_err("open_session failed %d\n", arg->ret);
handle_unload_ta(ta_handle);
kref_put(&sess->refcount, destroy_session);
kref_put_mutex(&sess->refcount, destroy_session,
&session_list_mutex);
goto out;
}
@ -290,7 +291,8 @@ int amdtee_open_session(struct tee_context *ctx,
pr_err("reached maximum session count %d\n", TEE_NUM_SESSIONS);
handle_close_session(ta_handle, session_info);
handle_unload_ta(ta_handle);
kref_put(&sess->refcount, destroy_session);
kref_put_mutex(&sess->refcount, destroy_session,
&session_list_mutex);
rc = -ENOMEM;
goto out;
}
@ -331,7 +333,7 @@ int amdtee_close_session(struct tee_context *ctx, u32 session)
handle_close_session(ta_handle, session_info);
handle_unload_ta(ta_handle);
kref_put(&sess->refcount, destroy_session);
kref_put_mutex(&sess->refcount, destroy_session, &session_list_mutex);
return 0;
}