klp-build: Fix patch cleanup on interrupt

JIRA: https://redhat.atlassian.net/browse/RHEL-152194
Upstream Status: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

commit f3048888ea62ac1c573db91e74e0dcabe058e89f
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Thu Apr 2 19:08:39 2026 -0700

    klp-build: Fix patch cleanup on interrupt

    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>

Signed-off-by: Yannick Cote <ycote@redhat.com>
This commit is contained in:
Yannick Cote
2026-06-23 11:55:15 -04:00
parent 96f957083c
commit f623280454
+2 -2
View File
@@ -376,15 +376,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