Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  1. Mar 30, 2022
  2. Feb 17, 2022
  3. Feb 13, 2022
  4. Jan 27, 2022
  5. Jan 22, 2022
  6. Jan 13, 2022
    • Masahiro Yamada's avatar
      kbuild: rename cmd_{bzip2,lzma,lzo,lz4,xzkern,zstd22} · 7ce7e984
      Masahiro Yamada authored
      GZIP-compressed files end with 4 byte data that represents the size
      of the original input. The decompressors (the self-extracting kernel)
      exploit it to know the vmlinux size beforehand. To mimic the GZIP's
      trailer, Kbuild provides cmd_{bzip2,lzma,lzo,lz4,xzkern,zstd22}.
      Unfortunately these macros are used everywhere despite the appended
      size data is only useful for the decompressors.
      
      There is no guarantee that such hand-crafted trailers are safely ignored.
      In fact, the kernel refuses compressed initramdfs with the garbage data.
      That is why usr/Makefile overrides size_append to make it no-op.
      
      To limit the use of such broken compressed files, this commit renames
      the existing macros as follows:
      
        cmd_bzip2   --> cmd_bzip2_with_size
        cmd_lzma    --> cmd_lzma_with_size
        cmd_lzo     --> cmd_lzo_with_size
        cmd_lz4     --> cmd_lz4_with_size
        cmd_xzkern  --> cmd_xzkern_with_size
        cmd_zstd22  --> cmd_zstd22_with_size
      
      To keep the decompressors working, I...
      7ce7e984
  7. Jan 08, 2022
    • Masahiro Yamada's avatar
      kbuild: do not quote string values in include/config/auto.conf · 129ab0d2
      Masahiro Yamada authored
      The previous commit fixed up all shell scripts to not include
      include/config/auto.conf.
      
      Now that include/config/auto.conf is only included by Makefiles,
      we can change it into a more Make-friendly form.
      
      Previously, Kconfig output string values enclosed with double-quotes
      (both in the .config and include/config/auto.conf):
      
          CONFIG_X="foo bar"
      
      Unlike shell, Make handles double-quotes (and single-quotes as well)
      verbatim. We must rip them off when used.
      
      There are some patterns:
      
        [1] $(patsubst "%",%,$(CONFIG_X))
        [2] $(CONFIG_X:"%"=%)
        [3] $(subst ",,$(CONFIG_X))
        [4] $(shell echo $(CONFIG_X))
      
      These are not only ugly, but also fragile.
      
      [1] and [2] do not work if the value contains spaces, like
         CONFIG_X=" foo bar "
      
      [3] does not work correctly if the value contains double-quotes like
         CONFIG_X="foo\"bar"
      
      [4] seems to work better, but has a cost of forking a process.
      
      Anyway, quoted strings were always PITA for our Makefiles.
      
      T...
      129ab0d2
    • Masahiro Yamada's avatar
      kbuild: move headers_check.pl to usr/include/ · 50a48340
      Masahiro Yamada authored
      
      This script is only used by usr/include/Makefile. Make it local to
      the directory.
      
      Update the comment in include/uapi/linux/soundcard.h because
      'make headers_check' is no longer functional.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      50a48340
  8. Oct 24, 2021
    • Nicolas Schier's avatar
      initramfs: Check timestamp to prevent broken cpio archive · 4c9d410f
      Nicolas Schier authored
      
      Cpio format reserves 8 bytes for an ASCII representation of a time_t timestamp.
      While 2106-02-07 06:28:15 UTC (time_t = 0xffffffff) is still some years in the
      future, a poorly chosen date string for KBUILD_BUILD_TIMESTAMP, converted into
      seconds since the epoch, might lead to exceeded cpio timestamp limits that
      result in a broken cpio archive.  Add timestamp checks to prevent overrun of
      the 8-byte cpio header field.
      
      My colleague Thomas Kühnel discovered the behaviour, when we accidentally fed
      SOURCE_DATE_EPOCH to KBUILD_BUILD_TIMESTAMP as is: some timestamps (e.g.
      1607420928 = 2021-12-08 9:48:48 UTC) will be interpreted by `date` as a valid
      date specification of science fictional times (here: year 160742).  Even though
      this is bad input for KBUILD_BUILD_TIMESTAMP, it should not break the initramfs
      cpio format.
      
      Signed-off-by: default avatarNicolas Schier <nicolas@fjasle.eu>
      Cc: Thomas Kühnel <thomas.kuehnel@avm.de>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      4c9d410f
  9. Oct 12, 2021
  10. May 01, 2021
  11. Feb 24, 2021
  12. Jan 22, 2021
  13. Jul 31, 2020
    • Nick Terrell's avatar
      usr: Add support for zstd compressed initramfs · a30d8a39
      Nick Terrell authored
      
      - Add support for a zstd compressed initramfs.
      
      - Add compression for compressing built-in initramfs with zstd.
      
      I have tested this patch by boot testing with buildroot and QEMU.
      Specifically, I booted the kernel with both a zstd and gzip compressed
      initramfs, both built into the kernel and separate. I ensured that the
      correct compression algorithm was used. I tested on arm, aarch64, i386,
      and x86_64.
      
      This patch has been tested in production on aarch64 and x86_64 devices.
      
      Additionally, I have performance measurements from internal use in
      production. On an aarch64 device we saw 19 second boot time improvement
      from switching from lzma to zstd (27 seconds to 8 seconds). On an x86_64
      device we saw a 9 second boot time reduction from switching from xz to
      zstd.
      
      Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Link: https://lore...
      a30d8a39
  14. Jul 27, 2020
    • Al Viro's avatar
      unexport linux/elfcore.h · 1e6b57d6
      Al Viro authored
      
      It's unusable from userland - it uses elf_gregset_t, which is not
      provided by exported headers.  glibc has it in sys/procfs.h, but
      the same file defines struct elf_prstatus, so linux/elfcore.h can't
      be included once sys/procfs.h has been pulled.  Same goes for uclibc
      and dietlibc simply doesn't have elf_gregset_t defined anywhere.
      
      IOW, no userland source is including that thing.
      
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      1e6b57d6
  15. May 17, 2020
    • Masahiro Yamada's avatar
      bpfilter: match bit size of bpfilter_umh to that of the kernel · 9371f86e
      Masahiro Yamada authored
      
      bpfilter_umh is built for the default machine bit of the compiler,
      which may not match to the bit size of the kernel.
      
      This happens in the scenario below:
      
      You can use biarch GCC that defaults to 64-bit for building the 32-bit
      kernel. In this case, Kbuild passes -m32 to teach the compiler to
      produce 32-bit kernel space objects. However, it is missing when
      building bpfilter_umh. It is built as a 64-bit ELF, and then embedded
      into the 32-bit kernel.
      
      The 32-bit kernel and 64-bit umh is a bad combination.
      
      In theory, we can have 32-bit umh running on 64-bit kernel, but we do
      not have a good reason to support such a usecase.
      
      The best is to match the bit size between them.
      
      Pass -m32 or -m64 to the umh build command if it is found in
      $(KBUILD_CFLAGS). Evaluate CC_CAN_LINK against the kernel bit-size.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      9371f86e
  16. May 12, 2020
    • Masahiro Yamada's avatar
      kbuild: use -MMD instead of -MD to exclude system headers from dependency · 30a77297
      Masahiro Yamada authored
      
      This omits system headers from the generated header dependency.
      
      System headers are not updated unless you upgrade the compiler. Nor do
      they contain CONFIG options, so fixdep does not need to parse them.
      
      Having said that, the effect of this optimization will be quite small
      because the kernel code generally does not include system headers
      except <stdarg.h>. Host programs include a lot of system headers,
      but there are not so many in the kernel tree.
      
      At first, keeping system headers in .*.cmd files might be useful to
      detect the compiler update, but there is no guarantee that <stdarg.h>
      is included from every file. So, I implemented a more reliable way in
      the previous commit.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      30a77297
  17. Apr 10, 2020
  18. Mar 25, 2020
  19. Mar 16, 2020
    • Eugeniy Paltsev's avatar
      initramfs: restore default compression behavior · 785d74ec
      Eugeniy Paltsev authored
      Even though INITRAMFS_SOURCE kconfig option isn't set in most of
      defconfigs it is used (set) extensively by various build systems.
      Commit f26661e1
      
       ("initramfs: make initramfs compression choice
      non-optional") has changed default compression mode. Previously we
      compress initramfs using available compression algorithm. Now
      we don't use any compression at all by default.
      It significantly increases the image size in case of build system
      chooses embedded initramfs. Initially I faced with this issue while
      using buildroot.
      
      As of today it's not possible to set preferred compression mode
      in target defconfig as this option depends on INITRAMFS_SOURCE
      being set. Modification of all build systems either doesn't look
      like good option.
      
      Let's instead rewrite initramfs compression mode choices list
      the way that "INITRAMFS_COMPRESSION_NONE" will be the last option
      in the list. In that case it will be chosen only if all other
      options (which implements any compression) are not available.
      
      Signed-off-by: default avatarEugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      785d74ec
  20. Feb 03, 2020
    • Masahiro Yamada's avatar
      initramfs: do not show compression mode choice if INITRAMFS_SOURCE is empty · d4e9056d
      Masahiro Yamada authored
      Since commit ddd09bcc ("initramfs: make compression options not
      depend on INITRAMFS_SOURCE"), Kconfig asks the compression mode for
      the built-in initramfs regardless of INITRAMFS_SOURCE.
      
      It is technically simpler, but pointless from a UI perspective,
      Linus says [1].
      
      When INITRAMFS_SOURCE is empty, usr/Makefile creates a tiny default
      cpio, which is so small that nobody cares about the compression.
      
      This commit hides the Kconfig choice in that case. The default cpio
      is embedded without compression, which was the original behavior.
      
      [1]: https://lkml.org/lkml/2020/2/1/160
      
      
      
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d4e9056d
    • Masahiro Yamada's avatar
      kbuild: rename hostprogs-y/always to hostprogs/always-y · 5f2fb52f
      Masahiro Yamada authored
      
      In old days, the "host-progs" syntax was used for specifying host
      programs. It was renamed to the current "hostprogs-y" in 2004.
      
      It is typically useful in scripts/Makefile because it allows Kbuild to
      selectively compile host programs based on the kernel configuration.
      
      This commit renames like follows:
      
        always       ->  always-y
        hostprogs-y  ->  hostprogs
      
      So, scripts/Makefile will look like this:
      
        always-$(CONFIG_BUILD_BIN2C) += ...
        always-$(CONFIG_KALLSYMS)    += ...
            ...
        hostprogs := $(always-y) $(always-m)
      
      I think this makes more sense because a host program is always a host
      program, irrespective of the kernel configuration. We want to specify
      which ones to compile by CONFIG options, so always-y will be handier.
      
      The "always", "hostprogs-y", "hostprogs-m" will be kept for backward
      compatibility for a while.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      5f2fb52f
  21. Jan 15, 2020
  22. Jan 13, 2020