26 Oct, 2020

1 commit

  • Use a more generic form for __section that requires quotes to avoid
    complications with clang and gcc differences.

    Remove the quote operator # from compiler_attributes.h __section macro.

    Convert all unquoted __section(foo) uses to quoted __section("foo").
    Also convert __attribute__((section("foo"))) uses to __section("foo")
    even if the __attribute__ has multiple list entry forms.

    Conversion done using the script at:

    https://lore.kernel.org/lkml/75393e5ddc272dc7403de74d645e6c6e0f4e70eb.camel@perches.com/2-convert_section.pl

    Signed-off-by: Joe Perches
    Reviewed-by: Nick Desaulniers
    Reviewed-by: Miguel Ojeda
    Signed-off-by: Linus Torvalds

    Joe Perches
     

27 Jul, 2020

1 commit


07 Jul, 2020

1 commit

  • strsep() is neither standard C nor POSIX and used outside
    the kernel code here. Using it here requires that the
    build host supports it out of the box which is e.g.
    not true for a Darwin build host and using a cross-compiler.
    This leads to:

    scripts/mod/modpost.c:145:2: warning: implicit declaration of function 'strsep' [-Wimplicit-function-declaration]
    return strsep(stringp, "\n");
    ^

    and a segfault when running MODPOST.

    See also: https://stackoverflow.com/a/7219504

    So let's replace this by strchr() instead of using strsep().
    It does not hurt kernel size or speed since this code is run
    on the build host.

    Fixes: ac5100f5432967 ("modpost: add read_text_file() and get_line() helpers")
    Co-developed-by: Masahiro Yamada
    Signed-off-by: H. Nikolaus Schaller
    Signed-off-by: Masahiro Yamada

    H. Nikolaus Schaller
     

07 Jun, 2020

1 commit

  • Pull Kbuild updates from Masahiro Yamada:

    - fix warnings in 'make clean' for ARCH=um, hexagon, h8300, unicore32

    - ensure to rebuild all objects when the compiler is upgraded

    - exclude system headers from dependency tracking and fixdep processing

    - fix potential bit-size mismatch between the kernel and BPF user-mode
    helper

    - add the new syntax 'userprogs' to build user-space programs for the
    target architecture (the same arch as the kernel)

    - compile user-space sample code under samples/ for the target arch
    instead of the host arch

    - make headers_install fail if a CONFIG option is leaked to user-space

    - sanitize the output format of scripts/checkstack.pl

    - handle ARM 'push' instruction in scripts/checkstack.pl

    - error out before modpost if a module name conflict is found

    - error out when multiple directories are passed to M= because this
    feature is broken for a long time

    - add CONFIG_DEBUG_INFO_COMPRESSED to support compressed debug info

    - a lot of cleanups of modpost

    - dump vmlinux symbols out into vmlinux.symvers, and reuse it in the
    second pass of modpost

    - do not run the second pass of modpost if nothing in modules is
    updated

    - install modules.builtin(.modinfo) by 'make install' as well as by
    'make modules_install' because it is useful even when
    CONFIG_MODULES=n

    - add new command line variables, GZIP, BZIP2, LZOP, LZMA, LZ4, and XZ
    to allow users to use alternatives such as pigz, pbzip2, etc.

    * tag 'kbuild-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (96 commits)
    kbuild: add variables for compression tools
    Makefile: install modules.builtin even if CONFIG_MODULES=n
    mksysmap: Fix the mismatch of '.L' symbols in System.map
    kbuild: doc: rename LDFLAGS to KBUILD_LDFLAGS
    modpost: change elf_info->size to size_t
    modpost: remove is_vmlinux() helper
    modpost: strip .o from modname before calling new_module()
    modpost: set have_vmlinux in new_module()
    modpost: remove mod->skip struct member
    modpost: add mod->is_vmlinux struct member
    modpost: remove is_vmlinux() call in check_for_{gpl_usage,unused}()
    modpost: remove mod->is_dot_o struct member
    modpost: move -d option in scripts/Makefile.modpost
    modpost: remove -s option
    modpost: remove get_next_text() and make {grab,release_}file static
    modpost: use read_text_file() and get_line() for reading text files
    modpost: avoid false-positive file open error
    modpost: fix potential mmap'ed file overrun in get_src_version()
    modpost: add read_text_file() and get_line() helpers
    modpost: do not call get_modinfo() for vmlinux(.o)
    ...

    Linus Torvalds
     

06 Jun, 2020

20 commits

  • Align with the mmap / munmap APIs.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Now that is_vmlinux() is called only in new_module(), we can inline
    the function call.

    modname is the basename with '.o' is stripped. No need to compare it
    with 'vmlinux.o'.

    vmlinux is always located at the current working directory. No need
    to strip the directory path.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • new_module() conditionally strips the .o because the modname has .o
    suffix when it is called from read_symbols(), but no .o when it is
    called from read_dump().

    It is clearer to strip .o in read_symbols().

    I also used flexible-array for mod->name.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Set have_vmlinux flag in a single place.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The meaning of 'skip' is obscure since it does not explain
    "what to skip".

    mod->skip is set when it is vmlinux or the module info came from
    a dump file.

    So, mod->skip is equivalent to (mod->is_vmlinux || mod->from_dump).

    For the check in write_namespace_deps_files(), mod->is_vmlinux is
    unneeded because the -d option is not passed in the first pass of
    modpost.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • is_vmlinux() is called in several places to check whether the current
    module is vmlinux or not.

    It is faster and clearer to check mod->is_vmlinux flag.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • check_exports() is never called for vmlinux because mod->skip is set
    for vmlinux.

    Hence, check_for_gpl_usage() and check_for_unused() are not called
    for vmlinux, either. is_vmlinux() is always false here.

    Remove the is_vmlinux() calls, and hard-code the ".ko" suffix.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Previously, there were two cases where mod->is_dot_o is unset:

    [1] the executable 'vmlinux' in the second pass of modpost
    [2] modules loaded by read_dump()

    I think [1] was intended usage to distinguish 'vmlinux.o' and 'vmlinux'.
    Now that modpost does not parse the executable 'vmlinux', this case
    does not happen.

    [2] is obscure, maybe a bug. Module.symver stores module paths without
    extension. So, none of modules loaded by read_dump() has the .o suffix,
    and new_module() unsets ->is_dot_o. Anyway, it is not a big deal because
    handle_symbol() is not called for the case.

    To sum up, all the parsed ELF files are .o files.

    mod->is_dot_o is unneeded.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The -s option was added by commit 8d8d8289df65 ("kbuild: do not do
    section mismatch checks on vmlinux in 2nd pass").

    Now that the second pass does not parse vmlinux, this option is
    unneeded.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • get_next_line() is no longer used. Remove.

    grab_file() and release_file() are only used in modpost.c. Make them
    static.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • grab_file() mmaps a file, but it is not so efficient here because
    get_next_line() copies every line to the temporary buffer anyway.

    read_text_file() and get_line() are simpler. get_line() exploits the
    library function strchr().

    Going forward, the missing *.symvers or *.cmd is a fatal error.
    This should not happen because scripts/Makefile.modpost guards the
    -i option files with $(wildcard $(input-symdump)).

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • modpost uses grab_file() to open a file, but it is not suitable for
    a text file because the mmap'ed file is not terminated by null byte.
    Actually, I see some issues for the use of grab_file().

    The new helper, read_text_file() loads the whole file content into a
    malloc'ed buffer, and appends a null byte. Then, get_line() reads
    each line.

    To handle text files, I intend to replace as follows:

    grab_file() -> read_text_file()
    get_new_line() -> get_line()

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The three calls of get_modinfo() ("license", "import_ns", "version")
    always return NULL for vmlinux(.o) because the built-in module info is
    prefixed with __MODULE_INFO_PREFIX.

    It is harmless to call get_modinfo(), but there is no point to search
    for what apparently does not exist.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • As far as I understood, this code gets rid of '$Revision$' or '$Revision:'
    of CVS, RCS or whatever in MODULE_VERSION() tags.

    Remove the primeval code.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • check_exports() does not print warnings about unresolved symbols if
    vmlinux is missing because there would be too many.

    This situation happens when you do 'make modules' from the clean
    tree, or compile external modules against a kernel tree that has
    not been completely built.

    It is dangerous to not check unresolved symbols because you might be
    building useless modules. At least it should be warned.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Currently, the second pass of modpost is always invoked when you run
    'make' or 'make modules' even if none of modules is changed.

    Use if_changed to invoke it only when it is necessary.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Previously, the -i option had two functions; load a symbol dump file,
    and set the external_module flag.

    I want to assign a dedicate option for each of them.

    Going forward, the -i is used to load a symbol dump file, and the -e
    to set the external_module flag.

    With this, we will be able to use -i for loading in-kernel symbols.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The -i option is used to include Modules.symver as well as files from
    $(KBUILD_EXTRA_SYMBOLS).

    Make the struct and variable names more generic.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Now that there is no difference between -i and -e, they can be unified.

    Make modpost accept the -i option multiple times, then remove -e.

    I will reuse -e for a different purpose.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The meaning of sym->kernel is obscure; it is set for in-kernel symbols
    loaded from Modules.symvers. This happens only when we are building
    external modules, and it is used to determine whether to dump symbols
    to $(KBUILD_EXTMOD)/Modules.symvers

    It is clearer to remember whether the symbol or module came from a dump
    file or ELF object.

    This changes the KBUILD_EXTRA_SYMBOLS behavior. Previously, symbols
    loaded from KBUILD_EXTRA_SYMBOLS are accumulated into the current
    $(KBUILD_EXTMOD)/Modules.symvers

    Going forward, they will be only used to check symbol references, but
    not dumped into the current $(KBUILD_EXTMOD)/Modules.symvers. I believe
    this makes more sense.

    sym->vmlinux will have no user. Remove it too.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

04 Jun, 2020

1 commit

  • Pull networking updates from David Miller:

    1) Allow setting bluetooth L2CAP modes via socket option, from Luiz
    Augusto von Dentz.

    2) Add GSO partial support to igc, from Sasha Neftin.

    3) Several cleanups and improvements to r8169 from Heiner Kallweit.

    4) Add IF_OPER_TESTING link state and use it when ethtool triggers a
    device self-test. From Andrew Lunn.

    5) Start moving away from custom driver versions, use the globally
    defined kernel version instead, from Leon Romanovsky.

    6) Support GRO vis gro_cells in DSA layer, from Alexander Lobakin.

    7) Allow hard IRQ deferral during NAPI, from Eric Dumazet.

    8) Add sriov and vf support to hinic, from Luo bin.

    9) Support Media Redundancy Protocol (MRP) in the bridging code, from
    Horatiu Vultur.

    10) Support netmap in the nft_nat code, from Pablo Neira Ayuso.

    11) Allow UDPv6 encapsulation of ESP in the ipsec code, from Sabrina
    Dubroca. Also add ipv6 support for espintcp.

    12) Lots of ReST conversions of the networking documentation, from Mauro
    Carvalho Chehab.

    13) Support configuration of ethtool rxnfc flows in bcmgenet driver,
    from Doug Berger.

    14) Allow to dump cgroup id and filter by it in inet_diag code, from
    Dmitry Yakunin.

    15) Add infrastructure to export netlink attribute policies to
    userspace, from Johannes Berg.

    16) Several optimizations to sch_fq scheduler, from Eric Dumazet.

    17) Fallback to the default qdisc if qdisc init fails because otherwise
    a packet scheduler init failure will make a device inoperative. From
    Jesper Dangaard Brouer.

    18) Several RISCV bpf jit optimizations, from Luke Nelson.

    19) Correct the return type of the ->ndo_start_xmit() method in several
    drivers, it's netdev_tx_t but many drivers were using
    'int'. From Yunjian Wang.

    20) Add an ethtool interface for PHY master/slave config, from Oleksij
    Rempel.

    21) Add BPF iterators, from Yonghang Song.

    22) Add cable test infrastructure, including ethool interfaces, from
    Andrew Lunn. Marvell PHY driver is the first to support this
    facility.

    23) Remove zero-length arrays all over, from Gustavo A. R. Silva.

    24) Calculate and maintain an explicit frame size in XDP, from Jesper
    Dangaard Brouer.

    25) Add CAP_BPF, from Alexei Starovoitov.

    26) Support terse dumps in the packet scheduler, from Vlad Buslov.

    27) Support XDP_TX bulking in dpaa2 driver, from Ioana Ciornei.

    28) Add devm_register_netdev(), from Bartosz Golaszewski.

    29) Minimize qdisc resets, from Cong Wang.

    30) Get rid of kernel_getsockopt and kernel_setsockopt in order to
    eliminate set_fs/get_fs calls. From Christoph Hellwig.

    * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (2517 commits)
    selftests: net: ip_defrag: ignore EPERM
    net_failover: fixed rollback in net_failover_open()
    Revert "tipc: Fix potential tipc_aead refcnt leak in tipc_crypto_rcv"
    Revert "tipc: Fix potential tipc_node refcnt leak in tipc_rcv"
    vmxnet3: allow rx flow hash ops only when rss is enabled
    hinic: add set_channels ethtool_ops support
    selftests/bpf: Add a default $(CXX) value
    tools/bpf: Don't use $(COMPILE.c)
    bpf, selftests: Use bpf_probe_read_kernel
    s390/bpf: Use bcr 0,%0 as tail call nop filler
    s390/bpf: Maintain 8-byte stack alignment
    selftests/bpf: Fix verifier test
    selftests/bpf: Fix sample_cnt shared between two threads
    bpf, selftests: Adapt cls_redirect to call csum_level helper
    bpf: Add csum_level helper for fixing up csum levels
    bpf: Fix up bpf_skb_adjust_room helper's skb csum setting
    sfc: add missing annotation for efx_ef10_try_update_nic_stats_vf()
    crypto/chtls: IPv6 support for inline TLS
    Crypto/chcr: Fixes a coccinile check error
    Crypto/chcr: Fixes compilations warnings
    ...

    Linus Torvalds
     

03 Jun, 2020

1 commit


29 May, 2020

2 commits

  • Use sym_get_data_by_offset() helper to get access to the .shstrtab
    section data. No functional change is intended because
    elf->sechdrs[elf->secindex_strings].sh_addr is 0 for both ET_REL
    and ET_EXEC object types.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • This may not be a practical problem, but the second pass of ARCH=i386
    modpost causes segmentation fault if the -s option is not passed.

    MODPOST 12 modules
    Segmentation fault (core dumped)
    make[2]: *** [scripts/Makefile.modpost:94: __modpost] Error 139
    make[1]: *** [Makefile:1339: modules] Error 2
    make[1]: *** Waiting for unfinished jobs....

    The segmentation fault occurs when section_rel() is called for vmlinux,
    which is untested in regular builds. The cause of the problem is
    reloc_location() returning a wrong pointer for ET_EXEC object type.
    In this case, you need to subtract sechdr->sh_addr, otherwise it would
    get access beyond the mmap'ed memory.

    Add sym_get_data_by_offset() helper to avoid code duplication.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

25 May, 2020

1 commit

  • The current codebase makes use of the zero-length array language
    extension to the C90 standard, but the preferred mechanism to declare
    variable-length types such as these ones is a flexible array member[1][2],
    introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.

    Also, notice that, dynamic memory allocations won't be affected by
    this change:

    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]

    sizeof(flexible-array-member) triggers a warning because flexible array
    members have incomplete type[1]. There are some instances of code in
    which the sizeof operator is being incorrectly/erroneously applied to
    zero-length arrays and the result is zero. Such instances may be hiding
    some bugs. So, this work (flexible-array member conversions) will also
    help to get completely rid of those sorts of issues.

    This issue was found with the help of Coccinelle.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Masahiro Yamada

    Gustavo A. R. Silva
     

19 May, 2020

1 commit

  • Some code pathes, especially the low level entry code, must be protected
    against instrumentation for various reasons:

    - Low level entry code can be a fragile beast, especially on x86.

    - With NO_HZ_FULL RCU state needs to be established before using it.

    Having a dedicated section for such code allows to validate with tooling
    that no unsafe functions are invoked.

    Add the .noinstr.text section and the noinstr attribute to mark
    functions. noinstr implies notrace. Kprobes will gain a section check
    later.

    Provide also a set of markers: instrumentation_begin()/end()

    These are used to mark code inside a noinstr function which calls
    into regular instrumentable text section as safe.

    The instrumentation markers are only active when CONFIG_DEBUG_ENTRY is
    enabled as the end marker emits a NOP to prevent the compiler from merging
    the annotation points. This means the objtool verification requires a
    kernel compiled with this option.

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexandre Chartre
    Acked-by: Peter Zijlstra
    Link: https://lkml.kernel.org/r/20200505134100.075416272@linutronix.de

    Thomas Gleixner
     

22 Apr, 2020

1 commit

  • VERMAGIC* definitions are not supposed to be used by the drivers,
    see this [1] bug report, so introduce special define to guard inclusion
    of this header file and define it in kernel/modules.h and in internal
    script that generates *.mod.c files.

    In-tree module build:
    ➜ kernel git:(vermagic) ✗ make clean
    ➜ kernel git:(vermagic) ✗ make M=drivers/infiniband/hw/mlx5
    ➜ kernel git:(vermagic) ✗ modinfo drivers/infiniband/hw/mlx5/mlx5_ib.ko
    filename: /images/leonro/src/kernel/drivers/infiniband/hw/mlx5/mlx5_ib.ko

    vermagic: 5.6.0+ SMP mod_unload modversions

    Out-of-tree module build:
    ➜ mlx5 make -C /images/leonro/src/kernel clean M=/tmp/mlx5
    ➜ mlx5 make -C /images/leonro/src/kernel M=/tmp/mlx5
    ➜ mlx5 modinfo /tmp/mlx5/mlx5_ib.ko
    filename: /tmp/mlx5/mlx5_ib.ko

    vermagic: 5.6.0+ SMP mod_unload modversions

    [1] https://lore.kernel.org/lkml/20200411155623.GA22175@zn.tnic
    Reported-by: Borislav Petkov
    Acked-by: Borislav Petkov
    Acked-by: Jessica Yu
    Co-developed-by: Masahiro Yamada
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Leon Romanovsky
    Signed-off-by: David S. Miller

    Leon Romanovsky
     

01 Apr, 2020

1 commit

  • Pull Kbuild updates from Masahiro Yamada:
    "Build system:

    - add CONFIG_UNUSED_KSYMS_WHITELIST, which will be useful to define a
    fixed set of export symbols for Generic Kernel Image (GKI)

    - allow to run 'make dt_binding_check' without .config

    - use full schema for checking DT examples in *.yaml files

    - make modpost fail for missing MODULE_IMPORT_NS(), which makes more
    sense because we know the produced modules are never loadable

    - Remove unused 'AS' variable

    Kconfig:

    - sanitize DEFCONFIG_LIST, and remove ARCH_DEFCONFIG from Kconfig
    files

    - relax the 'imply' behavior so that symbols implied by 'y' can
    become 'm'

    - make 'imply' obey 'depends on' in order to make 'imply' really weak

    Misc:

    - add documentation on building the kernel with Clang/LLVM

    - revive __HAVE_ARCH_STRLEN for 32bit sparc to use optimized strlen()

    - fix warning from deb-pkg builds when CONFIG_DEBUG_INFO=n

    - various script and Makefile cleanups"

    * tag 'kbuild-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (34 commits)
    Makefile: Update kselftest help information
    kbuild: deb-pkg: fix warning when CONFIG_DEBUG_INFO is unset
    kbuild: add outputmakefile to no-dot-config-targets
    kbuild: remove AS variable
    net: wan: wanxl: refactor the firmware rebuild rule
    net: wan: wanxl: use $(M68KCC) instead of $(M68KAS) for rebuilding firmware
    net: wan: wanxl: use allow to pass CROSS_COMPILE_M68k for rebuilding firmware
    kbuild: add comment about grouped target
    kbuild: add -Wall to KBUILD_HOSTCXXFLAGS
    kconfig: remove unused variable in qconf.cc
    sparc: revive __HAVE_ARCH_STRLEN for 32bit sparc
    kbuild: refactor Makefile.dtbinst more
    kbuild: compute the dtbs_install destination more simply
    Makefile: disallow data races on gcc-10 as well
    kconfig: make 'imply' obey the direct dependency
    kconfig: allow symbols implied by y to become m
    net: drop_monitor: use IS_REACHABLE() to guard net_dm_hw_report()
    modpost: return error if module is missing ns imports and MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n
    modpost: rework and consolidate logging interface
    kbuild: allow to run dt_binding_check without kernel configuration
    ...

    Linus Torvalds
     

31 Mar, 2020

1 commit

  • Pull timekeeping and timer updates from Thomas Gleixner:
    "Core:

    - Consolidation of the vDSO build infrastructure to address the
    difficulties of cross-builds for ARM64 compat vDSO libraries by
    restricting the exposure of header content to the vDSO build.

    This is achieved by splitting out header content into separate
    headers. which contain only the minimaly required information which
    is necessary to build the vDSO. These new headers are included from
    the kernel headers and the vDSO specific files.

    - Enhancements to the generic vDSO library allowing more fine grained
    control over the compiled in code, further reducing architecture
    specific storage and preparing for adopting the generic library by
    PPC.

    - Cleanup and consolidation of the exit related code in posix CPU
    timers.

    - Small cleanups and enhancements here and there

    Drivers:

    - The obligatory new drivers: Ingenic JZ47xx and X1000 TCU support

    - Correct the clock rate of PIT64b global clock

    - setup_irq() cleanup

    - Preparation for PWM and suspend support for the TI DM timer

    - Expand the fttmr010 driver to support ast2600 systems

    - The usual small fixes, enhancements and cleanups all over the
    place"

    * tag 'timers-core-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (80 commits)
    Revert "clocksource/drivers/timer-probe: Avoid creating dead devices"
    vdso: Fix clocksource.h macro detection
    um: Fix header inclusion
    arm64: vdso32: Enable Clang Compilation
    lib/vdso: Enable common headers
    arm: vdso: Enable arm to use common headers
    x86/vdso: Enable x86 to use common headers
    mips: vdso: Enable mips to use common headers
    arm64: vdso32: Include common headers in the vdso library
    arm64: vdso: Include common headers in the vdso library
    arm64: Introduce asm/vdso/processor.h
    arm64: vdso32: Code clean up
    linux/elfnote.h: Replace elf.h with UAPI equivalent
    scripts: Fix the inclusion order in modpost
    common: Introduce processor.h
    linux/ktime.h: Extract common header for vDSO
    linux/jiffies.h: Extract common header for vDSO
    linux/time64.h: Extract common header for vDSO
    linux/time32.h: Extract common header for vDSO
    linux/time.h: Extract common header for vDSO
    ...

    Linus Torvalds
     

21 Mar, 2020

1 commit

  • In the process of creating the source file of a module modpost injects a
    set of includes that are not required if the compilation unit is
    statically built into the kernel.

    The order of inclusion of the headers can cause redefinition problems
    (e.g.):

    In file included from include/linux/elf.h:5:0,
    from include/linux/module.h:18,
    from crypto/arc4.mod.c:2:
    #define ELF_OSABI ELFOSABI_LINUX

    In file included from include/linux/elfnote.h:62:0,
    from include/linux/build-salt.h:4,
    from crypto/arc4.mod.c:1:
    include/uapi/linux/elf.h:363:0: note: this is the location of
    the previous definition
    #define ELF_OSABI ELFOSABI_NONE

    The issue was exposed during the development of the series [1].

    [1] https://lore.kernel.org/lkml/20200306133242.26279-1-vincenzo.frascino@arm.com/

    Reported-by: kbuild test robot
    Signed-off-by: Vincenzo Frascino
    Signed-off-by: Thomas Gleixner
    Cc: Masahiro Yamada
    Cc: Michal Marek
    Link: https://lkml.kernel.org/r/20200320145351.32292-17-vincenzo.frascino@arm.com

    Vincenzo Frascino
     

19 Mar, 2020

1 commit

  • (uint16_t) st_shndx is limited to 65535(i.e. SHN_XINDEX) so sym_get_data() gets
    wrong section index by st_shndx if requested symbol contains extended section
    index that is more than 65535. In this case, we need to get proper section index
    by .symtab_shndx section.

    Module.symvers generated by building kernel with "-ffunction-sections -fdata-sections"
    shows the issue.

    Fixes: 56067812d5b0 ("kbuild: modversions: add infrastructure for emitting relative CRCs")
    Fixes: e84f9fbbece1 ("modpost: refactor namespace_from_kstrtabns() to not hard-code section name")
    Signed-off-by: Xiao Yang
    Signed-off-by: Masahiro Yamada

    Xiao Yang
     

17 Mar, 2020

1 commit

  • In order to preserve backwards compatability with kmod tools, we have to
    move the namespace field in Module.symvers last, as the depmod -e -E
    option looks at the first three fields in Module.symvers to check symbol
    versions (and it's expected they stay in the original order of crc,
    symbol, module).

    In addition, update an ancient comment above read_dump() in modpost that
    suggested that the export type field in Module.symvers was optional. I
    suspect that there were historical reasons behind that comment that are
    no longer accurate. We have been unconditionally printing the export
    type since 2.6.18 (commit bd5cbcedf44), which is over a decade ago now.

    Fix up read_dump() to treat each field as non-optional. I suspect the
    original read_dump() code treated the export field as optional in order
    to support pre
    Reviewed-by: Matthias Maennich
    Reviewed-by: Lucas De Marchi
    Signed-off-by: Jessica Yu
    Signed-off-by: Masahiro Yamada

    Jessica Yu
     

13 Mar, 2020

2 commits

  • Currently when CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n, modpost
    only warns when a module is missing namespace imports. Under this
    configuration, such a module cannot be loaded into the kernel anyway, as
    the module loader would reject it. We might as well return a build
    error when a module is missing namespace imports under
    CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n, so that the build
    warning does not go ignored/unnoticed.

    Signed-off-by: Jessica Yu
    Signed-off-by: Masahiro Yamada

    Jessica Yu
     
  • Rework modpost's logging interface by consolidating merror(), warn(), and
    fatal() to use a single function, modpost_log(). Introduce different
    logging levels (WARN, ERROR, FATAL) as well. The purpose of this cleanup is
    to reduce code duplication when deciding whether or not to warn or error
    out based on a condition.

    Signed-off-by: Jessica Yu
    Signed-off-by: Masahiro Yamada

    Jessica Yu
     

15 Jan, 2020

1 commit


23 Nov, 2019

1 commit