Sync from SUSE:SLFO:Main kexec-tools revision 4268fb3eddfaca188ee2163de5c0c9a3

This commit is contained in:
Adrian Schröter 2024-12-04 09:20:50 +01:00
parent 3e7c766f84
commit b4aa0131d4
10 changed files with 89 additions and 184 deletions

View File

@ -1,112 +0,0 @@
From 6419b008fde783fd0cc2cc266bd1c9cf35e99a0e Mon Sep 17 00:00:00 2001
From: Julien Olivain <ju.o@free.fr>
Date: Sat, 23 Sep 2023 18:46:06 +0200
Subject: kexec: provide a memfd_create() wrapper if not present in libc
Commit 714fa115 "kexec/arm64: Simplify the code for zImage" introduced
a use of the memfd_create() system call, included in version
kexec-tools v2.0.27.
This system call was introduced in kernel commit [1], first included
in kernel v3.17 (released on 2014-10-05).
The memfd_create() glibc wrapper function was added much later in
commit [2], first included in glibc version 2.27 (released on
2018-02-01).
This direct use memfd_create() introduced a requirement on
Kernel >= 3.17 and glibc >= 2.27.
There is old toolchains like [3] for example (which ships gcc 7.3.1,
glibc 2.25 and includes kernel v4.10 headers), that can still be used
to build newer kernels. Even if such toolchains can be seen as
outdated, they are is still claimed as supported by recent kernel.
For example, Kernel v6.5.5 has a requirement on gcc version 5.1 and
greater. See [4].
Moreover, kexec-tools <= 2.0.26 could be compiled using recent
toolchains with alternative libc (e.g. uclibc-ng, musl) which are not
providing the memfd_create() wrapper.
When compiling kexec-tools v2.0.27 with a toolchain not providing the
memfd_create() syscall wrapper, the compilation fail with message:
kexec/kexec.c: In function 'copybuf_memfd':
kexec/kexec.c:645:7: warning: implicit declaration of function 'memfd_create'; did you mean 'SYS_memfd_create'? [-Wimplicit-function-declaration]
fd = memfd_create("kernel", MFD_ALLOW_SEALING);
^~~~~~~~~~~~
SYS_memfd_create
kexec/kexec.c:645:30: error: 'MFD_ALLOW_SEALING' undeclared (first use in this function); did you mean '_PC_ALLOC_SIZE_MIN'?
fd = memfd_create("kernel", MFD_ALLOW_SEALING);
^~~~~~~~~~~~~~~~~
_PC_ALLOC_SIZE_MIN
In order to let kexec-tools compile in a wider range of configurations,
this commit adds a memfd_create() function check in autoconf configure
script, and adds a system call wrapper which will be used if the
function is not available. With this commit, the environment
requirement is relaxed to only kernel >= v3.17.
Note: this issue was found in kexec-tools integration in Buildroot [5]
using the command "utils/test-pkg -a -p kexec", which tests many
toolchain/arch combinations.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=9183df25fe7b194563db3fec6dc3202a5855839c
[2] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=59d2cbb1fe4b8601d5cbd359c3806973eab6c62d
[3] https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
[4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/process/changes.rst?h=v6.5.5#n32
[5] https://buildroot.org/
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Simon Horman <horms@kernel.org>
---
configure.ac | 3 +++
kexec/kexec.c | 11 +++++++++++
2 files changed, 14 insertions(+)
diff --git a/configure.ac b/configure.ac
index 352eefee..602de79b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -208,6 +208,9 @@ if test "$ac_cv_lib_xenctrl_xc_kexec_load" = yes ; then
AC_MSG_NOTICE([The kexec_status call is not available]))
fi
+dnl Check if libc has the memfd_create() syscall wrapper
+AC_CHECK_FUNCS([memfd_create])
+
dnl ---Sanity checks
if test "$CC" = "no"; then AC_MSG_ERROR([cc not found]); fi
if test "$CPP" = "no"; then AC_MSG_ERROR([cpp not found]); fi
diff --git a/kexec/kexec.c b/kexec/kexec.c
index fdb4c984..08edfca2 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -31,6 +31,10 @@
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifndef HAVE_MEMFD_CREATE
+#include <linux/memfd.h>
+#include <sys/syscall.h>
+#endif
#include <sys/reboot.h>
#include <sys/mman.h>
#include <unistd.h>
@@ -640,6 +644,13 @@ char *slurp_decompress_file(const char *filename, off_t *r_size)
return kernel_buf;
}
+#ifndef HAVE_MEMFD_CREATE
+static int memfd_create(const char *name, unsigned int flags)
+{
+ return syscall(SYS_memfd_create, name, flags);
+}
+#endif
+
static int copybuf_memfd(const char *kernel_buf, size_t size)
{
int fd, count;
--
cgit

View File

@ -1,59 +0,0 @@
From: Jiri Bohac <jbohac@suse.cz>
Subject: [PATCH] kexec: dont use kexec_file_load on XEN
Patch-mainline: 94fbe64fb22d61726ca0c0996987574b6c783c19
References: bsc#1218590
Since commit 29fe5067ed07 ("kexec: make -a the default")
kexec tries the kexec_file_load syscall first and only falls back to kexec_load on
selected error codes.
This effectively breaks kexec on XEN, unless -c is pecified to force the kexec_load
syscall.
The XEN-specific functions (xen_kexec_load / xen_kexec_unload) are only called
from my_load / k_unload, i.e. the kexec_load code path.
With -p (panic kernel) kexec_file_load on XEN fails with -EADDRNOTAVAIL (crash
kernel reservation is ignored by the kernel on XEN), which is not in the list
of return codes that cause the fallback to kexec_file.
Without -p kexec_file_load actualy leads to a kernel oops on v6.4.0
(needs to be dubugged separately).
Signed-off-by: Jiri Bohac <jbohac@suse.cz>
Fixes: 29fe5067ed07 ("kexec: make -a the default")
---
kexec/kexec.8 | 1 +
kexec/kexec.c | 4 ++++
2 files changed, 5 insertions(+)
diff --git a/kexec/kexec.8 b/kexec/kexec.8
index b969cea..9e995fe 100644
--- a/kexec/kexec.8
+++ b/kexec/kexec.8
@@ -162,6 +162,7 @@ Specify that the new kernel is of this
.TP
.BI \-s\ (\-\-kexec-file-syscall)
Specify that the new KEXEC_FILE_LOAD syscall should be used exclusively.
+Ignored on XEN.
.TP
.BI \-c\ (\-\-kexec-syscall)
Specify that the old KEXEC_LOAD syscall should be used exclusively.
diff --git a/kexec/kexec.c b/kexec/kexec.c
index 08edfca..9d0ec46 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -1685,6 +1685,10 @@ int main(int argc, char *argv[])
}
}
}
+ if (xen_present()) {
+ do_kexec_file_syscall = 0;
+ do_kexec_fallback = 0;
+ }
if (do_kexec_file_syscall) {
if (do_load_jump_back_helper && !do_kexec_fallback)
die("--load-jump-back-helper not supported with kexec_file_load\n");
--
2.43.0

Binary file not shown.

BIN
kexec-tools-2.0.27.tar.xz (Stored with Git LFS)

Binary file not shown.

BIN
kexec-tools-2.0.29.tar.sign Normal file

Binary file not shown.

BIN
kexec-tools-2.0.29.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -8,10 +8,12 @@ Fedora). Also one less file for usr_merge
Makefile.in | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
--- a/Makefile.in
+++ b/Makefile.in
@@ -173,8 +173,11 @@ PSRCS:=$(foreach s, $(SRCS), $(PACKAGE_N
PGSRCS:=$(foreach s, $(GENERATED_SRCS), $(PACKAGE_NAME)-$(PACKAGE_VERSION)/$(s))
Index: kexec-tools-2.0.28/Makefile.in
===================================================================
--- kexec-tools-2.0.28.orig/Makefile.in
+++ kexec-tools-2.0.28/Makefile.in
@@ -181,8 +181,11 @@ TARBALL.gz=$(TARBALL).gz
SRCS:= $(dist)
MAN_PAGES:=$(KEXEC_MANPAGE) $(VMCORE_DMESG_MANPAGE)
-BINARIES_i386:=$(KEXEC_TEST)

View File

@ -0,0 +1,23 @@
From: Petr Tesarik <ptesarik@suse.com>
Subject: riscv: fix build with hotplug support
Upstream: not yet, blocked by base RISC-V patches
Commit 3c47f384f1c4 ("kexec_load: Use new kexec flag for hotplug support")
adds a new architecture-specific function named arch_do_exclude_segment.
Since RISC-V does not yet implement hotplug updates in the kernel, add a
trivial definition of this function to kexec-tools.
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
Index: kexec-tools-2.0.29/kexec/arch/riscv/kexec-riscv.c
===================================================================
--- kexec-tools-2.0.29.orig/kexec/arch/riscv/kexec-riscv.c
+++ kexec-tools-2.0.29/kexec/arch/riscv/kexec-riscv.c
@@ -362,3 +362,8 @@ int arch_compat_trampoline(struct kexec_
void arch_update_purgatory(struct kexec_info *UNUSED(info))
{
}
+
+int arch_do_exclude_segment(struct kexec_info *UNUSED(info), struct kexec_segment *UNUSED(segment))
+{
+ return 0;
+}

View File

@ -1,5 +1,56 @@
-------------------------------------------------------------------
Thu Jan 25 17:38:17 UTC 2024 - Jiri Bohac <jbohac@suse.com>
Fri Sep 13 13:13:13 UTC 2024 - olaf@aepfle.de
- To create rckexec-reload, the service binary is required at
build time. This binary is provided by aaa_base. Make sure this
package is available during build.
-------------------------------------------------------------------
Mon Aug 12 11:15:32 UTC 2024 - Petr Tesařík <ptesarik@suse.com>
- update to 2.0.29:
* update man and --help
* powerpc/kexec_load: add hotplug support
* kexec_load: Use new kexec flag for hotplug support
* x86-linux-setup.c: Use POSIX basename API
* LoongArch: fix load command line segment error
* LoongArch: add multi crash kernel segment support
* LoongArch: fix kernel image size error
* Arm: Fix add_buffer_phys_virt() align issue
* Fix incorrect Free Software Foundation address in the license
* util_lib/elf_info.c: fix a warning
* kexec_file: add kexec_file flag to support debug printing
* workflow: update to use checkout@v4
- drop kexec-dont-use-kexec_file_load-on-xen.patch, upstream
- drop fix-building-on-x86_64-with-binutils-2.41.patch, upstream
- kexec-tools-riscv-hotplug.patch: Fix build for riscv64.
-------------------------------------------------------------------
Wed Mar 6 16:46:15 UTC 2024 - Jiri Bohac <jbohac@suse.com>
- update to 2.0.28:
* LoongArch: Load vmlinux.efi to the link address
* LoongArch: Fix an issue with relocatable vmlinux
* m68k: fix getrandom() use with uclibc
* lzma: Relax memory limit for lzma decompressor
* kexec: ppc64: print help to stdout instead of stderr
* kexec/loongarch64: fix 'make dist' file loss issue
* crashdump/x86: set the elfcorehdr segment size for hotplug
* crashdump/x86: identify elfcorehdr segment for hotplug
* crashdump: exclude elfcorehdr segment from digest for hotplug
* crashdump: setup general hotplug support
* crashdump: introduce the hotplug command line options
* kexec: define KEXEC_UPDATE_ELFCOREHDR
* kexec: update manpage with explicit mention of clean kexec
* zboot: add loongarch kexec_load support
* zboot: enable arm64 kexec_load for zboot image
- drop 6419b008fde783fd0cc2cc266bd1c9cf35e99a0e.patch, upstream
- add fix-building-on-x86_64-with-binutils-2.41.patch:
* fix assembling on binutils >= 2.42
- refresh kexec-tools-disable-test.patch
-------------------------------------------------------------------
Fri Jan 19 16:50:42 UTC 2024 - Jiri Bohac <jbohac@suse.com>
- add kexec-dont-use-kexec_file_load-on-xen.patch:
kexec: don't use kexec_file_load on xen (bsc#1218590)

View File

@ -1,7 +1,7 @@
#
# spec file for package kexec-tools
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -18,7 +18,7 @@
# Temporarily bump version to aid package split
Name: kexec-tools
Version: 2.0.27
Version: 2.0.29
Release: 0
Summary: Tools for loading replacement kernels into memory
License: GPL-2.0-or-later
@ -29,13 +29,13 @@ Source1: https://kernel.org/pub/linux/utils/kernel/kexec/%{name}-%{versio
Source2: kexec-tools.keyring
Source3: kexec-load.service
Source4: %{name}-rpmlintrc
Patch0: 6419b008fde783fd0cc2cc266bd1c9cf35e99a0e.patch
Patch3: %{name}-disable-test.patch
Patch4: %{name}-vmcoreinfo-in-xen.patch
# https://patchwork.kernel.org/project/linux-riscv/patch/20190416123233.4779-1-mick@ics.forth.gr/
Patch5: %{name}-riscv64.patch
Patch10: %{name}-SYS_getrandom.patch
Patch11: kexec-dont-use-kexec_file_load-on-xen.patch
Patch11: %{name}-riscv-hotplug.patch
BuildRequires: aaa_base
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: systemd-rpm-macros
@ -44,7 +44,7 @@ BuildRequires: zlib-devel
#!BuildIgnore: gcc-PIE
Requires: perl-Bootloader >= 1.6
Requires(post): suse-module-tools
Requires(postun):suse-module-tools
Requires(postun): suse-module-tools
%{?systemd_requires}
%if 0%{?suse_version} == 1600
# No Xen