From: Sebastian Andrzej Siewior Date: Tue, 11 Dec 2018 15:10:33 +0100 Subject: [PATCH 176/290] x86/fpu: Disable preemption around local_bh_disable() Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=b7106c9d220d744e3fe1c149b187b48876a9e5f4 __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 --- 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 d99a8ee9e185..5e0274a94133 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 {