Jens Wiklander
b4a661b421
tee: handle lookup of shm with reference count 0
...
commit dfd0743f1d upstream.
Since the tee subsystem does not keep a strong reference to its idle
shared memory buffers, it races with other threads that try to destroy a
shared memory through a close of its dma-buf fd or by unmapping the
memory.
In tee_shm_get_from_id() when a lookup in teedev->idr has been
successful, it is possible that the tee_shm is in the dma-buf teardown
path, but that path is blocked by the teedev mutex. Since we don't have
an API to tell if the tee_shm is in the dma-buf teardown path or not we
must find another way of detecting this condition.
Fix this by doing the reference counting directly on the tee_shm using a
new refcount_t refcount field. dma-buf is replaced by using
anon_inode_getfd() instead, this separates the life-cycle of the
underlying file from the tee_shm. tee_shm_put() is updated to hold the
mutex when decreasing the refcount to 0 and then remove the tee_shm from
teedev->idr before releasing the mutex. This means that the tee_shm can
never be found unless it has a refcount larger than 0.
Fixes: 967c9cca2c ("tee: generic TEE subsystem")
Cc: stable@vger.kernel.org
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Reviewed-by: Lars Persson <larper@axis.com >
Reviewed-by: Sumit Garg <sumit.garg@linaro.org >
Reported-by: Patrik Lantz <patrik.lantz@axis.com >
[JW: backport to 4.19-stable]
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2022-01-05 12:34:57 +01:00
..
2021-03-17 16:43:42 +01:00
2018-03-21 13:58:08 +09:00
2021-08-08 08:54:28 +02:00
2021-03-30 14:37:02 +02:00
2020-01-27 14:51:19 +01:00
2021-09-22 11:47:49 +02:00
2021-12-08 08:50:11 +01:00
2021-09-22 11:47:47 +02:00
2021-08-12 13:19:42 +02:00
2018-06-15 18:10:01 -03:00
2013-03-12 13:59:14 -07:00
2012-03-16 10:38:24 -04:00
2017-11-07 10:32:44 +01:00
2021-08-08 08:54:29 +02:00
2021-08-08 08:54:29 +02:00
2017-11-02 11:10:55 +01:00
2019-12-01 09:17:07 +01:00
2020-06-25 15:33:02 +02:00
2018-06-21 12:52:11 +02:00
2021-09-22 11:47:59 +02:00
2020-04-23 10:30:12 +02:00
2019-10-05 13:09:54 +02:00
2020-09-09 19:04:31 +02:00
2017-11-02 11:10:55 +01:00
2021-09-26 13:39:48 +02:00
2017-11-02 11:10:55 +01:00
2018-01-04 15:13:29 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2021-10-06 15:31:17 +02:00
2018-01-08 17:30:45 +01:00
2017-11-02 11:10:55 +01:00
2021-05-26 11:48:35 +02:00
2021-11-26 11:36:02 +01:00
2017-11-02 11:10:55 +01:00
2018-04-11 10:28:38 -07:00
2017-11-02 11:10:55 +01:00
2019-11-12 19:21:38 +01:00
2021-08-08 08:54:30 +02:00
2021-10-06 15:31:28 +02:00
2017-11-02 11:10:55 +01:00
2020-10-01 13:14:28 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2016-04-15 11:20:32 -07:00
2017-10-26 17:08:40 +09:00
2021-08-26 08:36:41 -04:00
2020-02-24 08:34:44 +01:00
2018-03-16 19:58:27 +01:00
2019-06-04 08:02:34 +02:00
2017-11-15 11:56:19 -08:00
2021-10-27 09:53:13 +02:00
2020-06-25 15:33:02 +02:00
2017-11-02 11:10:55 +01:00
2018-01-01 12:40:27 -07:00
2018-06-26 11:33:04 +09:00
2018-04-27 11:53:02 -04:00
2019-11-24 08:19:14 +01:00
2018-01-30 21:54:32 +01:00
2021-12-08 08:50:13 +01:00
2021-11-26 11:35:59 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2021-12-08 08:50:13 +01:00
2021-09-22 11:47:56 +02:00
2021-09-22 11:47:56 +02:00
2020-11-05 11:08:35 +01:00
2017-11-02 11:10:55 +01:00
2019-02-12 19:47:24 +01:00
2021-12-14 10:18:03 +01:00
2020-01-04 19:13:32 +01:00
2021-07-11 12:49:27 +02:00
2021-09-22 11:48:09 +02:00
2018-03-08 12:30:37 +01:00
2012-10-13 10:46:48 +01:00
2018-08-15 10:25:26 -07:00
2018-03-26 08:53:43 -06:00
2021-08-26 08:36:39 -04:00
2018-07-21 10:43:12 -05:00
2018-08-22 10:52:47 -07:00
2014-05-14 16:40:04 -07:00
2017-10-19 16:54:49 -07:00
2012-12-09 00:20:28 -05:00
2021-12-08 08:50:11 +01:00
2021-08-26 08:36:40 -04:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-07-21 09:03:11 +02:00
2017-11-02 11:10:55 +01:00
2021-12-08 08:50:12 +01:00
2021-02-07 14:48:38 +01:00
2021-09-26 13:39:46 +02:00
2021-11-26 11:35:57 +01:00
2018-03-26 15:56:42 +02:00
2021-09-22 11:47:57 +02:00
2018-04-17 13:42:48 +02:00
2018-04-12 09:41:19 -07:00
2021-11-26 11:35:56 +01:00
2017-11-02 11:10:55 +01:00
2018-12-29 13:37:59 +01:00
2017-11-02 11:10:55 +01:00
2017-01-04 13:22:38 -07:00
2021-10-09 14:11:03 +02:00
2021-09-22 11:48:12 +02:00
2020-01-29 16:43:27 +01:00
2018-02-13 16:25:06 +01:00
2021-07-11 12:49:28 +02:00
2021-07-11 12:49:26 +02:00
2020-07-29 10:16:52 +02:00
2021-05-22 10:59:23 +02:00
2017-11-02 11:10:55 +01:00
2017-11-15 13:46:33 -08:00
2017-11-02 11:10:55 +01:00
2018-03-24 11:25:35 -05:00
2021-08-26 08:36:41 -04:00
2021-06-30 08:48:18 -04:00
2021-07-20 16:16:01 +02:00
2021-12-08 08:50:14 +01:00
2021-07-20 16:16:11 +02:00
2020-10-07 08:00:08 +02:00
2021-12-08 08:50:11 +01:00
2018-01-08 08:22:45 -06:00
2021-09-03 09:58:00 +02:00
2021-08-08 08:54:30 +02:00
2021-07-11 12:49:30 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-09 10:23:28 +01:00
2021-11-26 11:36:19 +01:00
2018-03-19 10:09:44 -07:00
2018-01-03 10:38:54 -05:00
2018-07-21 10:43:12 -05:00
2017-09-08 18:26:51 -07:00
2021-07-20 16:15:46 +02:00
2017-11-02 11:10:55 +01:00
2021-06-30 08:48:19 -04:00
2017-11-02 11:10:55 +01:00
2018-02-12 11:43:25 -05:00
2017-06-08 18:52:26 -07:00
2018-07-17 09:27:43 +02:00
2018-08-09 11:15:06 +01:00
2019-12-05 09:19:38 +01:00
2018-06-15 13:37:07 +02:00
2019-04-05 22:32:56 +02:00
2021-07-11 12:49:28 +02:00
2017-11-02 11:10:55 +01:00
2021-11-26 11:36:14 +01:00
2018-07-25 11:22:19 +02:00
2021-12-14 10:18:04 +01:00
2021-10-17 10:19:49 +02:00
2017-11-02 11:10:55 +01:00
2021-11-26 11:35:56 +01:00
2018-04-11 10:28:36 -07:00
2018-02-01 09:46:00 -08:00
2018-08-22 10:52:43 -07:00
2021-12-08 08:50:13 +01:00
2021-09-22 11:48:11 +02:00
2021-06-30 08:48:18 -04:00
2017-11-02 11:10:55 +01:00
2018-06-14 12:21:18 +09:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-06-05 16:57:31 -07:00
2018-05-15 21:47:09 +03:00
2021-02-13 13:51:15 +01:00
2018-04-28 15:01:14 -07:00
2009-04-10 15:48:52 +02:00
2020-01-27 14:50:22 +01:00
2017-11-02 11:10:55 +01:00
2018-08-14 16:39:13 -07:00
2018-02-06 18:32:47 -08:00
2017-08-17 16:29:19 -07:00
2017-11-02 11:10:55 +01:00
2022-01-05 12:34:57 +01:00
2017-11-02 11:10:55 +01:00
2018-04-17 17:18:04 +02:00
2017-11-02 11:10:55 +01:00
2021-10-09 14:11:04 +02:00
2017-11-02 11:10:55 +01:00
2020-12-30 11:26:01 +01:00
2017-12-04 07:14:30 -05:00
2018-07-09 09:07:54 -06:00
2021-07-20 16:15:42 +02:00
2020-12-11 13:25:01 +01:00
2017-11-02 11:10:55 +01:00
2018-06-07 17:34:38 -07:00
2021-12-29 12:20:44 +01:00
2020-04-29 16:31:27 +02:00
2018-04-11 10:28:30 -07:00
2017-11-02 11:10:55 +01:00
2021-12-14 10:18:06 +01:00
2018-05-18 08:47:13 -07:00
2017-11-21 15:46:44 -08:00
2018-04-11 10:28:39 -07:00