diff options
Diffstat (limited to 'debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch')
-rw-r--r-- | debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch b/debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch new file mode 100644 index 000000000..1aaf1d6d1 --- /dev/null +++ b/debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch @@ -0,0 +1,38 @@ +From b666ce0515d1940495c2bbb0ca0f32c1fea9ef38 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Tue, 11 Dec 2018 15:10:33 +0100 +Subject: [PATCH 175/347] x86/fpu: Disable preemption around local_bh_disable() +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz + +__fpu__restore_sig() restores the content of the FPU state in the CPUs +and in order to avoid concurency it disbles BH. On !RT it also disables +preemption but on RT we can get preempted in BH. + +Add preempt_disable() while the FPU state is restored. + +Cc: stable-rt@vger.kernel.org +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + arch/x86/kernel/fpu/signal.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c +index 86a231338bbf..e5c8d5245289 100644 +--- a/arch/x86/kernel/fpu/signal.c ++++ b/arch/x86/kernel/fpu/signal.c +@@ -351,10 +351,12 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size) + sanitize_restored_xstate(tsk, &env, xfeatures, fx_only); + } + ++ preempt_disable(); + local_bh_disable(); + fpu->initialized = 1; + fpu__restore(fpu); + local_bh_enable(); ++ preempt_enable(); + + /* Failure is already handled */ + return err; +-- +2.36.1 + |