[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250814101444.GA17366@redhat.com>
Date: Thu, 14 Aug 2025 12:14:44 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Borislav Petkov <bp@...en8.de>,
Dave Hansen <dave.hansen@...ux.intel.com>,
"H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...nel.org>,
Jens Axboe <axboe@...nel.dk>, Peter Zijlstra <peterz@...radead.org>,
Rick Edgecombe <rick.p.edgecombe@...el.com>,
Sohil Mehta <sohil.mehta@...el.com>,
Thomas Gleixner <tglx@...utronix.de>
Cc: linux-kernel@...r.kernel.org, x86@...nel.org
Subject: [PATCH 6/6] x86/fpu: change get_fpstate() to return &init_fpstate if
PF_USER_WORKER
PF_USER_WORKERs must never use FPU, this is what kernel_fpu_begin/etc
assume. The .regset_get() functions can safely use init_fpstate if
target->flags & PF_USER_WORKER.
Signed-off-by: Oleg Nesterov <oleg@...hat.com>
---
arch/x86/kernel/fpu/regset.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/fpu/regset.c b/arch/x86/kernel/fpu/regset.c
index ecbabdc15ec1..dfd12d109f00 100644
--- a/arch/x86/kernel/fpu/regset.c
+++ b/arch/x86/kernel/fpu/regset.c
@@ -45,8 +45,12 @@ int regset_xregset_fpregs_active(struct task_struct *target, const struct user_r
*/
static struct fpstate *get_fpstate(struct task_struct *task)
{
- struct fpu *fpu = x86_task_fpu(task);
+ struct fpu *fpu;
+ if (unlikely(task->flags & PF_USER_WORKER))
+ return &init_fpstate;
+
+ fpu = x86_task_fpu(task);
if (task == current)
fpu_sync_fpstate(fpu);
return fpu->fpstate;
--
2.25.1.362.g51ebf55
Powered by blists - more mailing lists