]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
klp-build: Fix patch cleanup on interrupt
authorJosh Poimboeuf <jpoimboe@kernel.org>
Fri, 3 Apr 2026 02:08:39 +0000 (19:08 -0700)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 5 May 2026 04:16:03 +0000 (21:16 -0700)
If a build error occurs and the user hits Ctrl-C while a large patch is
being reverted during cleanup, the cleanup EXIT trap gets re-triggered
and tries to re-revert the already partially-reverted patch.  That
causes 'patch -R' to repeatedly prompt

  "Unreversed patch detected!  Ignore -R? [n]"

for each already-reverted hunk, with no way to break out.

Fix it by adding '--force' to the patch revert command in
revert_patch(), which causes it to silently ignore already-reverted
hunks.  And ignore errors, as the cleanup is always best-effort.

For similar reasons, add to APPLIED_PATCHES before (rather than after)
applying the patch in apply_patch() so an interrupted apply will also
get cleaned up.

Fixes: d36a7343f4ba ("livepatch/klp-build: switch to GNU patch and recountdiff")
Acked-by: Song Liu <song@kernel.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
scripts/livepatch/klp-build

index dc2c5c33d1db21e3e7ec847b41dbea752a5c7e4c..9970e1f274ef4f89ace904cb3c0f13df02af65cf 100755 (executable)
@@ -384,15 +384,15 @@ apply_patch() {
                warn "${patch} applied with fuzz"
        fi
 
-       patch -d "$SRC" -p1 --no-backup-if-mismatch -r /dev/null "${extra_args[@]}" --silent < "$patch"
        APPLIED_PATCHES+=("$patch")
+       patch -d "$SRC" -p1 --no-backup-if-mismatch -r /dev/null "${extra_args[@]}" --silent < "$patch"
 }
 
 revert_patch() {
        local patch="$1"
        local tmp=()
 
-       patch -d "$SRC" -p1 -R --silent --no-backup-if-mismatch -r /dev/null < "$patch"
+       patch -d "$SRC" -p1 -R --force --no-backup-if-mismatch -r /dev/null &> /dev/null < "$patch" || true
 
        for p in "${APPLIED_PATCHES[@]}"; do
                [[ "$p" == "$patch" ]] && continue