From: Sohil Mehta <sohil.mehta@intel.com>
To: Fushuai Wang <wangfushuai@baidu.com>, <tglx@linutronix.de>,
<mingo@redhat.com>, <bp@alien8.de>, <dave.hansen@linux.intel.com>,
<x86@kernel.org>, <hpa@zytor.com>, <chang.seok.bae@intel.com>,
<peterz@infradead.org>, <vigbalas@amd.com>,
<aruna.ramakrishna@oracle.com>, <seanjc@google.com>
Cc: <linux-kernel@vger.kernel.org>,
"Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
Oleg Nesterov <oleg@redhat.com>, Brian Gerst <brgerst@gmail.com>,
<aubrey.li@intel.com>
Subject: Re: [PATCH] x86/fpu: Fix potential NULL dereference in avx512_status()
Date: Thu, 17 Jul 2025 23:21:36 -0700 [thread overview]
Message-ID: <89987231-37ce-4d49-a1d7-6e699e8ab0d2@intel.com> (raw)
In-Reply-To: <e15ff86a-d7b2-48e4-b535-2829a3c1f23d@intel.com>
On 7/17/2025 12:21 PM, Sohil Mehta wrote:
> On 7/17/2025 2:43 AM, Fushuai Wang wrote:
>> The avx512_status() function would then dereference this
>> NULL pointer via READ_ONCE(x86_task_fpu(task)->avx512_timestamp).
>> when reading /proc/*/arch_status, causing a kernel NULL pointer dereference
>> and system will crash.
>>
>
> The kernel seems to assume that a Kthread would never call
> x86_task_fpu(). That assumption is breaking in this scenario, which
> causes the below issue.
>
This concern was discussed while adding the checks:
https://lore.kernel.org/all/ZmFziN0i10sILaIo@gmail.com/
Adding a few folks who were involved in the discussion that time.
> Can you please share any other warnings that were triggered before this
> Oops message? Also, I'll try to generate this locally. Any specific
> configuration needed for reproducing this apart from CONFIG_X86_DEBUG_FPU?
>
I was able to reproduce this on a system with X86_FEATURE_AVX512F. The
issue only happens while reading arch_status on a kthread.
$cat /proc/[kthread]/arch_status => NULL pointer exception
$cat /proc/[user thread]/arch_status => No issue seen
Can you confirm that you are seeing the same behavior?
Unfortunately, avx512_timestamp resides within struct fpu. So getting
that value for a kthread would mean going through x86_task_fpu().
I am wondering if we ever need to expose the AVX512 usage for kernel
threads? If not, then we can do what you currently have but without the
CONFIG_X86_DEBUG_FPU restriction. All kernel threads would always print
the AVX512_elapsed_ms as -1.
However, this would be a user visible change so we should probably get
more inputs. I tried this experiment on an older kernel without the
above issue. Among all the active kthreads on my system a handful of
them show a valid value for AVX512 usage. The rest of them all show -1.
PID: 2594
CMD: avahi-daemon: running [SAP.local]
/proc/2594/arch_status content:
AVX512_elapsed_ms: 46032
PID: 2729
CMD: sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
/proc/2729/arch_status content:
AVX512_elapsed_ms: 396656
To keep the older behavior, we might need to consider moving
avx512_timestamp out of struct fpu. Though, I am uncertain about its
implication.
>>
>> diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
>> index 9aa9ac8399ae..16f813a42f42 100644
>> --- a/arch/x86/kernel/fpu/xstate.c
>> +++ b/arch/x86/kernel/fpu/xstate.c
>> @@ -1859,9 +1859,14 @@ long fpu_xstate_prctl(int option, unsigned long arg2)
>> */
>> static void avx512_status(struct seq_file *m, struct task_struct *task)
>> {
>> - unsigned long timestamp = READ_ONCE(x86_task_fpu(task)->avx512_timestamp);
>> + unsigned long timestamp = 0;
>> long delta;
>>
>> +#ifdef CONFIG_X86_DEBUG_FPU
>> + if (!(task->flags & PF_KTHREAD))
>> +#endif
>
> The logical code flow should not change based on X86_DEBUG_FPU. The fix
> for this issue likely needs to be somewhere else. Though, I am still
> working on identifying the exact root cause.
>
>> + timestamp = READ_ONCE(x86_task_fpu(task)->avx512_timestamp);
>> +
>> if (!timestamp) {
>> /*
>> * Report -1 if no AVX512 usage
>
next prev parent reply other threads:[~2025-07-18 6:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-17 9:43 Fushuai Wang
2025-07-17 19:21 ` Sohil Mehta
2025-07-18 6:21 ` Sohil Mehta [this message]
2025-07-18 7:12 ` Fushuai Wang
2025-07-18 23:48 ` Sohil Mehta
2025-07-21 14:09 ` Dave Hansen
2025-07-22 5:35 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=89987231-37ce-4d49-a1d7-6e699e8ab0d2@intel.com \
--to=sohil.mehta@intel.com \
--cc=aruna.ramakrishna@oracle.com \
--cc=aubrey.li@intel.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=chang.seok.bae@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rick.p.edgecombe@intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=vigbalas@amd.com \
--cc=wangfushuai@baidu.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®