Jann Horn
86a926c3f0
pstore: Don't use semaphores in always-atomic-context code
...
commit 8126b1c731 upstream.
pstore_dump() is *always* invoked in atomic context (nowadays in an RCU
read-side critical section, before that under a spinlock).
It doesn't make sense to try to use semaphores here.
This is mostly a revert of commit ea84b580b9 ("pstore: Convert buf_lock
to semaphore"), except that two parts aren't restored back exactly as they
were:
- keep the lock initialization in pstore_register
- in efi_pstore_write(), always set the "block" flag to false
- omit "is_locked", that was unnecessary since
commit 959217c84c ("pstore: Actually give up during locking failure")
- fix the bailout message
The actual problem that the buggy commit was trying to address may have
been that the use of preemptible() in efi_pstore_write() was wrong - it
only looks at preempt_count() and the state of IRQs, but __rcu_read_lock()
doesn't touch either of those under CONFIG_PREEMPT_RCU.
(Sidenote: CONFIG_PREEMPT_RCU means that the scheduler can preempt tasks in
RCU read-side critical sections, but you're not allowed to actively
block/reschedule.)
Lockdep probably never caught the problem because it's very rare that you
actually hit the contended case, so lockdep always just sees the
down_trylock(), not the down_interruptible(), and so it can't tell that
there's a problem.
Fixes: ea84b580b9 ("pstore: Convert buf_lock to semaphore")
Cc: stable@vger.kernel.org
Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de >
Signed-off-by: Jann Horn <jannh@google.com >
Signed-off-by: Kees Cook <keescook@chromium.org >
Link: https://lore.kernel.org/r/20220314185953.2068993-1-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2022-04-08 14:39:56 +02:00
..
2021-04-14 08:42:06 +02:00
2021-04-07 15:00:07 +02:00
2020-10-29 17:22:59 -05:00
2021-05-14 09:50:05 +02:00
2021-05-14 09:50:31 +02:00
2021-07-14 16:56:37 +02:00
2020-10-29 17:22:59 -05:00
2021-08-08 09:05:22 +02:00
2021-06-16 12:01:44 +02:00
2022-03-16 14:15:59 +01:00
2021-05-11 14:47:14 +02:00
2022-04-08 14:39:51 +02:00
2021-03-30 14:32:06 +02:00
2021-04-21 13:00:56 +02:00
2021-04-21 13:00:55 +02:00
2021-11-26 10:39:08 +01:00
2021-09-15 09:50:26 +02:00
2021-03-25 09:04:14 +01:00
2021-12-01 09:19:10 +01:00
2021-08-26 08:35:42 -04:00
2021-03-04 11:38:14 +01:00
2021-09-08 08:49:01 +02:00
2022-04-08 14:39:51 +02:00
2022-02-01 17:25:43 +01:00
2021-03-09 11:11:13 +01:00
2021-12-08 09:03:20 +01:00
2022-03-11 12:11:52 +01:00
2021-07-14 16:56:53 +02:00
2021-06-03 09:00:45 +02:00
2022-04-08 14:39:55 +02:00
2021-01-12 20:18:17 +01:00
2022-01-27 10:54:08 +01:00
2021-11-21 13:46:35 +01:00
2020-11-19 08:55:44 -05:00
2021-08-04 12:46:41 +02:00
2022-01-27 10:53:54 +01:00
2021-09-03 10:09:31 +02:00
2022-03-11 12:11:49 +01:00
2021-03-30 14:32:05 +02:00
2020-12-11 14:02:14 -08:00
2020-10-25 14:51:49 -07:00
2021-09-26 14:08:59 +02:00
2021-11-18 14:04:32 +01:00
2022-01-27 10:54:05 +01:00
2020-10-25 14:51:49 -07:00
2021-07-20 16:05:46 +02:00
2021-07-20 16:05:46 +02:00
2021-07-20 16:05:46 +02:00
2021-09-30 10:11:07 +02:00
2021-05-26 12:06:56 +02:00
2021-11-18 14:03:49 +01:00
2021-06-03 09:00:45 +02:00
2021-05-28 13:17:43 +02:00
2020-10-25 14:51:49 -07:00
2020-11-10 18:31:17 +01:00
2021-05-19 10:13:18 +02:00
2021-09-08 08:49:00 +02:00
2021-03-09 11:11:13 +01:00
2021-06-30 08:47:18 -04:00
2020-10-30 08:37:39 +01:00
2021-03-30 14:32:06 +02:00
2021-08-18 08:59:17 +02:00
2021-01-19 18:27:22 +01:00
2022-04-08 14:39:46 +02:00
2020-10-25 14:51:49 -07:00
2021-03-11 14:17:27 +01:00
2021-03-25 09:04:18 +01:00
2021-05-19 10:13:13 +02:00
2021-10-27 09:56:51 +02:00
2021-09-15 09:50:37 +02:00
2021-03-17 17:06:36 +01:00
2021-11-18 14:04:25 +01:00
2021-09-18 13:40:21 +02:00
2021-03-04 11:38:41 +01:00
2020-10-25 14:51:49 -07:00
2021-04-07 15:00:11 +02:00
2021-11-18 14:03:42 +01:00
2020-10-25 14:51:49 -07:00
2022-01-20 09:17:49 +01:00
2021-11-26 10:39:22 +01:00
2021-09-08 08:48:59 +02:00
2020-12-30 11:54:18 +01:00
2022-02-01 17:25:48 +01:00
2020-11-12 13:59:04 -07:00
2022-01-27 10:54:16 +01:00
2021-06-18 10:00:04 +02:00
2021-09-15 09:50:25 +02:00
2021-07-25 14:36:18 +02:00
2021-09-18 13:40:36 +02:00
2021-09-18 13:40:36 +02:00
2021-05-19 10:12:54 +02:00
2021-03-04 11:38:46 +01:00
2022-03-23 09:13:28 +01:00
2021-03-30 14:31:57 +02:00
2021-08-18 08:59:13 +02:00
2020-10-25 14:51:49 -07:00
2020-10-25 14:51:49 -07:00
2021-09-18 13:40:14 +02:00
2020-10-25 14:51:49 -07:00
2020-11-04 10:22:56 -07:00
2020-11-04 08:52:46 -08:00
2021-05-14 09:50:32 +02:00
2021-12-01 09:19:10 +01:00
2021-03-04 11:38:46 +01:00
2021-08-18 08:59:15 +02:00
2020-11-30 12:21:31 +01:00
2020-11-19 22:38:29 -05:00
2020-10-29 13:17:58 -05:00
2021-01-09 13:46:23 +01:00
2021-11-18 14:03:56 +01:00
2020-10-25 14:51:49 -07:00
2021-03-04 11:37:50 +01:00
2021-03-04 11:37:59 +01:00
2021-03-04 11:38:46 +01:00
2021-03-04 11:38:20 +01:00
2021-12-08 09:03:20 +01:00
2021-02-07 15:37:17 +01:00
2021-06-16 12:01:46 +02:00
2021-11-18 14:03:37 +01:00
2021-02-03 23:28:40 +01:00
2021-09-30 10:11:04 +02:00
2021-09-15 09:50:41 +02:00
2021-09-15 09:50:41 +02:00
2021-09-15 09:50:41 +02:00
2021-11-18 14:03:36 +01:00
2021-11-18 14:03:36 +01:00
2021-04-21 13:01:00 +02:00
2021-10-09 14:40:56 +02:00
2022-01-05 12:40:29 +01:00
2022-02-23 12:00:56 +01:00
2021-09-22 12:27:59 +02:00
2021-03-17 17:06:25 +01:00
2021-03-04 11:38:21 +01:00
2021-06-03 09:00:45 +02:00
2021-06-23 14:42:49 +02:00
2021-06-30 08:47:27 -04:00
2021-06-30 08:47:26 -04:00
2021-03-30 14:32:06 +02:00
2022-01-27 10:53:44 +01:00
2020-10-28 14:08:54 +00:00
2020-10-25 14:51:49 -07:00
2021-08-18 08:59:17 +02:00
2021-03-30 14:32:07 +02:00
2021-07-19 09:44:51 +02:00
2022-04-08 14:39:47 +02:00
2020-10-30 12:57:39 +01:00
2020-10-30 12:57:39 +01:00
2022-02-16 12:54:18 +01:00
2020-11-30 10:52:22 -05:00
2021-05-19 10:13:02 +02:00
2020-11-22 10:48:22 -08:00
2021-02-07 15:37:16 +01:00
2020-10-25 14:51:49 -07:00
2021-07-19 09:44:39 +02:00
2021-03-09 11:11:13 +01:00
2021-09-03 10:09:21 +02:00
2021-06-30 08:47:29 -04:00
2021-09-22 12:28:00 +02:00
2021-05-19 10:13:01 +02:00
2021-05-19 10:13:01 +02:00
2021-11-21 13:46:36 +01:00
2020-10-25 14:51:49 -07:00
2022-02-01 17:25:45 +01:00
2020-11-09 18:12:34 +01:00
2022-02-08 18:30:35 +01:00
2021-03-30 14:32:05 +02:00
2021-09-03 10:09:28 +02:00
2021-05-14 09:50:14 +02:00
2022-01-27 10:54:17 +01:00
2021-05-19 10:12:51 +02:00
2021-11-18 14:04:29 +01:00
2021-07-14 16:55:58 +02:00
2020-10-25 14:51:49 -07:00
2020-12-30 11:53:56 +01:00
2022-02-05 12:37:55 +01:00
2022-02-05 12:37:55 +01:00
2022-04-08 14:39:56 +02:00
2021-06-23 14:42:45 +02:00
2021-04-07 15:00:13 +02:00
2021-09-18 13:40:19 +02:00
2020-10-28 11:41:15 -06:00
2021-06-30 08:47:27 -04:00
2021-11-18 14:04:22 +01:00
2021-01-09 13:46:24 +01:00
2022-02-23 12:01:00 +01:00
2021-11-18 14:03:36 +01:00
2020-12-30 11:53:42 +01:00
2021-11-18 14:04:27 +01:00
2021-03-17 17:06:34 +01:00
2020-10-25 14:51:49 -07:00
2020-10-29 13:17:58 -05:00
2021-12-08 09:03:23 +01:00
2021-09-22 12:27:58 +02:00
2021-08-04 12:46:44 +02:00
2021-05-14 09:50:46 +02:00
2021-06-23 14:42:44 +02:00
2020-10-25 14:51:49 -07:00
2021-09-03 10:09:30 +02:00
2021-09-03 10:09:30 +02:00
2021-03-30 14:31:53 +02:00
2021-03-30 14:31:53 +02:00
2021-09-03 10:09:25 +02:00
2021-03-17 17:06:34 +01:00
2022-02-16 12:54:22 +01:00
2021-07-25 14:36:17 +02:00
2021-07-25 14:36:18 +02:00
2021-05-07 11:04:32 +02:00
2021-01-17 14:16:59 +01:00
2022-03-02 11:42:47 +01:00
2021-09-26 14:08:59 +02:00
2021-03-25 09:04:16 +01:00
2021-09-16 12:51:23 +02:00
2022-03-08 19:09:34 +01:00
2021-11-18 14:04:11 +01:00
2021-11-26 10:39:14 +01:00
2020-12-30 11:53:42 +01:00
2021-07-14 16:55:46 +02:00
2021-05-14 09:50:18 +02:00
2021-03-04 11:37:36 +01:00
2021-05-14 09:50:18 +02:00
2021-03-30 14:31:51 +02:00
2021-05-14 09:50:31 +02:00
2021-02-17 11:02:28 +01:00
2021-03-25 09:04:14 +01:00
2021-03-17 17:06:19 +01:00
2021-09-08 08:49:00 +02:00
2021-03-30 14:32:03 +02:00
2022-03-16 14:16:02 +01:00
2021-12-29 12:25:56 +01:00
2022-03-16 14:16:01 +01:00
2021-02-10 09:29:21 +01:00
2021-12-14 11:32:39 +01:00
2022-03-16 14:16:03 +01:00
2021-04-07 15:00:06 +02:00
2021-03-07 12:34:15 +01:00