04 Apr, 2018

2 commits

  • Pull Kconfig updates from Masahiro Yamada:

    - improve checkpatch for more precise Kconfig code checking

    - clarify effective selects by grouping reverse dependencies in help

    - do not write out '# CONFIG_FOO is not set' from invisible symbols

    - make oldconfig as silent as it should be

    - rename 'silentoldconfig' to 'syncconfig'

    - add unit-test framework and several test cases

    - warn unmet dependency of tristate symbols

    - make unmet dependency warnings readable, removing false positives

    - improve recursive include detection

    - use yylineno to simplify the line number tracking

    - misc cleanups

    * tag 'kconfig-v4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (30 commits)
    kconfig: use yylineno option instead of manual lineno increments
    kconfig: detect recursive inclusion earlier
    kconfig: remove duplicated file name and lineno of recursive inclusion
    kconfig: do not include both curses.h and ncurses.h for nconfig
    kconfig: make unmet dependency warnings readable
    kconfig: warn unmet direct dependency of tristate symbols selected by y
    kconfig: tests: test if recursive inclusion is detected
    kconfig: tests: test if recursive dependencies are detected
    kconfig: tests: test randconfig for choice in choice
    kconfig: tests: test defconfig when two choices interact
    kconfig: tests: check visibility of tristate choice values in y choice
    kconfig: tests: check unneeded "is not set" with unmet dependency
    kconfig: tests: test if new symbols in choice are asked
    kconfig: tests: test automatic submenu creation
    kconfig: tests: add basic choice tests
    kconfig: tests: add framework for Kconfig unit testing
    kbuild: add PYTHON2 and PYTHON3 variables
    kconfig: remove redundant streamline_config.pl prerequisite
    kconfig: rename silentoldconfig to syncconfig
    kconfig: invoke oldconfig instead of silentoldconfig from local*config
    ...

    Linus Torvalds
     
  • Pull Kbuild updates from Masahiro Yamada:

    - add a shell script to get Clang version

    - improve portability of build scripts

    - drop always-enabled CONFIG_THIN_ARCHIVE and remove unused code

    - rename built-in.o which is now thin archive to built-in.a

    - process clean/build targets one by one to get along with -j option

    - simplify ld-option

    - improve building with CONFIG_TRIM_UNUSED_KSYMS

    - define KBUILD_MODNAME even for objects shared among multiple modules

    - avoid linking multiple instances of same objects from composite
    objects

    - move to c_flags to include it only for C
    files

    - clean-up various Makefiles

    * tag 'kbuild-v4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (29 commits)
    kbuild: get out of
    kbuild: clean up link rule of composite modules
    kbuild: clean up archive rule of built-in.a
    kbuild: remove partial section mismatch detection for built-in.a
    net: liquidio: clean up Makefile for simpler composite object handling
    lib: zstd: clean up Makefile for simpler composite object handling
    kbuild: link $(real-obj-y) instead of $(obj-y) into built-in.a
    kbuild: rename real-objs-y/m to real-obj-y/m
    kbuild: move modname and modname-multi close to modname_flags
    kbuild: simplify modname calculation
    kbuild: fix modname for composite modules
    kbuild: define KBUILD_MODNAME even if multiple modules share objects
    kbuild: remove unnecessary $(subst $(obj)/, , ...) in modname-multi
    kbuild: Use ls(1) instead of stat(1) to obtain file size
    kbuild: link vmlinux only once for CONFIG_TRIM_UNUSED_KSYMS
    kbuild: move include/config/ksym/* to include/ksym/*
    kbuild: move CONFIG_TRIM_UNUSED_KSYMS code unneeded for external module
    kbuild: restore autoksyms.h touch to the top Makefile
    kbuild: move 'scripts' target below
    kbuild: remove wrong 'touch' in adjust_autoksyms.sh
    ...

    Linus Torvalds
     

03 Apr, 2018

2 commits

  • Pul removal of obsolete architecture ports from Arnd Bergmann:
    "This removes the entire architecture code for blackfin, cris, frv,
    m32r, metag, mn10300, score, and tile, including the associated device
    drivers.

    I have been working with the (former) maintainers for each one to
    ensure that my interpretation was right and the code is definitely
    unused in mainline kernels. Many had fond memories of working on the
    respective ports to start with and getting them included in upstream,
    but also saw no point in keeping the port alive without any users.

    In the end, it seems that while the eight architectures are extremely
    different, they all suffered the same fate: There was one company in
    charge of an SoC line, a CPU microarchitecture and a software
    ecosystem, which was more costly than licensing newer off-the-shelf
    CPU cores from a third party (typically ARM, MIPS, or RISC-V). It
    seems that all the SoC product lines are still around, but have not
    used the custom CPU architectures for several years at this point. In
    contrast, CPU instruction sets that remain popular and have actively
    maintained kernel ports tend to all be used across multiple licensees.

    [ See the new nds32 port merged in the previous commit for the next
    generation of "one company in charge of an SoC line, a CPU
    microarchitecture and a software ecosystem" - Linus ]

    The removal came out of a discussion that is now documented at
    https://lwn.net/Articles/748074/. Unlike the original plans, I'm not
    marking any ports as deprecated but remove them all at once after I
    made sure that they are all unused. Some architectures (notably tile,
    mn10300, and blackfin) are still being shipped in products with old
    kernels, but those products will never be updated to newer kernel
    releases.

    After this series, we still have a few architectures without mainline
    gcc support:

    - unicore32 and hexagon both have very outdated gcc releases, but the
    maintainers promised to work on providing something newer. At least
    in case of hexagon, this will only be llvm, not gcc.

    - openrisc, risc-v and nds32 are still in the process of finishing
    their support or getting it added to mainline gcc in the first
    place. They all have patched gcc-7.3 ports that work to some
    degree, but complete upstream support won't happen before gcc-8.1.
    Csky posted their first kernel patch set last week, their situation
    will be similar

    [ Palmer Dabbelt points out that RISC-V support is in mainline gcc
    since gcc-7, although gcc-7.3.0 is the recommended minimum - Linus ]"

    This really says it all:

    2498 files changed, 95 insertions(+), 467668 deletions(-)

    * tag 'arch-removal' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (74 commits)
    MAINTAINERS: UNICORE32: Change email account
    staging: iio: remove iio-trig-bfin-timer driver
    tty: hvc: remove tile driver
    tty: remove bfin_jtag_comm and hvc_bfin_jtag drivers
    serial: remove tile uart driver
    serial: remove m32r_sio driver
    serial: remove blackfin drivers
    serial: remove cris/etrax uart drivers
    usb: Remove Blackfin references in USB support
    usb: isp1362: remove blackfin arch glue
    usb: musb: remove blackfin port
    usb: host: remove tilegx platform glue
    pwm: remove pwm-bfin driver
    i2c: remove bfin-twi driver
    spi: remove blackfin related host drivers
    watchdog: remove bfin_wdt driver
    can: remove bfin_can driver
    mmc: remove bfin_sdh driver
    input: misc: remove blackfin rotary driver
    input: keyboard: remove bf54x driver
    ...

    Linus Torvalds
     
  • Pull x86 build updates from Ingo Molnar:
    "The biggest change is the forcing of asm-goto support on x86, which
    effectively increases the GCC minimum supported version to gcc-4.5 (on
    x86)"

    * 'x86-build-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/build: Don't pass in -D__KERNEL__ multiple times
    x86: Remove FAST_FEATURE_TESTS
    x86: Force asm-goto
    x86/build: Drop superfluous ALIGN from the linker script

    Linus Torvalds
     

02 Apr, 2018

1 commit


31 Mar, 2018

1 commit

  • …t/masahiroy/linux-kbuild

    Pull Kbuild fixes from Masahiro Yamada:

    - fix missed rebuild of TRIM_UNUSED_KSYMS

    - fix rpm-pkg for GNU tar >= 1.29

    - include scripts/dtc/include-prefixes/* to kernel header deb-pkg

    - add -no-integrated-as option ealier to fix building with Clang

    - fix netfilter Makefile for parallel building

    * tag 'kbuild-fixes-v4.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    netfilter: nf_nat_snmp_basic: add correct dependency to Makefile
    kbuild: rpm-pkg: Support GNU tar >= 1.29
    builddeb: Fix header package regarding dtc source links
    kbuild: set no-integrated-as before incl. arch Makefile
    kbuild: make scripts/adjust_autoksyms.sh robust against timestamp races

    Linus Torvalds
     

26 Mar, 2018

11 commits

  • Linus Torvalds
     
  • The variable 'PYTHON' allows users to specify a proper executable
    name in case the default 'python' does not work. However, this does
    not address the case where both Python 2.x and 3.x scripts are used
    in one source tree.

    PEP 394 (https://www.python.org/dev/peps/pep-0394/) provides a
    convention for Python scripts portability. Here is a quotation:

    In order to tolerate differences across platforms, all new code
    that needs to invoke the Python interpreter should not specify
    'python', but rather should specify either 'python2' or 'python3'.
    This distinction should be made in shebangs, when invoking from a
    shell script, when invoking via the system() call, or when invoking
    in any other context.
    One exception to this is scripts that are deliberately written to
    be source compatible with both Python 2.x and 3.x. Such scripts may
    continue to use python on their shebang line without affecting their
    portability.

    To meet this requirement, this commit adds new variables 'PYTHON2'
    and 'PYTHON3'.

    arch/ia64/scripts/unwcheck.py is the only script that has ever used
    $(PYTHON). Recent commit bd5edbe67794 ("ia64: convert unwcheck.py to
    python3") converted it to be compatible with both Python 2.x and 3.x,
    so this is the exceptional case where the use of 'python' is allowed.
    So, I did not touch arch/ia64/Makefile.

    tools/perf/Makefile.config sets PYTHON and PYTHON2 by itself, so it
    is not affected by this commit.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • As commit cedd55d49dee ("kconfig: Remove silentoldconfig from help
    and docs; fix kconfig/conf's help") mentioned, 'silentoldconfig' is a
    historical misnomer. That commit removed it from help and docs since
    it is an internal interface. If so, it should be allowed to rename
    it to something more intuitive. 'syncconfig' is the one I came up
    with because it updates the .config if necessary, then synchronize
    include/generated/autoconf.h and include/config/* with it.

    You should not manually invoke 'silentoldcofig'. Display warning if
    used in case existing scripts are doing wrong.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Ulf Magnusson

    Masahiro Yamada
     
  • If CONFIG_TRIM_UNUSED_KSYMS is enabled and the kernel is built from
    a pristine state, the vmlinux is linked twice.

    [1] A user runs 'make'

    [2] First build with empty autoksyms.h

    [3] adjust_autoksyms.sh updates autoksyms.h and recurses 'make vmlinux'

    --------(begin sub-make)--------
    [4] Second build with new autoksyms.h

    [5] link-vmlinux.sh is invoked because vmlinux is missing
    ---------(end sub-make)---------

    [6] link-vmlinux.sh is invoked again despite vmlinux is up-to-date.

    The reason of [6] is probably because Make already decided to update
    vmlinux at the time of [2] because vmlinux was missing when Make
    built up the dependency graph.

    Because if_changed is implemented based on $?, this issue can be
    narrowed down to how Make handles $?.

    You can test it with the following simple code:

    [Test Makefile]
    A: B
    @echo newer prerequisite: $?
    cp B A

    B: C
    cp C B
    touch A

    [Result]
    $ rm -f A B
    $ touch C
    $ make
    cp C B
    touch A
    newer prerequisite: B
    cp B A

    Here, 'A' has been touched in the recipe of 'B'. So, the dependency
    'A: B' has already been met before the recipe of 'A' is executed.
    However, Make does not notice the fact that the recipe of 'B' also
    updates 'A' as a side-effect.

    The situation is similar in this case; the vmlinux has actually been
    updated in the vmlinux_prereq target. Make cannot predict this, so
    judges the vmlinux is old.

    link-vmlinux.sh is costly, so it is better to not run it when unneeded.
    Split CONFIG_TRIM_UNUSED_KSYMS recursion to a dedicated target.

    The reason of commit 2441e78b1919 ("kbuild: better abstract vmlinux
    sequential prerequisites") was to cater to CONFIG_BUILD_DOCSRC, but
    it was later removed by commit 184892925118 ("samples: move blackfin
    gptimers-example from Documentation").

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • The idea of using fixdep was inspired by Kconfig, but autoksyms
    belongs to a different group. So, I want to move those touched
    files under include/config/ksym/ to include/ksym/.

    The directory include/ksym/ can be removed by 'make clean' because
    it is meaningless for the external module building.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • The external module building does not need to parse this code because
    KBUILD_MODULES is always set anyway.

    Move this code inside the "ifeq ($(KBUILD_EXTMOD),) ... endif" block.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • Commit d3fc425e819b ("kbuild: make sure autoksyms.h exists early")
    moved the code that touches autoksyms.h to scripts/kconfig/Makefile
    with obscure reason.

    From Nicolas' comment [1], he did not seem to be sure about the root
    cause.

    I guess I figured it out, so here is a fix-up I think is more correct.
    According to the error log in the original post [2], the build failed
    in scripts/mod/devicetable-offsets.c

    scripts/mod/Makefile is descended from scripts/Makefile, which is
    invoked from the top-level Makefile by the 'scripts' target.

    To build vmlinux and/or modules, Kbuild descend into $(vmlinux-dirs).
    This depends on 'prepare' and 'scripts' as follows:

    $(vmlinux-dirs): prepare scripts

    Because there is no dependency between 'prepare' and 'scripts', the
    parallel building can execute them simultaneously.

    'prepare' depends on 'prepare1', which touched autoksyms.h, while
    'scripts' descends into script/, then scripts/mod/, which needs
    if CONFIG_TRIM_UNUSED_KSYMS. It was the
    reason of the race.

    I am not happy to have unrelated code in the Kconfig Makefile, so
    getting it back to the top Makefile.

    I removed the standalone test target because I want to use it to
    create an empty autoksyms.h file. Here is a little improvement;
    unnecessary autoksyms.h is not created when CONFIG_TRIM_UNUSED_KSYMS
    is disabled.

    [1] https://lkml.org/lkml/2016/11/30/734
    [2] https://lkml.org/lkml/2016/11/30/531

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • Just a trivial change to prepare for the next commit.
    This target is still invisible from external module building.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Currently LDFLAGS is not cleared, so same flags are accumulated in
    LDFLAGS when the top Makefile is recursively invoked.

    I found unneeded rebuild for ARCH=arm64 when CONFIG_TRIM_UNUSED_KSYMS
    is enabled. If include/generated/autoksyms.h is updated, the top
    Makefile is recursively invoked, then arch/arm64/Makefile adds one
    more '-maarch64linux'. Due to the command line change, modules are
    rebuilt needlessly.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • Support parallel building of clean, config, and build targets in a
    single command.

    For example,

    make -j clean all

    or

    make -j mrproper defconfig all

    They should be handled one by one.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Incremental linking is gone, so rename built-in.o to built-in.a, which
    is the usual extension for archive files.

    This patch does two things, first is a simple search/replace:

    git grep -l 'built-in\.o' | xargs sed -i 's/built-in\.o/built-in\.a/g'

    The second is to invert nesting of nested text manipulations to avoid
    filtering built-in.a out from libs-y2:

    -libs-y2 := $(filter-out %.a, $(patsubst %/, %/built-in.a, $(libs-y)))
    +libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Masahiro Yamada

    Nicholas Piggin
     

23 Mar, 2018

1 commit

  • Pull networking fixes from David Miller:

    1) Always validate XFRM esn replay attribute, from Florian Westphal.

    2) Fix RCU read lock imbalance in xfrm_get_tos(), from Xin Long.

    3) Don't try to get firmware dump if not loaded in iwlwifi, from Shaul
    Triebitz.

    4) Fix BPF helpers to deal with SCTP GSO SKBs properly, from Daniel
    Axtens.

    5) Fix some interrupt handling issues in e1000e driver, from Benjamin
    Poitier.

    6) Use strlcpy() in several ethtool get_strings methods, from Florian
    Fainelli.

    7) Fix rhlist dup insertion, from Paul Blakey.

    8) Fix SKB leak in netem packet scheduler, from Alexey Kodanev.

    9) Fix driver unload crash when link is up in smsc911x, from Jeremy
    Linton.

    10) Purge out invalid socket types in l2tp_tunnel_create(), from Eric
    Dumazet.

    11) Need to purge the write queue when TCP connections are aborted,
    otherwise userspace using MSG_ZEROCOPY can't close the fd. From
    Soheil Hassas Yeganeh.

    12) Fix double free in error path of team driver, from Arkadi
    Sharshevsky.

    13) Filter fixes for hv_netvsc driver, from Stephen Hemminger.

    14) Fix non-linear packet access in ipv6 ndisc code, from Lorenzo
    Bianconi.

    15) Properly filter out unsupported feature flags in macvlan driver,
    from Shannon Nelson.

    16) Don't request loading the diag module for a protocol if the protocol
    itself is not even registered. From Xin Long.

    17) If datagram connect fails in ipv6, make sure the socket state is
    consistent afterwards. From Paolo Abeni.

    18) Use after free in qed driver, from Dan Carpenter.

    19) If received ipv4 PMTU is less than the min pmtu, lock the mtu in the
    entry. From Sabrina Dubroca.

    20) Fix sleep in atomic in tg3 driver, from Jonathan Toppins.

    21) Fix vlan in vlan untagging in some situations, from Toshiaki Makita.

    22) Fix double SKB free in genlmsg_mcast(). From Nicolas Dichtel.

    23) Fix NULL derefs in error paths of tcf_*_init(), from Davide Caratti.

    24) Unbalanced PM runtime calls in FEC driver, from Florian Fainelli.

    25) Memory leak in gemini driver, from Igor Pylypiv.

    26) IDR leaks in error paths of tcf_*_init() functions, from Davide
    Caratti.

    27) Need to use GFP_ATOMIC in seg6_build_state(), from David Lebrun.

    28) Missing dev_put() in error path of macsec_newlink(), from Dan
    Carpenter.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (201 commits)
    macsec: missing dev_put() on error in macsec_newlink()
    net: dsa: Fix functional dsa-loop dependency on FIXED_PHY
    hv_netvsc: common detach logic
    hv_netvsc: change GPAD teardown order on older versions
    hv_netvsc: use RCU to fix concurrent rx and queue changes
    hv_netvsc: disable NAPI before channel close
    net/ipv6: Handle onlink flag with multipath routes
    ppp: avoid loop in xmit recursion detection code
    ipv6: sr: fix NULL pointer dereference when setting encap source address
    ipv6: sr: fix scheduling in RCU when creating seg6 lwtunnel state
    net: aquantia: driver version bump
    net: aquantia: Implement pci shutdown callback
    net: aquantia: Allow live mac address changes
    net: aquantia: Add tx clean budget and valid budget handling logic
    net: aquantia: Change inefficient wait loop on fw data reads
    net: aquantia: Fix a regression with reset on old firmware
    net: aquantia: Fix hardware reset when SPI may rarely hangup
    s390/qeth: on channel error, reject further cmd requests
    s390/qeth: lock read device while queueing next buffer
    s390/qeth: when thread completes, wake up all waiters
    ...

    Linus Torvalds
     

21 Mar, 2018

2 commits

  • In order to make sure compiler flag detection for ARM works
    correctly the no-integrated-as flags need to be set before
    including the arch specific Makefile.

    Fixes: cfe17c9bbe6a ("kbuild: move cc-option and cc-disable-warning after incl. arch Makefile")
    Signed-off-by: Stefan Agner
    Signed-off-by: Masahiro Yamada

    Stefan Agner
     
  • Prasad reported that he has seen crashes in BPF subsystem with netd
    on Android with arm64 in the form of (note, the taint is unrelated):

    [ 4134.721483] Unable to handle kernel paging request at virtual address 800000001
    [ 4134.820925] Mem abort info:
    [ 4134.901283] Exception class = DABT (current EL), IL = 32 bits
    [ 4135.016736] SET = 0, FnV = 0
    [ 4135.119820] EA = 0, S1PTW = 0
    [ 4135.201431] Data abort info:
    [ 4135.301388] ISV = 0, ISS = 0x00000021
    [ 4135.359599] CM = 0, WnR = 0
    [ 4135.470873] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffe39b946000
    [ 4135.499757] [0000000800000001] *pgd=0000000000000000, *pud=0000000000000000
    [ 4135.660725] Internal error: Oops: 96000021 [#1] PREEMPT SMP
    [ 4135.674610] Modules linked in:
    [ 4135.682883] CPU: 5 PID: 1260 Comm: netd Tainted: G S W 4.14.19+ #1
    [ 4135.716188] task: ffffffe39f4aa380 task.stack: ffffff801d4e0000
    [ 4135.731599] PC is at bpf_prog_add+0x20/0x68
    [ 4135.741746] LR is at bpf_prog_inc+0x20/0x2c
    [ 4135.751788] pc : [] lr : [] pstate: 60400145
    [ 4135.769062] sp : ffffff801d4e3ce0
    [...]
    [ 4136.258315] Process netd (pid: 1260, stack limit = 0xffffff801d4e0000)
    [ 4136.273746] Call trace:
    [...]
    [ 4136.442494] 3ca0: ffffff94ab7ad584 0000000060400145 ffffffe3a01bf8f8 0000000000000006
    [ 4136.460936] 3cc0: 0000008000000000 ffffff94ab844204 ffffff801d4e3cf0 ffffff94ab7ad584
    [ 4136.479241] [] bpf_prog_add+0x20/0x68
    [ 4136.491767] [] bpf_prog_inc+0x20/0x2c
    [ 4136.504536] [] bpf_obj_get_user+0x204/0x22c
    [ 4136.518746] [] SyS_bpf+0x5a8/0x1a88

    Android's netd was basically pinning the uid cookie BPF map in BPF
    fs (/sys/fs/bpf/traffic_cookie_uid_map) and later on retrieving it
    again resulting in above panic. Issue is that the map was wrongly
    identified as a prog! Above kernel was compiled with clang 4.0,
    and it turns out that clang decided to merge the bpf_prog_iops and
    bpf_map_iops into a single memory location, such that the two i_ops
    could then not be distinguished anymore.

    Reason for this miscompilation is that clang has the more aggressive
    -fmerge-all-constants enabled by default. In fact, clang source code
    has a comment about it in lib/AST/ExprConstant.cpp on why it is okay
    to do so:

    Pointers with different bases cannot represent the same object.
    (Note that clang defaults to -fmerge-all-constants, which can
    lead to inconsistent results for comparisons involving the address
    of a constant; this generally doesn't matter in practice.)

    The issue never appeared with gcc however, since gcc does not enable
    -fmerge-all-constants by default and even *explicitly* states in
    it's option description that using this flag results in non-conforming
    behavior, quote from man gcc:

    Languages like C or C++ require each variable, including multiple
    instances of the same variable in recursive calls, to have distinct
    locations, so using this option results in non-conforming behavior.

    There are also various clang bug reports open on that matter [1],
    where clang developers acknowledge the non-conforming behavior,
    and refer to disabling it with -fno-merge-all-constants. But even
    if this gets fixed in clang today, there are already users out there
    that triggered this. Thus, fix this issue by explicitly adding
    -fno-merge-all-constants to the kernel's Makefile to generically
    disable this optimization, since potentially other places in the
    kernel could subtly break as well.

    Note, there is also a flag called -fmerge-constants (not supported
    by clang), which is more conservative and only applies to strings
    and it's enabled in gcc's -O/-O2/-O3/-Os optimization levels. In
    gcc's code, the two flags -fmerge-{all-,}constants share the same
    variable internally, so when disabling it via -fno-merge-all-constants,
    then we really don't merge any const data (e.g. strings), and text
    size increases with gcc (14,927,214 -> 14,942,646 for vmlinux.o).

    $ gcc -fverbose-asm -O2 foo.c -S -o foo.S
    -> foo.S lists -fmerge-constants under options enabled
    $ gcc -fverbose-asm -O2 -fno-merge-all-constants foo.c -S -o foo.S
    -> foo.S doesn't list -fmerge-constants under options enabled
    $ gcc -fverbose-asm -O2 -fno-merge-all-constants -fmerge-constants foo.c -S -o foo.S
    -> foo.S lists -fmerge-constants under options enabled

    Thus, as a workaround we need to set both -fno-merge-all-constants
    *and* -fmerge-constants in the Makefile in order for text size to
    stay as is.

    [1] https://bugs.llvm.org/show_bug.cgi?id=18538

    Reported-by: Prasad Sodagudi
    Signed-off-by: Daniel Borkmann
    Cc: Linus Torvalds
    Cc: Chenbo Feng
    Cc: Richard Smith
    Cc: Chandler Carruth
    Cc: linux-kernel@vger.kernel.org
    Tested-by: Prasad Sodagudi
    Acked-by: Alexei Starovoitov
    Signed-off-by: Alexei Starovoitov

    Daniel Borkmann
     

20 Mar, 2018

1 commit

  • We want to start using asm-goto to guarantee the absence of dynamic
    branches (and thus speculation).

    A primary prerequisite for this is of course that the compiler
    supports asm-goto. This effecively lifts the minimum GCC version to
    build an x86 kernel to gcc-4.5.

    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Thomas Gleixner
    Cc: torvalds@linux-foundation.org
    Link: https://lkml.kernel.org/r/20180319201327.GJ4043@hirez.programming.kicks-ass.net

    Peter Zijlstra
     

19 Mar, 2018

1 commit


16 Mar, 2018

1 commit

  • The Tile architecture port was added by Chris Metcalf in 2010, and
    maintained until early 2018 when he orphaned it due to his departure
    from Mellanox, and nobody else stepped up to maintain it. The product
    line is still around in the form of the BlueField SoC, but no longer
    uses the Tile architecture.

    There are also still products for sale with Tile-GX SoCs, notably the
    Mikrotik CCR router family. The products all use old (linux-3.3) kernels
    with lots of patches and won't be upgraded by their manufacturers. There
    have been efforts to port both OpenWRT and Debian to these, but both
    projects have stalled and are very unlikely to be continued in the future.

    Given that we are reasonably sure that nobody is still using the port
    with an upstream kernel any more, it seems better to remove it now while
    the port is in a good shape than to let it bitrot for a few years first.

    Cc: Chris Metcalf
    Cc: John Paul Adrian Glaubitz
    Link: http://www.mellanox.com/page/npu_multicore_overview
    Link: https://jenkins.debian.net/view/rebootstrap/job/rebootstrap_tilegx_gcc7/
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

12 Mar, 2018

1 commit


05 Mar, 2018

1 commit


04 Mar, 2018

1 commit

  • …masahiroy/linux-kbuild

    Pull Kbuild fixes from Masahiro Yamada:

    - suppress sparse warnings about unknown attributes

    - fix typos and stale comments

    - fix build error of arch/sh

    - fix wrong use of ld-option vs cc-ldoption

    - remove redundant GCC_PLUGINS_CFLAGS assignment

    - fix another memory leak of Kconfig

    - fix line number in error messages of Kconfig

    - do not write confusing CONFIG_DEFCONFIG_LIST out to .config

    - add xstrdup() to Kconfig to handle memory shortage errors

    - show also a Debian package name if ncurses is missing

    * tag 'kbuild-fixes-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    MAINTAINERS: take over Kconfig maintainership
    kconfig: fix line number in recursive inclusion error message
    Coccinelle: memdup: Fix typo in warning messages
    kconfig: Update ncurses package names for menuconfig
    kbuild/kallsyms: trivial typo fix
    kbuild: test --build-id linker flag by ld-option instead of cc-ldoption
    kbuild: drop superfluous GCC_PLUGINS_CFLAGS assignment
    kconfig: Don't leak choice names during parsing
    sh: fix build error for empty CONFIG_BUILTIN_DTB_SOURCE
    kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list
    kconfig: add xstrdup() helper
    kbuild: disable sparse warnings about unknown attributes
    Makefile: Fix lying comment re. silentoldconfig

    Linus Torvalds
     

02 Mar, 2018

1 commit

  • '--build-id' is passed to $(LD), so it should be tested by 'ld-option'.

    This seems a kind of misconversion when ld-option was renamed to
    cc-ldoption.

    Commit f86fd3066052 ("kbuild: rename ld-option to cc-ldoption") renamed
    all instances of 'ld-option' to 'cc-ldoption'.

    Then, commit 691ef3e7fdc1 ("kbuild: introduce ld-option") re-added
    'ld-option' as a new implementation.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

01 Mar, 2018

2 commits

  • Currently, sparse issues warnings on code using an attribute
    it doesn't know about.

    One of the problem with this is that these warnings have no
    value for the developer, it's just noise for him. At best these
    warnings tell something about some deficiencies of sparse itself
    but not about a potential problem with code analyzed.

    A second problem with this is that sparse release are, alas,
    less frequent than new attributes are added to GCC.

    So, avoid the noise by asking sparse to not warn about
    attributes it doesn't know about.

    Reference: https://marc.info/?l=linux-sparse&m=151871600016790
    Reference: https://marc.info/?l=linux-sparse&m=151871725417322
    Signed-off-by: Luc Van Oostenryck
    Acked-by: Randy Dunlap
    Tested-by: Randy Dunlap
    Signed-off-by: Masahiro Yamada

    Luc Van Oostenryck
     
  • The comment above the silentoldconfig invocation is outdated.
    'make oldconfig' updates just .config and doesn't touch the
    include/config/ tree.

    This came up in https://lkml.org/lkml/2018/2/12/415.

    While fixing the comment, make it more informative by explaining the
    purpose of the unfortunately named silentoldconfig.

    I can't make sense of the comment re. auto.conf.cmd and a cleaned tree.
    include/config/auto.conf and include/config/auto.conf.cmd are both
    created simultaneously by silentoldconfig (in
    scripts/kconfig/confdata.c, by conf_write_autoconf()), and nothing seems
    to remove auto.conf.cmd that wouldn't remove auto.conf. Remove that part
    of the comment rather than blindly copying it. It might be a leftover
    from an older way of doing things.

    The include/config/auto.conf.cmd prerequisite might be there to ensure
    that silentoldconfig gets rerun if conf_write_autoconf() fails between
    writing out auto.conf.cmd and auto.conf (a comment in the function
    indicates that auto.conf is deliberately written out last to mark
    completion of the operation). It seems the Makefile dependency between
    include/config/auto.conf and .config would already take care of that
    though, since include/config/auto.conf would still be out of date re.
    .config if the operation fails.

    Cop out and leave the prerequisite in for now.

    Signed-off-by: Ulf Magnusson
    Signed-off-by: Masahiro Yamada

    Ulf Magnusson
     

27 Feb, 2018

1 commit

  • Pull x86 fixes from Thomas Gleixner:
    "Yet another pile of melted spectrum related changes:

    - sanitize the array_index_nospec protection mechanism: Remove the
    overengineered array_index_nospec_mask_check() magic and allow
    const-qualified types as index to avoid temporary storage in a
    non-const local variable.

    - make the microcode loader more robust by properly propagating error
    codes. Provide information about new feature bits after micro code
    was updated so administrators can act upon.

    - optimizations of the entry ASM code which reduce code footprint and
    make the code simpler and faster.

    - fix the {pmd,pud}_{set,clear}_flags() implementations to work
    properly on paravirt kernels by removing the address translation
    operations.

    - revert the harmful vmexit_fill_RSB() optimization

    - use IBRS around firmware calls

    - teach objtool about retpolines and add annotations for indirect
    jumps and calls.

    - explicitly disable jumplabel patching in __init code and handle
    patching failures properly instead of silently ignoring them.

    - remove indirect paravirt calls for writing the speculation control
    MSR as these calls are obviously proving the same attack vector
    which is tried to be mitigated.

    - a few small fixes which address build issues with recent compiler
    and assembler versions"

    * 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (38 commits)
    KVM/VMX: Optimize vmx_vcpu_run() and svm_vcpu_run() by marking the RDMSR path as unlikely()
    KVM/x86: Remove indirect MSR op calls from SPEC_CTRL
    objtool, retpolines: Integrate objtool with retpoline support more closely
    x86/entry/64: Simplify ENCODE_FRAME_POINTER
    extable: Make init_kernel_text() global
    jump_label: Warn on failed jump_label patching attempt
    jump_label: Explicitly disable jump labels in __init code
    x86/entry/64: Open-code switch_to_thread_stack()
    x86/entry/64: Move ASM_CLAC to interrupt_entry()
    x86/entry/64: Remove 'interrupt' macro
    x86/entry/64: Move the switch_to_thread_stack() call to interrupt_entry()
    x86/entry/64: Move ENTER_IRQ_STACK from interrupt macro to interrupt_entry
    x86/entry/64: Move PUSH_AND_CLEAR_REGS from interrupt macro to helper function
    x86/speculation: Move firmware_restrict_branch_speculation_*() from C to CPP
    objtool: Add module specific retpoline rules
    objtool: Add retpoline validation
    objtool: Use existing global variables for options
    x86/mm/sme, objtool: Annotate indirect call in sme_encrypt_execute()
    x86/boot, objtool: Annotate indirect jump in secondary_startup_64()
    x86/paravirt, objtool: Annotate indirect calls
    ...

    Linus Torvalds
     

26 Feb, 2018

1 commit


21 Feb, 2018

1 commit

  • Disable retpoline validation in objtool if your compiler sucks, and otherwise
    select the validation stuff for CONFIG_RETPOLINE=y (most builds would already
    have it set due to ORC).

    Signed-off-by: Peter Zijlstra (Intel)
    Acked-by: Thomas Gleixner
    Cc: Andy Lutomirski
    Cc: Arjan van de Ven
    Cc: Borislav Petkov
    Cc: Dan Williams
    Cc: Dave Hansen
    Cc: David Woodhouse
    Cc: Greg Kroah-Hartman
    Cc: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

19 Feb, 2018

1 commit


12 Feb, 2018

1 commit


10 Feb, 2018

1 commit

  • Pull more Kbuild updates from Masahiro Yamada:
    "Makefile changes:
    - enable unused-variable warning that was wrongly disabled for clang

    Kconfig changes:
    - warn about blank 'help' and fix existing instances
    - fix 'choice' behavior to not write out invisible symbols
    - fix misc weirdness

    Coccinell changes:
    - fix false positive of free after managed memory alloc detection
    - improve performance of NULL dereference detection"

    * tag 'kbuild-v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (21 commits)
    kconfig: remove const qualifier from sym_expand_string_value()
    kconfig: add xrealloc() helper
    kconfig: send error messages to stderr
    kconfig: echo stdin to stdout if either is redirected
    kconfig: remove check_stdin()
    kconfig: remove 'config*' pattern from .gitignnore
    kconfig: show '?' prompt even if no help text is available
    kconfig: do not write choice values when their dependency becomes n
    coccinelle: deref_null: avoid useless computation
    coccinelle: devm_free: reduce false positives
    kbuild: clang: disable unused variable warnings only when constant
    kconfig: Warn if help text is blank
    nios2: kconfig: Remove blank help text
    arm: vt8500: kconfig: Remove blank help text
    MIPS: kconfig: Remove blank help text
    MIPS: BCM63XX: kconfig: Remove blank help text
    lib/Kconfig.debug: Remove blank help text
    Staging: rtl8192e: kconfig: Remove blank help text
    Staging: rtl8192u: kconfig: Remove blank help text
    mmc: kconfig: Remove blank help text
    ...

    Linus Torvalds
     

07 Feb, 2018

5 commits

  • Nearly all modern compilers support a stack-protector option, and nearly
    all modern distributions enable the kernel stack-protector, so enabling
    this by default in kernel builds would make sense. However, Kconfig does
    not have knowledge of available compiler features, so it isn't safe to
    force on, as this would unconditionally break builds for the compilers or
    architectures that don't have support. Instead, this introduces a new
    option, CONFIG_CC_STACKPROTECTOR_AUTO, which attempts to discover the best
    possible stack-protector available, and will allow builds to proceed even
    if the compiler doesn't support any stack-protector.

    This option is made the default so that kernels built with modern
    compilers will be protected-by-default against stack buffer overflows,
    avoiding things like the recent BlueBorne attack. Selection of a specific
    stack-protector option remains available, including disabling it.

    Additionally, tiny.config is adjusted to use CC_STACKPROTECTOR_NONE, since
    that's the option with the least code size (and it used to be the default,
    so we have to explicitly choose it there now).

    Link: http://lkml.kernel.org/r/1510076320-69931-4-git-send-email-keescook@chromium.org
    Signed-off-by: Kees Cook
    Tested-by: Laura Abbott
    Cc: Masahiro Yamada
    Cc: Arnd Bergmann
    Cc: Josh Triplett
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kees Cook
     
  • Various portions of the kernel, especially per-architecture pieces,
    need to know if the compiler is building with the stack protector.
    This was done in the arch/Kconfig with 'select', but this doesn't
    allow a way to do auto-detected compiler support. In preparation for
    creating an on-if-available default, move the logic for the definition of
    CONFIG_CC_STACKPROTECTOR into the Makefile.

    Link: http://lkml.kernel.org/r/1510076320-69931-3-git-send-email-keescook@chromium.org
    Signed-off-by: Kees Cook
    Tested-by: Laura Abbott
    Cc: Masahiro Yamada
    Cc: Arnd Bergmann
    Cc: Josh Triplett
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kees Cook
     
  • In order to make stack-protector failures warn instead of unconditionally
    breaking the build, this moves the compiler output sanity-check earlier,
    and sets a flag for later testing. Future patches can choose to warn or
    fail, depending on the flag value.

    Link: http://lkml.kernel.org/r/1510076320-69931-2-git-send-email-keescook@chromium.org
    Signed-off-by: Kees Cook
    Tested-by: Laura Abbott
    Cc: Masahiro Yamada
    Cc: Arnd Bergmann
    Cc: Josh Triplett
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kees Cook
     
  • With KASAN enabled the kernel has two different memset() functions, one
    with KASAN checks (memset) and one without (__memset). KASAN uses some
    macro tricks to use the proper version where required. For example
    memset() calls in mm/slub.c are without KASAN checks, since they operate
    on poisoned slab object metadata.

    The issue is that clang emits memset() calls even when there is no
    memset() in the source code. They get linked with improper memset()
    implementation and the kernel fails to boot due to a huge amount of KASAN
    reports during early boot stages.

    The solution is to add -fno-builtin flag for files with KASAN_SANITIZE :=
    n marker.

    Link: http://lkml.kernel.org/r/8ffecfffe04088c52c42b92739c2bd8a0bcb3f5e.1516384594.git.andreyknvl@google.com
    Signed-off-by: Andrey Konovalov
    Acked-by: Nick Desaulniers
    Cc: Masahiro Yamada
    Cc: Michal Marek
    Cc: Andrey Ryabinin
    Cc: Alexander Potapenko
    Cc: Dmitry Vyukov
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrey Konovalov
     
  • Currently, GCC disables -Wunused-const-variable, but not
    -Wunused-variable, so warns unused variables if they are
    non-constant.

    While, Clang does not warn unused variables at all regardless of
    the const qualifier because -Wno-unused-const-variable is implied
    by the stronger option -Wno-unused-variable.

    Disable -Wunused-const-variable instead of -Wunused-variable so that
    GCC and Clang work in the same way.

    Signed-off-by: Prasad Sodagudi
    Signed-off-by: Masahiro Yamada

    Sodagudi Prasad