• Borislav Petkov (AMD)'s avatar
    kbuild: Disable KCSAN for autogenerated *.mod.c intermediaries · 54babdc0
    Borislav Petkov (AMD) authored
    When KCSAN and CONSTRUCTORS are enabled, one can trigger the
    
      "Unpatched return thunk in use. This should not happen!"
    
    catch-all warning.
    
    Usually, when objtool runs on the .o objects, it does generate a section
    .return_sites which contains all offsets in the objects to the return
    thunks of the functions present there. Those return thunks then get
    patched at runtime by the alternatives.
    
    KCSAN and CONSTRUCTORS add this to the object file's .text.startup
    section:
    
      -------------------
      Disassembly of section .text.startup:
    
      ...
    
      0000000000000010 <_sub_I_00099_0>:
        10:   f3 0f 1e fa             endbr64
        14:   e8 00 00 00 00          call   19 <_sub_I_00099_0+0x9>
                              15: R_X86_64_PLT32      __tsan_init-0x4
        19:   e9 00 00 00 00          jmp    1e <__UNIQUE_ID___addressable_cryptd_alloc_aead349+0x6>
                              1a: R_X86_64_PLT32      __x86_return_thunk-0x4
      -------------------
    
    which, if it is built as a module goes through the intermediary stage of
    creating a <module>.mod.c file which, when translated, receives a second
    constructor:
    
      -------------------
      Disassembly of section .text.startup:
    
      0000000000000010 <_sub_I_00099_0>:
        10:   f3 0f 1e fa             endbr64
        14:   e8 00 00 00 00          call   19 <_sub_I_00099_0+0x9>
                              15: R_X86_64_PLT32      __tsan_init-0x4
        19:   e9 00 00 00 00          jmp    1e <_sub_I_00099_0+0xe>
                              1a: R_X86_64_PLT32      __x86_return_thunk-0x4
    
      ...
    
      0000000000000030 <_sub_I_00099_0>:
        30:   f3 0f 1e fa             endbr64
        34:   e8 00 00 00 00          call   39 <_sub_I_00099_0+0x9>
                              35: R_X86_64_PLT32      __tsan_init-0x4
        39:   e9 00 00 00 00          jmp    3e <__ksymtab_cryptd_alloc_ahash+0x2>
                              3a: R_X86_64_PLT32      __x86_return_thunk-0x4
      -------------------
    
    in the .ko file.
    
    Objtool has run already so that second constructor's return thunk cannot
    be added to the .return_sites section and thus the return thunk remains
    unpatched and the warning rightfully fires.
    
    Drop KCSAN flags from the mod.c generation stage as those constructors
    do not contain data races one would be interested about.
    
    Debugged together with David Kaplan <David.Kaplan@amd.com> and Nikolay
    Borisov <nik.borisov@suse.com>.
    Reported-by: default avatarPaul Menzel <pmenzel@molgen.mpg.de>
    Closes: https://lore.kernel.org/r/0851a207-7143-417e-be31-8bf2b3afb57d@molgen.mpg.deSigned-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Tested-by: Paul Menzel <pmenzel@molgen.mpg.de> # Dell XPS 13
    Reviewed-by: default avatarNikolay Borisov <nik.borisov@suse.com>
    Reviewed-by: default avatarMarco Elver <elver@google.com>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    54babdc0
Makefile.modfinal 2.63 KB