Messages in this thread | | | From | Linus Torvalds <> | Date | Wed, 1 Jul 2020 14:02:42 -0700 | Subject | Re: objtool clac/stac handling change.. |
| |
On Wed, Jul 1, 2020 at 1:51 PM Josh Poimboeuf <jpoimboe@redhat.com> wrote: > > Yeah. Peter's more of the expert here, but I think we'd at least need > to annotate the code which expects an implicit CLAC so objtool knows > what to expect. It's not trivial, but it might be doable.
In both C and asm code, it's the "_ASM_EXTABLE_UA" cases that would do this ("UA" being for "User Access").
In fact, it should be quite easy to see: the thing that distinguishes those things is that the exception handler is "ex_handler_uaccess". So objtool should be able to see that quite easily as it follows the exception tables.
It's a special case for entirely unrelated reasons (reasons objtool doesn't care about): a user access exception can be either due to a page fault (normal) or due to a misformed non-canonical address, and we warn about the latter case.
That said, I wouldn't necessarily object to making the rule be that *any* exception handler invocation will always do the user_access_end().
It sounds dangerous/wrong to me to do anything that can fault (other than the user access itself, of course) within a STAC/CLAC region.
So the objtool rule might be:
- in a STAC region, no exception handlers at all except for that ex_handler_uaccess case
- and that case will clear AC if it triggers.
and maybe such an objtool check would show some case where I'm wrong, and we do some MSR read other other fault thing within a STAC region. That _sounds_ wrong to me, but maybe we have reason to do so that I just can't think or right now?
Linus
| |