import kpatch-0.6.1-6.el8

This commit is contained in:
CentOS Sources 2020-01-21 14:13:05 -05:00 committed by Stepan Oksanichenko
parent 113a6b6d9a
commit 6cd62a171b
4 changed files with 201 additions and 2 deletions

View File

@ -0,0 +1,77 @@
From 1d2dffec7a6fad4a8daed9340cd42aada856d03f Mon Sep 17 00:00:00 2001
From: Joe Lawrence <joe.lawrence@redhat.com>
Date: Wed, 19 Jun 2019 15:29:43 -0400
Subject: [PATCH] kpatch script: don't fail if module already loaded+enabled
For "kpatch load" invocations, don't set failing return status if the
kpatch module is already loaded and enabled. Make note of the existing
livepatch module and then verify that is has completed its transition
before continuing. This allows the user to more gracefully re-run
"kpatch load" commands to pick up new kpatch modules.
Fixes: #979
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
---
kpatch/kpatch | 44 ++++++++++++++++++++++----------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/kpatch/kpatch b/kpatch/kpatch
index 328f1197259d..8ea6c80ca2d3 100755
--- a/kpatch/kpatch
+++ b/kpatch/kpatch
@@ -314,30 +314,30 @@ load_module () {
die "error: cannot re-enable patch module $modname, cannot verify checksum match"
fi
else
- die "error: module named $modname already loaded and enabled"
+ echo "module named $modname already loaded and enabled"
fi
- fi
+ else
+ echo "loading patch module: $module"
+ local i=0
+ while true; do
+ out="$(LC_ALL=C insmod "$module" 2>&1)"
+ [[ -z "$out" ]] && break
+ echo "$out" 1>&2
+ [[ ! "$out" =~ "Device or resource busy" ]] &&
+ die "failed to load module $module"
- echo "loading patch module: $module"
- local i=0
- while true; do
- out="$(LC_ALL=C insmod "$module" 2>&1)"
- [[ -z "$out" ]] && break
- echo "$out" 1>&2
- [[ ! "$out" =~ "Device or resource busy" ]] &&
- die "failed to load module $module"
-
- # "Device or resource busy" means the activeness safety check
- # failed. Retry in a few seconds.
- i=$((i+1))
- if [[ $i -eq $MAX_LOAD_ATTEMPTS ]]; then
- die "failed to load module $module"
- break
- else
- warn "retrying..."
- sleep $RETRY_INTERVAL
- fi
- done
+ # "Device or resource busy" means the activeness safety check
+ # failed. Retry in a few seconds.
+ i=$((i+1))
+ if [[ $i -eq $MAX_LOAD_ATTEMPTS ]]; then
+ die "failed to load module $module"
+ break
+ else
+ warn "retrying..."
+ sleep $RETRY_INTERVAL
+ fi
+ done
+ fi
if ! wait_for_patch_transition "$modname" ; then
echo "module $modname did not complete its transition, unloading..."
--
2.21.0

View File

@ -0,0 +1,78 @@
kpatch: clarify that "kpatch unload" isn't supported
Add a user-prompt to the kpatch unload subcommand and make a similiar
mention in the manual page.
Provide an undocumented force option so that QE and dev scripts can
still run unload kpatch modules from scripts.
RHEL-only.
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
diff -Nupr kpatch-0.6.1.old/kpatch/kpatch kpatch-0.6.1/kpatch/kpatch
--- kpatch-0.6.1.old/kpatch/kpatch 2019-08-28 10:35:01.191259434 -0400
+++ kpatch-0.6.1/kpatch/kpatch 2019-08-28 16:11:13.067926576 -0400
@@ -49,8 +49,8 @@ usage () {
echo >&2
usage_cmd "load --all" "load all installed patch modules into the running kernel"
usage_cmd "load <module>" "load patch module into the running kernel"
- usage_cmd "unload --all" "unload all patch modules from the running kernel"
- usage_cmd "unload <module>" "unload patch module from the running kernel"
+ usage_cmd "unload --all (UNSUPPORTED)" "unload all patch modules from the running kernel"
+ usage_cmd "unload <module> (UNSUPPORTED)" "unload patch module from the running kernel"
echo >&2
usage_cmd "info <module>" "show information about a patch module"
echo >&2
@@ -71,6 +71,16 @@ die() {
exit 1
}
+confirm_prompt() {
+ local prompt="$1"
+ local answer
+ while true; do
+ read -rp "$prompt [Y/N] " answer
+ [[ $answer == 'Y' || $answer == 'y' ]] && return 0
+ [[ $answer == 'N' || $answer == 'n' ]] && return 1
+ done
+}
+
__find_module () {
MODULE="$1"
[[ -f "$MODULE" ]] && return
@@ -406,6 +416,19 @@ unset MODULE
init_sysfs_var
[[ "$#" -lt 1 ]] && usage
+
+# RHEL-specific support options
+case "$1" in
+"force")
+ # For scripting purposes, support "kpatch force unload".
+ # Shift out the "force" to avoid the user-prompt check below.
+ shift
+ ;;
+"unload")
+ confirm_prompt "WARNING: Red Hat doesn't support unloading of kpatches, continue anyway?" || exit 1
+ ;;
+esac
+
case "$1" in
"load")
[[ "$#" -ne 2 ]] && usage
diff -Nupr kpatch-0.6.1.old/man/kpatch.1 kpatch-0.6.1/man/kpatch.1
--- kpatch-0.6.1.old/man/kpatch.1 2019-08-28 10:35:01.191259434 -0400
+++ kpatch-0.6.1/man/kpatch.1 2019-08-28 14:51:23.268198897 -0400
@@ -23,10 +23,10 @@ load --all
load <module>
load patch module into the running kernel
-unload --all
+unload --all (UNSUPPORTED)
unload all patch modules from the running kernel
-unload <module>
+unload <module> (UNSUPPORTED)
unload patch module from the running kernel
info <module>

View File

@ -0,0 +1,29 @@
From 54c3d6d8fef188da10a5040c9cc841f35e01bfbf Mon Sep 17 00:00:00 2001
From: Artem Savkov <asavkov@redhat.com>
Date: Tue, 7 May 2019 14:12:38 +0200
Subject: [PATCH] Fix livepatch-enabled kernel detection in kpatch script
We can no longer use klp_register_patch symbol to determine if the
kernel is livepatch-enabled. Use klp_enable_patch instead.
Signed-off-by: Artem Savkov <asavkov@redhat.com>
---
kpatch/kpatch | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch/kpatch b/kpatch/kpatch
index 1d9f90c..bdceff1 100755
--- a/kpatch/kpatch
+++ b/kpatch/kpatch
@@ -126,7 +126,7 @@ find_core_module() {
}
core_loaded () {
- grep -q -e "T klp_register_patch" -e "T kpatch_register" /proc/kallsyms
+ grep -q -e "T klp_enable_patch" -e "T kpatch_register" /proc/kallsyms
}
get_module_name () {
--
2.21.0

View File

@ -1,6 +1,6 @@
Name: kpatch
Version: 0.6.1
Release: 3%{?dist}
Release: 6%{?dist}
Summary: Dynamic kernel patch manager
Group: System Environment/Kernel
@ -9,6 +9,9 @@ URL: https://github.com/dynup/kpatch
Source0: https://github.com/dynup/kpatch/archive/v%{version}.tar.gz
Patch0: 0001-contrib-disable-upstart-kpatch.conf-install.patch
Patch1: 0002-contrib-service-don-t-unload-modules-on-stop.patch
Patch2: 0003-kpatch-script-don-t-fail-if-module-already-loaded-en.patch
Patch3: 0004-kpatch-clarify-unload-unsupport.patch
Patch4: 0005-Fix-livepatch-enabled-kernel-detection-in-kpatch-scr.patch
Requires: bash kmod binutils
@ -25,6 +28,9 @@ patch the kernel without rebooting.
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
@ -45,7 +51,16 @@ rm -f %{buildroot}/usr/share/man/man1/kpatch-build.1.gz
%changelog
* Wed Jun 12 2019 Joe Lawrence <joe.lawrence@redhat.com> 0.6.1-2
* Tue Oct 22 2019 Yannick Cote <ycote@redhat.com> 0.6.1-6
- fix patch loading issue caused by recent kernel rebase (rhbz#1754679)
* Wed Aug 28 2019 Joe Lawrence <joe.lawrence@redhat.com> 0.6.1-5
- kpatch: clarify that "kpatch unload" isn't supported (rhbz#1746461)
* Sun Jun 23 2019 Joe Lawrence <joe.lawrence@redhat.com> 0.6.1-4
- kpatch script: don't fail if module already loaded+enabled (rhbz#1719305)
* Wed Jun 12 2019 Joe Lawrence <joe.lawrence@redhat.com> 0.6.1-3
- kpatch: patches shouldn't be unloaded on system shutdown (rhbz#1719305)
* Wed Jun 5 2019 Josh Poimboeuf <jpoimboe@redhat.com> 0.6.1-2