From: Greg Kroah-Hartman Date: Thu, 29 Oct 2020 12:34:02 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.19.154~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4d0ce943fd7fa2f844359b2403b6855d4824aa9;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: scripts-setlocalversion-make-git-describe-output-more-reliable.patch --- diff --git a/queue-4.9/scripts-setlocalversion-make-git-describe-output-more-reliable.patch b/queue-4.9/scripts-setlocalversion-make-git-describe-output-more-reliable.patch new file mode 100644 index 00000000000..2dab62cbf8d --- /dev/null +++ b/queue-4.9/scripts-setlocalversion-make-git-describe-output-more-reliable.patch @@ -0,0 +1,90 @@ +From 548b8b5168c90c42e88f70fcf041b4ce0b8e7aa8 Mon Sep 17 00:00:00 2001 +From: Rasmus Villemoes +Date: Thu, 17 Sep 2020 08:56:11 +0200 +Subject: scripts/setlocalversion: make git describe output more reliable + +From: Rasmus Villemoes + +commit 548b8b5168c90c42e88f70fcf041b4ce0b8e7aa8 upstream. + +When building for an embedded target using Yocto, we're sometimes +observing that the version string that gets built into vmlinux (and +thus what uname -a reports) differs from the path under /lib/modules/ +where modules get installed in the rootfs, but only in the length of +the -gabc123def suffix. Hence modprobe always fails. + +The problem is that Yocto has the concept of "sstate" (shared state), +which allows different developers/buildbots/etc. to share build +artifacts, based on a hash of all the metadata that went into building +that artifact - and that metadata includes all dependencies (e.g. the +compiler used etc.). That normally works quite well; usually a clean +build (without using any sstate cache) done by one developer ends up +being binary identical to a build done on another host. However, one +thing that can cause two developers to end up with different builds +[and thus make one's vmlinux package incompatible with the other's +kernel-dev package], which is not captured by the metadata hashing, is +this `git describe`: The output of that can be affected by + +(1) git version: before 2.11 git defaulted to a minimum of 7, since +2.11 (git.git commit e6c587) the default is dynamic based on the +number of objects in the repo +(2) hence even if both run the same git version, the output can differ +based on how many remotes are being tracked (or just lots of local +development branches or plain old garbage) +(3) and of course somebody could have a core.abbrev config setting in +~/.gitconfig + +So in order to avoid `uname -a` output relying on such random details +of the build environment which are rather hard to ensure are +consistent between developers and buildbots, make sure the abbreviated +sha1 always consists of exactly 12 hex characters. That is consistent +with the current rule for -stable patches, and is almost always enough +to identify the head commit unambigously - in the few cases where it +does not, the v5.4.3-00021- prefix would certainly nail it down. + +[Adapt to `` vs $() differences between 5.4 and upstream.] +Signed-off-by: Rasmus Villemoes +Signed-off-by: Masahiro Yamada +Signed-off-by: Greg Kroah-Hartman + +--- + scripts/setlocalversion | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +--- a/scripts/setlocalversion ++++ b/scripts/setlocalversion +@@ -44,7 +44,7 @@ scm_version() + + # Check for git and a git repo. + if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && +- head=`git rev-parse --verify --short HEAD 2>/dev/null`; then ++ head=$(git rev-parse --verify HEAD 2>/dev/null); then + + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore + # it, because this version is defined in the top level Makefile. +@@ -58,11 +58,22 @@ scm_version() + fi + # If we are past a tagged commit (like + # "v2.6.30-rc5-302-g72357d5"), we pretty print it. +- if atag="`git describe 2>/dev/null`"; then +- echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' ++ # ++ # Ensure the abbreviated sha1 has exactly 12 ++ # hex characters, to make the output ++ # independent of git version, local ++ # core.abbrev settings and/or total number of ++ # objects in the current repository - passing ++ # --abbrev=12 ensures a minimum of 12, and the ++ # awk substr() then picks the 'g' and first 12 ++ # hex chars. ++ if atag="$(git describe --abbrev=12 2>/dev/null)"; then ++ echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),substr($(NF),0,13))}' + +- # If we don't have a tag at all we print -g{commitish}. ++ # If we don't have a tag at all we print -g{commitish}, ++ # again using exactly 12 hex chars. + else ++ head="$(echo $head | cut -c1-12)" + printf '%s%s' -g $head + fi + fi diff --git a/queue-4.9/series b/queue-4.9/series index 5acd35dbb50..ac83c172e2d 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1 +1,2 @@ sunrpc-econnrefused-should-cause-a-rebind.patch +scripts-setlocalversion-make-git-describe-output-more-reliable.patch