commit a5f99bc80c9bdacf3a1902f8922ca9b939d52723 Author: Andy Lutomirski Date: Thu Nov 22 16:53:57 2018 -0800 x86/fsgsbase/64: Fix do_arch_prctl_64() to work correctly wrt save_base_legacy() Signed-off-by: Andy Lutomirski diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 74035c2a85b3..fcf528df5b8d 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -733,6 +733,13 @@ long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2) if (task == current) { loadseg(GS, 0); x86_gsbase_write_cpu_inactive(arg2); + + /* + * On non-FSGSBASE systems, save_base_legacy() expects + * that we also fill in thread.gsbase. + */ + task->thread.gsbase = arg2; + } else { task->thread.gsindex = 0; x86_gsbase_write_task(task, arg2); @@ -756,6 +763,12 @@ long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2) if (task == current) { loadseg(FS, 0); x86_fsbase_write_cpu(arg2); + + /* + * On non-FSGSBASE systems, save_base_legacy() expects + * that we also fill in thread.fsbase. + */ + task->thread.fsbase = arg2; } else { task->thread.fsindex = 0; x86_fsbase_write_task(task, arg2);