lkml.org 
[lkml]   [2018]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v5 21/27] x86/cet/shstk: Introduce WRUSS instruction
    On Tue, Nov 6, 2018 at 10:43 AM Dave Hansen <dave.hansen@intel.com> wrote:
    >
    > On 10/11/18 8:15 AM, Yu-cheng Yu wrote:
    > > --- a/arch/x86/mm/fault.c
    > > +++ b/arch/x86/mm/fault.c
    > > @@ -1305,6 +1305,15 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
    > > error_code |= X86_PF_USER;
    > > flags |= FAULT_FLAG_USER;
    > > } else {
    > > + /*
    > > + * WRUSS is a kernel instruction and but writes
    > > + * to user shadow stack. When a fault occurs,
    > > + * both X86_PF_USER and X86_PF_SHSTK are set.
    > > + * Clear X86_PF_USER here.
    > > + */
    > > + if ((error_code & (X86_PF_USER | X86_PF_SHSTK)) ==
    > > + (X86_PF_USER | X86_PF_SHSTK))
    > > + error_code &= ~X86_PF_USER;
    > This hunk of code basically points out that the architecture of WRUSS is
    > broken for Linux. The setting of X86_PF_USER for a ring-0 instruction
    > really is a mis-feature of the architecture for us and we *undo* it in
    > software which is unfortunate. Wish I would have caught this earlier.
    >
    > Andy, note that this is another case where hw_error_code and
    > sw_error_code will diverge, unfortunately.
    >
    > Anyway, this is going to necessitate some comment updates in the page
    > fault code. Yu-cheng, you are going to collide with some recent changes
    > I made to the page fault code. Please be careful with the context when
    > you do the merge and make sure that all the new comments stay correct.

    I'm going to send a patch set in the next day or two that cleans it up
    further and is probably good preparation for WRUSS.

    \
     
     \ /
      Last update: 2018-11-06 20:27    [W:4.160 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site