lkml.org 
[lkml]   [2022]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH v2 20/21] x86: Add support for CONFIG_CFI_CLANG
    On Tue, May 17, 2022 at 08:48:41AM +0000, David Laight wrote:
    > From: Peter Zijlstra
    > > Sent: 17 May 2022 09:41
    > ...
    > > > If we use %eax instead of %r10d for the hash transfer (as per Joao), and
    > > > use int3 instead of ud2, then we can shrink the fineibt sequence to:
    > > >
    > > > __cfi_\func:
    > > > endbr # 4
    > > > xorl $0x12345678, %eax # 5
    > > > jz 1f # 2
    > > > int3 # 1
    > > > \func:
    > > > ...
    > > >
    > > > Which is 12 bytes, and needs a larger preamble (up from 9 in the current
    > > > proposal).
    > >
    > > On all that; perhaps it would be good to have a compiler option to
    > > specify the preamble size. It can enforce the minimum at 7 to have at
    > > least the required:
    > >
    > > movl $0x12345678, %eax
    > > int3
    > > int3
    > >
    > > but any larger number will just increase the preamble with int3 padding
    > > at the top.
    > >
    > > That can go right along with the option to supress endbr when preamble
    > > :-)
    >
    > You also need a compiler option to specify the register.
    > While (I think) %eax is usable in kernel, it isn't in userspace.
    > It is used in varargs calls to pass (IIRC) the number of fp
    > args that are passed in registers.

    You're mistaken, the compiler doesn't emit the FineIBT code *at*all*.
    That's all patched in later. For kCFI the mov is never executed and is
    only there to make it a valid instruction.

    \
     
     \ /
      Last update: 2022-05-17 11:39    [W:2.444 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site