Re: [PATCH v10 01/26] Documentation/x86: Add CET description

From: Dave Hansen
Date: Mon May 18 2020 - 20:38:22 EST


On 5/18/20 4:47 PM, Yu-cheng Yu wrote:
> On Fri, 2020-05-15 at 19:53 -0700, Yu-cheng Yu wrote:
>> On Fri, 2020-05-15 at 16:56 -0700, Dave Hansen wrote:
>>> On 5/15/20 4:29 PM, Yu-cheng Yu wrote:
>>>> [...]
>>>> I have run them with CET enabled. All of them pass, except for the following:
>>>> Sigreturn from 64-bit to 32-bit fails, because shadow stack is at a 64-bit
>>>> address. This is understandable.
>>> [...]
>>> One a separate topic: You ran the selftests and one failed. This is a
>>> *MASSIVE* warning sign. It should minimally be described in your cover
>>> letter, and accompanied by a fix to the test case. It is absolutely
>>> unacceptable to introduce a kernel feature that causes a test to fail.
>>> You must either fix your kernel feature or you fix the test.
>>>
>>> This code can not be accepted until this selftests issue is rectified.
> The x86/sigreturn test constructs 32-bit ldt entries, and does sigreturn from
> 64-bit to 32-bit context. We do not have a way to construct a static 32-bit
> shadow stack.

Why? What's the limiting factor? Hardware architecture? Something in
the kernel?

> Why do we want that? I think we can simply run the test with CET
> disabled.

The sadistic parts of selftests/x86 come from real bugs. Either bugs
where the kernel fell over, or where behavior changed that broke apps.
I'd suggest doing some research on where that particular test case came
from. Find the author of the test, look at the changelogs.

If this is something that a real app does, this is a problem. If it's a
sadistic test that Andy L added because it was an attack vector against
the entry code, it's a different story.

I don't personally know the background, but the changelogs can help you
find the person that does.