• Linus Torvalds's avatar
    Merge tag 'modules-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux · daa22f5a
    Linus Torvalds authored
    Pull modules updates from Luis Chamberlain:
     "Summary of the changes worth highlighting from most interesting to
      boring below:
    
       - Christoph Hellwig's symbol_get() fix to Nvidia's efforts to
         circumvent the protection he put in place in year 2020 to prevent
         proprietary modules from using GPL only symbols, and also ensuring
         proprietary modules which export symbols grandfather their taint.
    
         That was done through year 2020 commit 262e6ae7 ("modules:
         inherit TAINT_PROPRIETARY_MODULE"). Christoph's new fix is done by
         clarifing __symbol_get() was only ever intended to prevent module
         reference loops by Linux kernel modules and so making it only find
         symbols exported via EXPORT_SYMBOL_GPL(). The circumvention tactic
         used by Nvidia was to use symbol_get() to purposely swift through
         proprietary module symbols and completely bypass our traditional
         EXPORT_SYMBOL*() annotations and community agreed upon
         restrictions.
    
         A small set of preamble patches fix up a few symbols which just
         needed adjusting for this on two modules, the rtc ds1685 and the
         networking enetc module. Two other modules just needed some build
         fixing and removal of use of __symbol_get() as they can't ever be
         modular, as was done by Arnd on the ARM pxa module and Christoph
         did on the mmc au1xmmc driver.
    
         This is a good reminder to us that symbol_get() is just a hack to
         address things which should be fixed through Kconfig at build time
         as was done in the later patches, and so ultimately it should just
         go.
    
       - Extremely late minor fix for old module layout 055f23b7
         ("module: check for exit sections in layout_sections() instead of
         module_init_section()") by James Morse for arm64. Note that this
         layout thing is old, it is *not* Song Liu's commit ac3b4328
         ("module: replace module_layout with module_memory"). The issue
         however is very odd to run into and so there was no hurry to get
         this in fast.
    
       - Although the fix did not go through the modules tree I'd like to
         highlight the fix by Peter Zijlstra in commit 54097309
         ("x86/static_call: Fix __static_call_fixup()") now merged in your
         tree which came out of what was originally suspected to be a
         fallout of the the newer module layout changes by Song Liu commit
         ac3b4328 ("module: replace module_layout with module_memory")
         instead of module_init_section()"). Thanks to the report by
         Christian Bricart and the debugging by Song Liu & Peter that turned
         to be noted as a kernel regression in place since v5.19 through
         commit ee88d363 ("x86,static_call: Use alternative RET
         encoding").
    
         I highlight this to reflect and clarify that we haven't seen more
         fallout from ac3b4328 ("module: replace module_layout with
         module_memory").
    
       - RISC-V toolchain got mapping symbol support which prefix symbols
         with "$" to help with alignment considerations for disassembly.
    
         This is used to differentiate between incompatible instruction
         encodings when disassembling. RISC-V just matches what ARM/AARCH64
         did for alignment considerations and Palmer Dabbelt extended
         is_mapping_symbol() to accept these symbols for RISC-V. We already
         had support for this for all architectures but it also checked for
         the second character, the RISC-V check Dabbelt added was just for
         the "$". After a bit of testing and fallout on linux-next and based
         on feedback from Masahiro Yamada it was decided to simplify the
         check and treat the first char "$" as unique for all architectures,
         and so we no make is_mapping_symbol() for all archs if the symbol
         starts with "$".
    
         The most relevant commit for this for RISC-V on binutils was:
    
           https://sourceware.org/pipermail/binutils/2021-July/117350.html
    
       - A late fix by Andrea Righi (today) to make module zstd
         decompression use vmalloc() instead of kmalloc() to account for
         large compressed modules. I suspect we'll see similar things for
         other decompression algorithms soon.
    
       - samples/hw_breakpoint minor fixes by Rong Tao, Arnd Bergmann and
         Chen Jiahao"
    
    * tag 'modules-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux:
      module/decompress: use vmalloc() for zstd decompression workspace
      kallsyms: Add more debug output for selftest
      ARM: module: Use module_init_layout_section() to spot init sections
      arm64: module: Use module_init_layout_section() to spot init sections
      module: Expose module_init_layout_section()
      modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules
      rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff
      net: enetc: use EXPORT_SYMBOL_GPL for enetc_phc_index
      mmc: au1xmmc: force non-modular build and remove symbol_get usage
      ARM: pxa: remove use of symbol_get()
      samples/hw_breakpoint: mark sample_hbp as static
      samples/hw_breakpoint: fix building without module unloading
      samples/hw_breakpoint: Fix kernel BUG 'invalid opcode: 0000'
      modpost, kallsyms: Treat add '$'-prefixed symbols as mapping symbols
      kernel: params: Remove unnecessary ‘0’ values from err
      module: Ignore RISC-V mapping symbols too
    daa22f5a
kallsyms_selftest.c 10.5 KB