When klp-build runs git commands, they may search upwards for a .git/ directory if one isn't found in the current $SRC path. This can lead to unexpected behavior if the kernel source is nested within another git tree.
Set and export GIT_CEILING_DIRECTORIES to the parent of $SRC to restrict git lookups to the local kernel tree only. This ensures that git operations remain consistent and prevents picking up repository state from parent directories. Signed-off-by: Joe Lawrence <[email protected]> --- scripts/livepatch/klp-build | 3 +++ 1 file changed, 3 insertions(+) I encountered this failure mode when running klp-build out of a kernel source rpm extraction inside a testing git repo tree. In this case, there is no <kernel_dir>/.git, but there is one further up the directory hierarchy. This confuses the script when it tries to fixup the patch as git commands will keep looking for a .git in parent directories unless otherwise bounded [1]. Here's a quick repo: $ cd /tmp $ mkdir test_dir $ cd test_dir # Force a /tmp/test_dir/.git $ git init $ git clone --depth=1 --branch=v6.19-rc4 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git $ cd linux $ wget https://raw.githubusercontent.com/dynup/kpatch/refs/heads/master/examples/cmdline-string.patch # Basic config for livepatching ... $ make -j$(nproc) defconfig $ ./scripts/config --file .config \ --set-val CONFIG_FTRACE y \ --set-val CONFIG_KALLSYMS_ALL y \ --set-val CONFIG_FUNCTION_TRACER y \ --set-val CONFIG_DYNAMIC_FTRACE y \ --set-val CONFIG_DYNAMIC_DEBUG y \ --set-val CONFIG_LIVEPATCH y $ make olddefconfig # GOOD BUILD $ ./scripts/livepatch/klp-build -T cmdline-string.patch Validating patch(es) Building original kernel Copying original object files Fixing patch(es) Building patched kernel Copying patched object files Diffing objects vmlinux.o: changed function: cmdline_proc_show Building patch module: livepatch-cmdline-string.ko SUCCESS # BAD BUILD - remove .git/ to simulate rpm/tarball $ rm -rf .git $ ./scripts/livepatch/klp-build -T cmdline-string.patch Validating patch(es) Building original kernel Copying original object files Fixing patch(es) error: No valid patches in input (allow with "--allow-empty") error: klp-build: line 350: 'git apply "${extra_args[@]}"' error: klp-build: line 351: '( cd "$SRC"; sed -n '/^-- /q;p' "$patch" | git apply "${extra_args[@]}" )' [1] https://git-scm.com/book/be/v2/Git-Internals-Environment-Variables#:~:text=GIT_DIR%20is%20the%20location,your%20shell%20prompt. diff --git a/scripts/livepatch/klp-build b/scripts/livepatch/klp-build index 882272120c9e..964f9ed5ee1b 100755 --- a/scripts/livepatch/klp-build +++ b/scripts/livepatch/klp-build @@ -52,6 +52,9 @@ PATCH_TMP_DIR="$TMP_DIR/tmp" KLP_DIFF_LOG="$DIFF_DIR/diff.log" +# Restrict Git repository lookup to the local $SRC path +export GIT_CEILING_DIRECTORIES="$(dirname "$SRC")" + grep0() { command grep "$@" || true } -- 2.52.0
