On Tue, Feb 17, 2026 at 8:07 AM Joe Lawrence <[email protected]> wrote:
>
> Capture the output of the patch command to detect when a patch applies
> with fuzz or line offsets.
>
> If such "drift" is detected during the validation phase, warn the user
> and display the details. This helps identify input patches that may need
> refreshing against the target source tree.
>
> Ensure that internal patch operations (such as those in refresh_patch or
> during the final build phase) can still run quietly.
>
> Signed-off-by: Joe Lawrence <[email protected]>
> ---
> scripts/livepatch/klp-build | 24 +++++++++++++++++++-----
> 1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/livepatch/klp-build b/scripts/livepatch/klp-build
> index fd104ace29e6..5367d573b94b 100755
> --- a/scripts/livepatch/klp-build
> +++ b/scripts/livepatch/klp-build
> @@ -369,11 +369,24 @@ check_unsupported_patches() {
>
> apply_patch() {
> local patch="$1"
> + shift
> + local extra_args=("$@")
> + local drift_regex="with fuzz|offset [0-9]+ line"
> + local output
> + local status
>
> [[ ! -f "$patch" ]] && die "$patch doesn't exist"
> - patch -d "$SRC" -p1 --dry-run --silent --no-backup-if-mismatch -r
> /dev/null < "$patch"
> - patch -d "$SRC" -p1 --silent --no-backup-if-mismatch -r /dev/null <
> "$patch"
> + status=0
> + output=$(patch -d "$SRC" -p1 --dry-run --no-backup-if-mismatch -r
> /dev/null "${extra_args[@]}" < "$patch" 2>&1) || status=$?
> + if [[ "$status" -ne 0 ]]; then
> + echo "$output"
> + die "$patch did not apply"
> + elif [[ "$output" =~ $drift_regex ]]; then
> + warn "$patch applied with drift"
> + echo "$output"
> + fi
It appears we only need the non-silent "patch" command and the reporting
logic in validate_patches(). Maybe we can have a different version of
apply_patches for validate_patches(), say apply_patches_verbose(), and
keep existing apply_patch() and apply_patches as-is?
Thanks,
Song
>
> + patch -d "$SRC" -p1 --no-backup-if-mismatch -r /dev/null
> "${extra_args[@]}" --silent < "$patch"
> APPLIED_PATCHES+=("$patch")
> }
>
> @@ -392,10 +405,11 @@ revert_patch() {
> }
>
> apply_patches() {
> + local extra_args=("$@")
> local patch
>
> for patch in "${PATCHES[@]}"; do
> - apply_patch "$patch"
> + apply_patch "$patch" "${extra_args[@]}"
> done
> }
>
> @@ -453,7 +467,7 @@ refresh_patch() {
> ( cd "$SRC" && echo "${input_files[@]}" | xargs cp --parents
> --target-directory="$tmpdir/a" )
>
> # Copy patched source files to 'b'
> - apply_patch "$patch"
> + apply_patch "$patch" "--silent"
> ( cd "$SRC" && echo "${output_files[@]}" | xargs cp --parents
> --target-directory="$tmpdir/b" )
> revert_patch "$patch"
>
> @@ -826,7 +840,7 @@ fi
> if (( SHORT_CIRCUIT <= 2 )); then
> status "Fixing patch(es)"
> fix_patches
> - apply_patches
> + apply_patches "--silent"
> status "Building patched kernel"
> build_kernel "patched"
> revert_patches
> --
> 2.53.0
>