Message ID | 20180703233430.14416-2-labbott@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi. Thanks for the update. 2018-07-04 8:34 GMT+09:00 Laura Abbott <labbott@redhat.com>: > > The build id generated from --build-id can be generated in several different > ways, with the default being the sha1 on the output of the linked file. For > distributions, it can be useful to make sure this ID is unique, even if the > actual file contents don't change. The easiest way to do this is to insert > a section with some data. > > Add an ELF note to both the kernel and module which contains some data based > off of a config option. > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > Signed-off-by: Laura Abbott <labbott@redhat.com> > --- > v5: I used S-o-b here since the majority of the code was written > already. I think Suggested-by is good enough. S-o-b is appended as a patch is passed from people to people. Anyway, this looks good except one bike-shed. > Please feel free to change the tag if you think it's not > appropriate. I also tweaked this to take an ascii string instead of just > a hex value since this makes things much easier on the distribution > side. > --- > diff --git a/init/Kconfig b/init/Kconfig > index 041f3a022122..8de789f40db9 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 "Linux" How about empty string "" for default?
On 07/03/2018 08:59 PM, Masahiro Yamada wrote: > Hi. > > Thanks for the update. > > > 2018-07-04 8:34 GMT+09:00 Laura Abbott <labbott@redhat.com>: >> >> The build id generated from --build-id can be generated in several different >> ways, with the default being the sha1 on the output of the linked file. For >> distributions, it can be useful to make sure this ID is unique, even if the >> actual file contents don't change. The easiest way to do this is to insert >> a section with some data. >> >> Add an ELF note to both the kernel and module which contains some data based >> off of a config option. >> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> >> Signed-off-by: Laura Abbott <labbott@redhat.com> >> --- >> v5: I used S-o-b here since the majority of the code was written >> already. > > > I think Suggested-by is good enough. > S-o-b is appended as a patch is passed from people to people. > > Anyway, this looks good except one bike-shed. > >> Please feel free to change the tag if you think it's not >> appropriate. I also tweaked this to take an ascii string instead of just >> a hex value since this makes things much easier on the distribution >> side. >> --- > > >> diff --git a/init/Kconfig b/init/Kconfig >> index 041f3a022122..8de789f40db9 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 "Linux" > > > How about empty string "" > for default? > Sure, seems to work fine. Thanks, Laura
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..8de789f40db9 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 "Linux" + 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");