diff options
Diffstat (limited to '0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch')
-rw-r--r-- | 0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch b/0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch new file mode 100644 index 000000000..1c0b1ab2e --- /dev/null +++ b/0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch @@ -0,0 +1,134 @@ +From 25d3cf21987c752240df03c050593621ed2bd3a3 Mon Sep 17 00:00:00 2001 +From: Laura Abbott <labbott@redhat.com> +Date: Tue, 3 Jul 2018 15:50:14 -0700 +Subject: [PATCHv6 1/4] kbuild: Add build salt to the kernel and modules +To: Andy Lutomirski <luto@kernel.org> +To: mjw@fedoraproject.org +Cc: Linus Torvalds <torvalds@linux-foundation.org> +To: H. J. Lu <hjl.tools@gmail.com> +Cc: X86 ML <x86@kernel.org> +Cc: linux-kernel@vger.kernel.org +To: Masahiro Yamada <yamada.masahiro@socionext.com> +Cc: Nick Clifton <nickc@redhat.com> +Cc: Cary Coutant <ccoutant@gmail.com> +Cc: linux-kbuild@vger.kernel.org +Cc: linuxppc-dev@lists.ozlabs.org +To: Michael Ellerman <mpe@ellerman.id.au> +To: Catalin Marinas <catalin.marinas@arm.com> +To: Will Deacon <will.deacon@arm.com> +Cc: linux-arm-kernel@lists.infradead.org + + +In Fedora, the debug information is packaged separately (foo-debuginfo) and +can be installed separately. There's been a long standing issue where only +one version of a debuginfo info package can be installed at a time. There's +been an effort for Fedora for parallel debuginfo to rectify this problem. + +Part of the requirement to allow parallel debuginfo to work is that build ids +are unique between builds. The existing upstream rpm implementation ensures +this by re-calculating the build-id using the version and release as a +seed. This doesn't work 100% for the kernel because of the vDSO which is +its own binary and doesn't get updated when embedded. + +Fix this by adding some data in an ELF note for both the kernel and modules. +The data is controlled via a Kconfig option so distributions can set it +to an appropriate value to ensure uniqueness between builds. + +Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> +Signed-off-by: Laura Abbott <labbott@redhat.com> +--- +v6: Added more detail to the commit text about why exactly this feature +is useful. Default string now "" +--- + include/linux/build-salt.h | 20 ++++++++++++++++++++ + init/Kconfig | 9 +++++++++ + init/version.c | 3 +++ + scripts/mod/modpost.c | 3 +++ + 4 files changed, 35 insertions(+) + create mode 100644 include/linux/build-salt.h + +diff --git a/include/linux/build-salt.h b/include/linux/build-salt.h +new file mode 100644 +index 000000000000..bb007bd05e7a +--- /dev/null ++++ b/include/linux/build-salt.h +@@ -0,0 +1,20 @@ ++#ifndef __BUILD_SALT_H ++#define __BUILD_SALT_H ++ ++#include <linux/elfnote.h> ++ ++#define LINUX_ELFNOTE_BUILD_SALT 0x100 ++ ++#ifdef __ASSEMBLER__ ++ ++#define BUILD_SALT \ ++ ELFNOTE(Linux, LINUX_ELFNOTE_BUILD_SALT, .asciz CONFIG_BUILD_SALT) ++ ++#else ++ ++#define BUILD_SALT \ ++ ELFNOTE32("Linux", LINUX_ELFNOTE_BUILD_SALT, CONFIG_BUILD_SALT) ++ ++#endif ++ ++#endif /* __BUILD_SALT_H */ +diff --git a/init/Kconfig b/init/Kconfig +index 041f3a022122..d39b31484c52 100644 +--- a/init/Kconfig ++++ b/init/Kconfig +@@ -107,6 +107,15 @@ config LOCALVERSION_AUTO + + which is done within the script "scripts/setlocalversion".) + ++config BUILD_SALT ++ string "Build ID Salt" ++ default "" ++ help ++ The build ID is used to link binaries and their debug info. Setting ++ this option will use the value in the calculation of the build id. ++ This is mostly useful for distributions which want to ensure the ++ build is unique between builds. It's safe to leave the default. ++ + config HAVE_KERNEL_GZIP + bool + +diff --git a/init/version.c b/init/version.c +index bfb4e3f4955e..ef4012ec4375 100644 +--- a/init/version.c ++++ b/init/version.c +@@ -7,6 +7,7 @@ + */ + + #include <generated/compile.h> ++#include <linux/build-salt.h> + #include <linux/export.h> + #include <linux/uts.h> + #include <linux/utsname.h> +@@ -49,3 +50,5 @@ const char linux_proc_banner[] = + "%s version %s" + " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" + " (" LINUX_COMPILER ") %s\n"; ++ ++BUILD_SALT; +diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c +index 1663fb19343a..dc6d714e4dcb 100644 +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -2125,10 +2125,13 @@ static int check_modname_len(struct module *mod) + **/ + static void add_header(struct buffer *b, struct module *mod) + { ++ buf_printf(b, "#include <linux/build-salt.h>\n"); + buf_printf(b, "#include <linux/module.h>\n"); + buf_printf(b, "#include <linux/vermagic.h>\n"); + buf_printf(b, "#include <linux/compiler.h>\n"); + buf_printf(b, "\n"); ++ buf_printf(b, "BUILD_SALT;\n"); ++ buf_printf(b, "\n"); + buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n"); + buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n"); + buf_printf(b, "\n"); +-- +2.17.1 + |