lkml.org 
[lkml]   [2019]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH] objtool: STAC/CLAC validation
    On Mon, Feb 25, 2019 at 02:21:03PM +0100, Peter Zijlstra wrote:
    > On Mon, Feb 25, 2019 at 12:47:00AM -0800, hpa@zytor.com wrote:
    > > It doesn't have to understand the contents of the memop, but it seems
    > > that the presence of a modrm with mode ≠ 3 should be plenty. It needs
    > > to know that much in order to know the length of instructions anyway.
    > > For extra credit, ignore LEA or hinting instructions.
    >
    > A little something like so then?


    $ ./objtool check --no-fp --backtrace ../../defconfig-build/arch/x86/lib/usercopy_64.o
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: .altinstr_replacement+0x3: UACCESS disable without MEMOPs: __clear_user()
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: __clear_user()+0x3a: (alt)
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: __clear_user()+0x2e: (branch)
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: __clear_user()+0x18: (branch)
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: .altinstr_replacement+0xffffffffffffffff: (branch)
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: __clear_user()+0x5: (alt)
    ../../defconfig-build/arch/x86/lib/usercopy_64.o: warning: objtool: __clear_user()+0x0: <=== (func)


    0000000000000000 <__clear_user>:
    0: e8 00 00 00 00 callq 5 <__clear_user+0x5>
    1: R_X86_64_PLT32 __fentry__-0x4
    5: 90 nop
    6: 90 nop
    7: 90 nop
    8: 48 89 f0 mov %rsi,%rax
    b: 48 c1 ee 03 shr $0x3,%rsi
    f: 83 e0 07 and $0x7,%eax
    12: 48 89 f1 mov %rsi,%rcx
    15: 48 85 c9 test %rcx,%rcx
    18: 74 0f je 29 <__clear_user+0x29>
    1a: 48 c7 07 00 00 00 00 movq $0x0,(%rdi)
    21: 48 83 c7 08 add $0x8,%rdi
    25: ff c9 dec %ecx
    27: 75 f1 jne 1a <__clear_user+0x1a>
    29: 48 89 c1 mov %rax,%rcx
    2c: 85 c9 test %ecx,%ecx
    2e: 74 0a je 3a <__clear_user+0x3a>
    30: c6 07 00 movb $0x0,(%rdi)
    33: 48 ff c7 inc %rdi
    36: ff c9 dec %ecx
    38: 75 f6 jne 30 <__clear_user+0x30>
    3a: 90 nop
    3b: 90 nop
    3c: 90 nop
    3d: 48 89 c8 mov %rcx,%rax
    40: c3 retq


    Seems correct. Not sure you want to go fix that though. Let me know if
    you want more output.

    \
     
     \ /
      Last update: 2019-03-01 16:08    [W:4.197 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site