summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0175-x86-fpu-Disable-preemption-around-local_bh_disable.patch
diff options
context:
space:
mode:
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.patch38
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
+