Eric Biggers
ce922b7b4a
lib/mpi: call cond_resched() from mpi_powm() loop
...
commit 1d9ddde12e3c9bab7f3d3484eb9446315e3571ca upstream.
On a non-preemptible kernel, if KEYCTL_DH_COMPUTE is called with the
largest permitted inputs (16384 bits), the kernel spends 10+ seconds
doing modular exponentiation in mpi_powm() without rescheduling. If all
threads do it, it locks up the system. Moreover, it can cause
rcu_sched-stall warnings.
Notwithstanding the insanity of doing this calculation in kernel mode
rather than in userspace, fix it by calling cond_resched() as each bit
from the exponent is processed. It's still noninterruptible, but at
least it's preemptible now.
Do the cond_resched() once per bit rather than once per MPI limb because
each limb might still easily take 100+ milliseconds on slow CPUs.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-30 08:40:39 +00:00
..
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-03 17:54:25 -07:00
2017-11-02 11:10:55 +01:00
2017-11-30 08:40:39 +00:00
2017-11-02 11:10:55 +01:00
2017-05-08 17:15:12 -07:00
2017-08-15 09:02:08 -07:00
2017-11-02 11:10:55 +01:00
2017-11-09 00:38:21 +11:00
2017-10-28 10:31:07 -07:00
2017-07-14 15:05:13 -07:00
locking/atomic: Implement atomic{,64,_long}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}()
2016-06-16 10:48:32 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:49 -07:00
2017-07-10 16:32:35 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2016-07-03 00:57:23 -04:00
2017-11-02 11:10:55 +01:00
2016-03-13 23:55:13 -04:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:49 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-06-09 11:52:07 +02:00
2017-02-24 17:46:57 -08:00
2017-11-02 11:10:55 +01:00
2017-02-24 17:46:57 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-08-14 16:51:01 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-02-24 17:46:57 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-12 17:16:40 +01:00
2017-11-02 11:10:55 +01:00
2017-05-09 15:40:28 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2016-08-04 08:50:07 -04:00
2017-11-02 11:10:55 +01:00
2016-06-08 11:04:19 +02:00
2017-11-02 11:10:55 +01:00
2017-07-10 16:32:35 -07:00
2017-08-10 15:54:06 -07:00
2017-02-24 17:46:57 -08:00
2017-11-02 11:10:55 +01:00
2016-05-20 17:58:30 -07:00
2017-11-02 11:10:55 +01:00
2016-10-27 18:43:43 -07:00
2017-02-24 17:46:57 -08:00
2017-02-24 17:46:57 -08:00
2017-09-08 18:26:49 -07:00
2017-11-02 11:10:55 +01:00
2017-10-03 17:54:25 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:49 -07:00
2016-01-20 17:09:18 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 10:04:46 -07:00
2017-09-20 23:27:48 -04:00
2017-11-02 11:10:55 +01:00
2017-03-02 08:42:38 +01:00
2017-11-02 11:10:55 +01:00
2017-09-14 17:30:49 -07:00
2017-10-14 15:14:20 -04:00
2016-07-28 16:07:41 -07:00
2017-05-16 08:44:22 -03:00
2016-12-14 16:04:08 -08:00
2016-02-07 22:18:47 -08:00
2017-09-18 16:48:33 +02:00
2017-03-22 20:11:35 -06:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-06-08 17:36:03 +08:00
2017-02-24 17:46:56 -08:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:49 -07:00
2017-11-02 11:10:55 +01:00
2017-02-03 16:35:42 -05:00
2016-12-06 10:17:03 +02:00
2017-11-02 11:10:55 +01:00
2017-03-02 08:42:34 +01:00
2017-03-22 19:18:43 -07:00
2017-03-02 08:42:27 +01:00
2017-01-23 09:17:12 +01:00
2017-09-08 18:26:49 -07:00
2017-11-02 11:10:55 +01:00
2017-10-03 17:54:26 -07:00
2017-11-02 11:10:55 +01:00
2017-09-08 18:26:48 -07:00
2017-09-08 18:26:48 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-09-19 15:18:33 -07:00
2017-04-14 14:06:52 -06:00
2017-06-15 14:30:14 +02:00
2017-11-02 11:10:55 +01:00
2016-04-15 16:53:14 -04:00
2017-11-02 11:10:55 +01:00
2017-02-22 16:41:30 -08:00
2017-01-09 13:58:57 -05:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2016-11-11 08:12:37 -08:00
2017-09-13 18:53:16 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-07-18 11:38:03 +02:00
2017-11-02 11:10:55 +01:00
2017-09-13 18:53:15 -07:00
2017-08-09 16:53:56 -07:00
2017-09-08 18:26:49 -07:00
2017-08-10 13:58:41 -07:00
2016-09-01 17:52:01 -07:00
2016-01-20 17:09:18 -08:00
2017-03-31 17:13:30 -07:00
2017-09-08 18:26:50 -07:00
2017-05-08 17:15:10 -07:00
2017-02-26 11:03:38 -05:00
2016-03-15 16:55:16 -07:00
2017-07-25 12:35:23 -07:00
2017-01-09 13:58:57 -05:00
2017-05-08 17:15:10 -07:00
2016-02-09 10:27:29 +01:00
2017-07-12 16:26:00 -07:00
2017-05-01 09:36:30 +02:00
2017-07-21 09:38:30 +02:00
2016-02-03 08:28:43 -08:00
2017-01-20 08:03:42 +01:00
2017-10-22 03:14:07 +01:00
2017-10-22 03:14:07 +01:00
2016-08-02 17:31:41 -04:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-06-05 16:59:05 +02:00
2017-07-07 10:37:54 -07:00
2017-11-02 11:10:55 +01:00
2017-08-15 09:02:07 -07:00