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
commit 702f9f0f99
8 changed files with 387 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/v0.6.1.tar.gz

1
.kpatch.metadata Normal file
View File

@ -0,0 +1 @@
7a0395e649f58026a3dd66dd13e3bcecdb9e97a4 SOURCES/v0.6.1.tar.gz

View File

@ -0,0 +1,46 @@
From f056d60fb309896a52882fd3fc10fb5305f5a47e Mon Sep 17 00:00:00 2001
From: Joe Lawrence <joe.lawrence@redhat.com>
Date: Thu, 21 Jun 2018 15:40:20 -0400
Subject: [PATCH] contrib: disable upstart kpatch.conf install
Do not install the upstart configuration file to avoid this rhpkg
build complaint:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/kpatch-0.6.1-1.el7.noarch
error: Installed (but unpackaged) file(s) found:
/etc/init/kpatch.conf
Installed (but unpackaged) file(s) found:
/etc/init/kpatch.conf
We'll need to think of a better way to do this upstream, but for now,
just skip the unneeded file on RHEL.
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
---
contrib/Makefile | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/contrib/Makefile b/contrib/Makefile
index 0b0eeeb23a56..e873f27d6eae 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -6,12 +6,12 @@ install: all
$(INSTALL) -d $(SYSTEMDDIR)
$(INSTALL) -m 0644 kpatch.service $(SYSTEMDDIR)
sed -i 's~PREFIX~$(PREFIX)~' $(SYSTEMDDIR)/kpatch.service
- $(INSTALL) -d $(UPSTARTDIR)
- $(INSTALL) -m 0644 kpatch.conf $(UPSTARTDIR)
- sed -i 's~PREFIX~$(PREFIX)~' $(UPSTARTDIR)/kpatch.conf
+# $(INSTALL) -d $(UPSTARTDIR)
+# $(INSTALL) -m 0644 kpatch.conf $(UPSTARTDIR)
+# sed -i 's~PREFIX~$(PREFIX)~' $(UPSTARTDIR)/kpatch.conf
uninstall:
$(RM) $(SYSTEMDDIR)/kpatch.service
- $(RM) $(UPSTARTDIR)/kpatch.conf
+# $(RM) $(UPSTARTDIR)/kpatch.conf
clean:
--
1.8.3.1

View File

@ -0,0 +1,31 @@
From 8909e63c54adb34a0324200f99c63fcd7db5cbc5 Mon Sep 17 00:00:00 2001
From: Joe Lawrence <joe.lawrence@redhat.com>
Date: Mon, 10 Jun 2019 16:55:54 -0400
Subject: [PATCH] contrib/service: don't unload modules on stop
The kpatch.service file shouldn't unload patch modules on service stop
(this is also executed by systemd on reboot). Patch modules may not be
designed to be safely unloaded and/or may patch kernel routines that
need to continue to run throughout system bring down.
Suggested-by: disaster123
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
---
contrib/kpatch.service | 1 -
1 file changed, 1 deletion(-)
diff --git a/contrib/kpatch.service b/contrib/kpatch.service
index 5286f6c929e0..cf13f40105d9 100644
--- a/contrib/kpatch.service
+++ b/contrib/kpatch.service
@@ -6,7 +6,6 @@ ConditionKernelCommandLine=!kpatch.enable=0
Type=oneshot
RemainAfterExit=yes
ExecStart=PREFIX/sbin/kpatch load --all
-ExecStop=PREFIX/sbin/kpatch unload --all
[Install]
WantedBy=multi-user.target
--
2.21.0

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

124
SPECS/kpatch.spec Normal file
View File

@ -0,0 +1,124 @@
Name: kpatch
Version: 0.6.1
Release: 6%{?dist}
Summary: Dynamic kernel patch manager
Group: System Environment/Kernel
License: GPLv2
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
BuildArch: noarch
%description
kpatch is a live kernel patch module manager. It allows the user to manage
a collection of binary kernel patch modules which can be used to dynamically
patch the kernel without rebooting.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
make -C man
%install
make install PREFIX=/usr DESTDIR=%{buildroot} -C kpatch
make install PREFIX=/usr DESTDIR=%{buildroot} -C man
make install PREFIX=/usr DESTDIR=%{buildroot} -C contrib
rm -f %{buildroot}/usr/share/man/man1/kpatch-build.1.gz
%files
%{_sbindir}/kpatch
%{_usr}/lib/systemd/system/kpatch.service
%doc %{_mandir}/man1/kpatch.1.gz
%changelog
* 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
- CI gating test (rhbz#1717417)
* Tue Aug 14 2018 Joe Lawrence <joe.lawrence@redhat.com> 0.6.1-1
- update to 0.6.1 (rhbz#1615880)
* Mon Aug 13 2018 Troy Dawson <tdawson@redhat.com> - 0.4.0-4
- Release Bumped for el8 Mass Rebuild
* Thu Nov 16 2017 Joe Lawrence <joe.lawrence@redhat.com> 0.4.0-3
- kpatch: better livepatch module support (rhbz#1504066)
* Wed Oct 18 2017 Josh Poimboeuf <jpoimboe@redhat.com> 0.4.0-2
- fix backwards compatibility with RHEL 7.3 patches (rhbz#1497735)
* Mon Mar 13 2017 Josh Poimboeuf <jpoimboe@redhat.com> 0.4.0-1
- update to 0.4.0 (rhbz#1427642)
* Wed Jun 15 2016 Josh Poimboeuf <jpoimboe@redhat.com> 0.3.2-1
- update to 0.3.2 (rhbz#1282508)
* Wed Nov 18 2015 Josh Poimboeuf <jpoimboe@redhat.com> 0.3.1-1
- update to 0.3.1 (rhbz#1282508)
* Tue Sep 16 2014 Seth Jennings <sjenning@redhat.com> 0.1.10-4
- fix dracut dependencies (rhbz#1170369)
* Tue Sep 16 2014 Seth Jennings <sjenning@redhat.com> 0.1.10-3
- support re-enabling forced modules (rhbz#1140268)
* Thu Sep 11 2014 Seth Jennings <sjenning@redhat.com> 0.1.10-2
- support modprobe format names (rhbz#1133045)
* Thu Jul 31 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.10-1
- update to kpatch 0.1.10
* Wed Jul 23 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.9-1
- update to kpatch 0.1.9
* Tue Jul 15 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.8-1
- update to kpatch 0.1.8
* Wed May 21 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.2-1
- update to kpatch 0.1.2
* Mon May 19 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.1-2
- fix initramfs core module path
* Mon May 19 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.1-1
- rebase to kpatch 0.1.1
* Fri May 9 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.0-2
- modprobe core module
* Tue May 6 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.1.0-1
- Initial kpatch release 0.1.0
* Thu Jan 30 2014 Josh Poimboeuf <jpoimboe@redhat.com> 0.0-1
- Initial build