From 77d9346383bf0140dd376686007d006c338b383d Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Thu, 6 Jun 2024 09:22:44 -0400 Subject: [PATCH] kpatch-build: fix setlocalversion for pre-v6.3 kernels Commit 629b5acf3dab ("kpatch-build: Fix setlocalversion issue with 6.3 kernel") fixed VERMAGIC_STRING between kpatch original/patched kernel builds by creating a temporary scripts/setlocalversion script. This was accomplished by saving the output from `make kernelversion` into a KERNELVERSION environment variable and running the (original) scripts/setlocalversion to gather a "vX.Y" + "" pair of strings. Unfortunately pre-v6.3 scripts/setlocalversion does not use the KERNELVERSION environment variable, so the same efforts results in an unusable "" + "" version string pair. Restore the original `scripts/setlocalversion --save-scmversion` invocation for source trees that (still) support the --save-scmversion option. Fixes: 629b5acf3dab ("kpatch-build: Fix setlocalversion issue with 6.3 kernel") Signed-off-by: Joe Lawrence --- kpatch-build/kpatch-build | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build index 2029b55..a734534 100755 --- a/kpatch-build/kpatch-build +++ b/kpatch-build/kpatch-build @@ -210,6 +210,8 @@ restore_kernel_files() { } cleanup() { + rm -f "$BUILDDIR/.scmversion" + remove_patches restore_kernel_files @@ -1118,18 +1120,23 @@ fi # appended to the kernel version string (VERMAGIC_STRING), even if the original # kernel was not dirty. That can complicate both the build (create-diff-object # false positive changes) and the patch module link (module version mismatch -# load failures). +# load failures). Before making any changes to the source: # -# Prevent that by replacing the original setlocalversion with a friendlier one -# which just echo's the original version. This should be done before any -# changes to the source. +# For pre-v6.3 kernels: +# Run `./scripts/setlocalversion --save-scmversion`. +# +# For v6.3+ kernels: +# Replace the original setlocalversion with a friendlier one which just echo's +# the original version. if [[ -n "$USERSRCDIR" && -e "$KERNEL_SRCDIR/.git" ]]; then cd "$KERNEL_SRCDIR" || die - backup_kernel_file "scripts/setlocalversion" - LOCALVERSION="$(make kernelversion)" - LOCALVERSION="$(KERNELVERSION="$LOCALVERSION" ./scripts/setlocalversion)" - [[ -n "$LOCALVERSION" ]] || die "setlocalversion failed" - echo "echo $LOCALVERSION" > scripts/setlocalversion + if ! ./scripts/setlocalversion --save-scmversion &>/dev/null; then + backup_kernel_file "scripts/setlocalversion" + LOCALVERSION="$(make kernelversion)" + LOCALVERSION="$(KERNELVERSION="$LOCALVERSION" ./scripts/setlocalversion)" + [[ -n "$LOCALVERSION" ]] || die "setlocalversion failed" + echo "echo $LOCALVERSION" > scripts/setlocalversion + fi fi # kernel option checking