[PATCH RT] x86/fpu: Disable preemption around local_bh_disable()

From: Sebastian Andrzej Siewior
Date: Tue Dec 11 2018 - 13:54:54 EST


__fpu__restore_sig() restores the content of the FPU state in the CPUs
and in order to avoid concurrency it disables BH. On !RT this also
disables preemption but on RT we can get preempted in BH.

Add preempt_disable() while the FPU state is restored.

Cc: stable-rt@xxxxxxxxxxxxxxx
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
---
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 d99a8ee9e185e..5e0274a941333 100644
--- a/arch/x86/kernel/fpu/signal.c
+++ b/arch/x86/kernel/fpu/signal.c
@@ -344,10 +344,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();

return err;
} else {
--
2.20.0