summaryrefslogtreecommitdiffstats
path: root/0001-kbuild-Add-build-salt-to-the-kernel-and-modules.patch
diff options
context:
space:
mode:
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.patch134
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
+