From: Babu Moger <babu.moger@amd.com>
To: Dave Hansen <dave.hansen@intel.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org
Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
x86@kernel.org, hpa@zytor.com, dave.hansen@linux.intel.com,
luto@kernel.org, peterz@infradead.org, shuah@kernel.org,
jroedel@suse.de, ubizjak@gmail.com, viro@zeniv.linux.org.uk,
jpa@git.mail.kapsi.fi, fenghua.yu@intel.com,
kan.liang@linux.intel.com, akpm@linux-foundation.org,
rppt@kernel.org, Fan_Yang@sjtu.edu.cn, anshuman.khandual@arm.com,
b.thiel@posteo.de, jgross@suse.com, keescook@chromium.org,
seanjc@google.com, mh@glandium.org, sashal@kernel.org,
krisman@collabora.com, chang.seok.bae@intel.com,
0x7f454c46@gmail.com, jhubbard@nvidia.com,
sandipan@linux.ibm.com, ziy@nvidia.com,
kirill.shutemov@linux.intel.com, suxingxing@loongson.cn,
harish@linux.ibm.com, rong.a.chen@intel.com, linuxram@us.ibm.com,
bauerman@linux.ibm.com, dave.kleikamp@oracle.com
Subject: Re: x86/fpu/xsave: protection key test failures
Date: Wed, 26 May 2021 12:03:53 -0500 [thread overview]
Message-ID: <56bcbef0-dca3-7306-d7b4-b0f6d7c382a8@amd.com> (raw)
In-Reply-To: <f4205ac9-5988-3b03-6b6a-b877335d19c9@intel.com>
On 5/26/21 11:06 AM, Dave Hansen wrote:
> On 5/26/21 8:25 AM, Babu Moger wrote:
>> On 5/25/21 7:20 PM, Dave Hansen wrote:
>>> On 5/25/21 5:03 PM, Babu Moger wrote:
>>>>> What values do PKRU and the shadow have when the test fails? Is PKRU 0?
>>>> It goes back to default value 0x55555554. The test is expecting it to be
>>>> 0. Printed them below.
>>>>
>>>> test_ptrace_of_child()::1346, pkey_reg: 0x0000000055555554 shadow:
>>>> 0000000000000000
>>>> protection_keys_64: pkey-helpers.h:127: _read_pkey_reg: Assertion
>>>> `pkey_reg == shadow_pkey_reg' failed.
>>> That's backwards (shadow vs pkru) from what I was expecting.
>>>
>>> Can you turn on all the debuging?
>>>
>>> Just compile with -DDEBUG_LEVEL=5
>>
>> Copied the logs at https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpastebin.com%2FgtQiHg8Q&data=04%7C01%7Cbabu.moger%40amd.com%7Cf35e0082b0f44650045408d920602c08%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637576419688153335%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=lkJrEo9EJFhfQcOvS%2Be8gLf0GuqZSWGQw2omPZ2Ehb0%3D&reserved=0
>
> Well, it's a bit backwards from what I'm expecting. The PKRU=0 value
> *WAS* legitimate because all of the pkeys got allocated and their
> disable bits cleared.
>
> I think Andy was close when he was blaming:
>
>> static inline void write_pkru(u32 pkru)
>> {
> ...
>> pk = get_xsave_addr(¤t->thread.fpu.state.xsave, XFEATURE_PKRU);
> ...
>> if (pk)
>> pk->pkru = pkru;
>> __write_pkru(pkru);
>> }
>
> But that can't be it because PKRU ended up with 0x55555554. Something
> must have been writing 'init_pkru_value'.
>
> switch_fpu_finish() does that:
Yes, I have noticed switch_fpu_finish writing init_pkru_value sometimes.
But, I was not sure why that was happening..
>
>> static inline void switch_fpu_finish(struct fpu *new_fpu)
>> {
>> u32 pkru_val = init_pkru_value;
> ...
>> if (current->mm) {
>> pk = get_xsave_addr(&new_fpu->state.xsave, XFEATURE_PKRU);
>> if (pk)
>> pkru_val = pk->pkru;
>> }
>> __write_pkru(pkru_val);
> ...
>> }
>
> If 'new_fpu' had XSTATE_BV[PKRU]=0 then we'd have pk=NULL and 'pkru_val'
> would still have 'init_pkru_value'. *Then*, we'd have a shadow=0x0 and
> pkru=0x55555554. It would also only trigger if the hardware has an init
> tracker that fires when wrpkru(0). Intel doesn't do that. AMD must.
Ok. I will check with hardware guys here about this behavior.
>
> Anyway, I need to think about this a bit more. But, an entirely
> guaranteed to be 100% untested patch is attached. I'm *NOT* confident
> this is the right fix.
>
> I don't have much AMD hardware laying around, so testing would be
> appreciated.
>
Yes. Patch fixes problem on AMD. Also tested on Intel box to make sure it
does not cause any regression there. It does work fine there as well.
Thanks for the patch.
next prev parent reply other threads:[~2021-05-26 17:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-25 21:37 x86/fpu/xsave: protection key test failures Babu Moger
2021-05-25 22:18 ` Dave Hansen
2021-05-25 22:22 ` Dave Kleikamp
2021-05-25 22:28 ` Dave Hansen
2021-05-26 0:03 ` Babu Moger
2021-05-26 0:20 ` Dave Hansen
2021-05-26 15:25 ` Babu Moger
2021-05-26 15:50 ` Dave Kleikamp
2021-05-26 16:06 ` Dave Hansen
2021-05-26 17:03 ` Babu Moger [this message]
2021-05-26 0:36 ` Andy Lutomirski
2021-05-26 21:14 ` Babu Moger
2021-05-26 21:17 ` Andy Lutomirski
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=56bcbef0-dca3-7306-d7b4-b0f6d7c382a8@amd.com \
--to=babu.moger@amd.com \
--cc=0x7f454c46@gmail.com \
--cc=Fan_Yang@sjtu.edu.cn \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=b.thiel@posteo.de \
--cc=bauerman@linux.ibm.com \
--cc=bp@alien8.de \
--cc=chang.seok.bae@intel.com \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=dave.kleikamp@oracle.com \
--cc=fenghua.yu@intel.com \
--cc=harish@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=jhubbard@nvidia.com \
--cc=jpa@git.mail.kapsi.fi \
--cc=jroedel@suse.de \
--cc=kan.liang@linux.intel.com \
--cc=keescook@chromium.org \
--cc=kirill.shutemov@linux.intel.com \
--cc=krisman@collabora.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linuxram@us.ibm.com \
--cc=luto@kernel.org \
--cc=mh@glandium.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rong.a.chen@intel.com \
--cc=rppt@kernel.org \
--cc=sandipan@linux.ibm.com \
--cc=sashal@kernel.org \
--cc=seanjc@google.com \
--cc=shuah@kernel.org \
--cc=suxingxing@loongson.cn \
--cc=tglx@linutronix.de \
--cc=ubizjak@gmail.com \
--cc=viro@zeniv.linux.org.uk \
--cc=x86@kernel.org \
--cc=ziy@nvidia.com \
/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