[packit] 2.0.27 upstream release

Upstream tag: v2.0.27
Upstream commit: 2495ccfc
This commit is contained in:
Coiby Xu 2023-10-10 15:58:01 +08:00
parent 4fa17b2ee4
commit 7af94019cf
6 changed files with 394 additions and 1 deletions

View File

@ -0,0 +1,30 @@
From 056c179cd3c2af0c3bd2762a8a3bfd1340278e9e Mon Sep 17 00:00:00 2001
From: Simon Horman <horms@kernel.org>
Date: Fri, 1 Sep 2023 09:37:24 +0200
Subject: [PATCH 1/4] kexec-tools 2.0.27.git
Add .git to version so it doesn't look like a release.
This is just so when people build code from git it can
be identified as such from the version string.
Signed-off-by: Simon Horman <horms@kernel.org>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 192976c..352eefe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl
dnl
dnl ---Required
-AC_INIT(kexec-tools, 2.0.27)
+AC_INIT(kexec-tools, 2.0.27.git)
AC_CONFIG_AUX_DIR(./config)
AC_CONFIG_HEADERS([include/config.h])
AC_LANG(C)
--
2.41.0

View File

@ -0,0 +1,43 @@
From c3f35ff06e54daf452ac49a4381cf2643c934866 Mon Sep 17 00:00:00 2001
From: Leah Neukirchen <leah@vuxu.org>
Date: Mon, 28 Aug 2023 11:58:15 +0200
Subject: [PATCH 2/4] build: fix tarball creation
The fix in 41b77edac did not work, bsdtar still complains about
"hardlink pointing to itself".
Simplify the code instead: since the staging directory contains
exactly the files we want, just package it as a whole.
Signed-off-by: Leah Neukirchen <leah@vuxu.org>
Signed-off-by: Simon Horman <horms@kernel.org>
---
Makefile.in | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index 09bbd5c..3cad22a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -179,8 +179,6 @@ GENERATED_SRCS:= $(SPEC)
TARBALL=$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar
TARBALL.gz=$(TARBALL).gz
SRCS:= $(dist)
-PSRCS:=$(foreach s, $(SRCS), $(PACKAGE_NAME)-$(PACKAGE_VERSION)/$(s))
-PGSRCS:=$(foreach s, $(GENERATED_SRCS), $(PACKAGE_NAME)-$(PACKAGE_VERSION)/$(s))
MAN_PAGES:=$(KEXEC_MANPAGE) $(VMCORE_DMESG_MANPAGE)
BINARIES_i386:=$(KEXEC_TEST)
@@ -223,8 +221,7 @@ $(TARBALL): $(SRCS) $(GENERATED_SRCS)
$(MKDIR) $(PACKAGE_NAME)-$(PACKAGE_VERSION)
$(TAR) -c $(SRCS) $(GENERATED_SRCS) | \
$(TAR) -C $(PACKAGE_NAME)-$(PACKAGE_VERSION) -x
- $(TAR) -cf $@ $(PSRCS)
- $(TAR) -rf $@ $(PGSRCS)
+ $(TAR) -cf $@ $(PACKAGE_NAME)-$(PACKAGE_VERSION)
$(RM) -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION)
$(TARBALL.gz): $(TARBALL)
--
2.41.0

View File

@ -0,0 +1,134 @@
From 8f08e3b51f25f585dc62f8e7aadc6095e06417cc Mon Sep 17 00:00:00 2001
From: Dave Young <dyoung@redhat.com>
Date: Thu, 14 Sep 2023 16:49:59 +0800
Subject: [PATCH 3/4] zboot: enable arm64 kexec_load for zboot image
kexec_file_load support of zboot kernel image decompressed the vmlinuz,
so in kexec_load code just load the kernel with reading the decompressed
kernel fd into a new buffer and use it directly.
Signed-off-by: Dave Young <dyoung@redhat.com>
Tested-by: Baoquan He <bhe@redhat.com>
Reviewed-by: Pingfan Liu <piliu@redhat.com>
Signed-off-by: Simon Horman <horms@kernel.org>
---
include/kexec-pe-zboot.h | 3 ++-
kexec/arch/arm64/kexec-vmlinuz-arm64.c | 26 +++++++++++++++++++++++---
kexec/kexec-pe-zboot.c | 4 +++-
kexec/kexec.c | 2 +-
kexec/kexec.h | 1 +
5 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/include/kexec-pe-zboot.h b/include/kexec-pe-zboot.h
index e2e0448..374916c 100644
--- a/include/kexec-pe-zboot.h
+++ b/include/kexec-pe-zboot.h
@@ -11,5 +11,6 @@ struct linux_pe_zboot_header {
uint32_t compress_type;
};
-int pez_prepare(const char *crude_buf, off_t buf_sz, int *kernel_fd);
+int pez_prepare(const char *crude_buf, off_t buf_sz, int *kernel_fd,
+ off_t *kernel_size);
#endif
diff --git a/kexec/arch/arm64/kexec-vmlinuz-arm64.c b/kexec/arch/arm64/kexec-vmlinuz-arm64.c
index c0ee47c..e291a34 100644
--- a/kexec/arch/arm64/kexec-vmlinuz-arm64.c
+++ b/kexec/arch/arm64/kexec-vmlinuz-arm64.c
@@ -34,6 +34,7 @@
#include "arch/options.h"
static int kernel_fd = -1;
+static off_t decompressed_size;
/* Returns:
* -1 : in case of error/invalid format (not a valid PE+compressed ZBOOT format.
@@ -72,7 +73,7 @@ int pez_arm64_probe(const char *kernel_buf, off_t kernel_size)
return -1;
}
- ret = pez_prepare(buf, buf_sz, &kernel_fd);
+ ret = pez_prepare(buf, buf_sz, &kernel_fd, &decompressed_size);
if (!ret) {
/* validate the arm64 specific header */
@@ -98,8 +99,27 @@ bad_header:
int pez_arm64_load(int argc, char **argv, const char *buf, off_t len,
struct kexec_info *info)
{
- info->kernel_fd = kernel_fd;
- return image_arm64_load(argc, argv, buf, len, info);
+ if (kernel_fd > 0 && decompressed_size > 0) {
+ char *kbuf;
+ off_t nread;
+ int fd;
+
+ info->kernel_fd = kernel_fd;
+ fd = dup(kernel_fd);
+ if (fd < 0) {
+ dbgprintf("%s: dup fd failed.\n", __func__);
+ return -1;
+ }
+ kbuf = slurp_fd(fd, NULL, decompressed_size, &nread);
+ if (!kbuf || nread != decompressed_size) {
+ dbgprintf("%s: slurp_fd failed.\n", __func__);
+ return -1;
+ }
+ return image_arm64_load(argc, argv, kbuf, decompressed_size, info);
+ }
+
+ dbgprintf("%s: wrong kernel file descriptor.\n", __func__);
+ return -1;
}
void pez_arm64_usage(void)
diff --git a/kexec/kexec-pe-zboot.c b/kexec/kexec-pe-zboot.c
index 2f2e052..3abd17d 100644
--- a/kexec/kexec-pe-zboot.c
+++ b/kexec/kexec-pe-zboot.c
@@ -37,7 +37,8 @@
*
* crude_buf: the content, which is read from the kernel file without any processing
*/
-int pez_prepare(const char *crude_buf, off_t buf_sz, int *kernel_fd)
+int pez_prepare(const char *crude_buf, off_t buf_sz, int *kernel_fd,
+ off_t *kernel_size)
{
int ret = -1;
int fd = 0;
@@ -110,6 +111,7 @@ int pez_prepare(const char *crude_buf, off_t buf_sz, int *kernel_fd)
goto fail_bad_header;
}
+ *kernel_size = decompressed_size;
dbgprintf("%s: done\n", __func__);
ret = 0;
diff --git a/kexec/kexec.c b/kexec/kexec.c
index c3b182e..1edbd34 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -489,7 +489,7 @@ static int add_backup_segments(struct kexec_info *info,
return 0;
}
-static char *slurp_fd(int fd, const char *filename, off_t size, off_t *nread)
+char *slurp_fd(int fd, const char *filename, off_t size, off_t *nread)
{
char *buf;
off_t progress;
diff --git a/kexec/kexec.h b/kexec/kexec.h
index ed3b499..0933389 100644
--- a/kexec/kexec.h
+++ b/kexec/kexec.h
@@ -267,6 +267,7 @@ extern void die(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));
extern void *xmalloc(size_t size);
extern void *xrealloc(void *ptr, size_t size);
+extern char *slurp_fd(int fd, const char *filename, off_t size, off_t *nread);
extern char *slurp_file(const char *filename, off_t *r_size);
extern char *slurp_file_mmap(const char *filename, off_t *r_size);
extern char *slurp_file_len(const char *filename, off_t size, off_t *nread);
--
2.41.0

View File

@ -0,0 +1,171 @@
From 2495ccfc52069ecec46031587c94b03ae66ed5d2 Mon Sep 17 00:00:00 2001
From: Dave Young <dyoung@redhat.com>
Date: Thu, 14 Sep 2023 16:50:00 +0800
Subject: [PATCH 4/4] zboot: add loongarch kexec_load support
Copy arm64 code and change for loongarch so that the kexec -c can load
a zboot image.
Note: probe zboot image first otherwise the pei-loongarch file type will
be used.
Signed-off-by: Dave Young <dyoung@redhat.com>
Signed-off-by: Simon Horman <horms@kernel.org>
---
kexec/arch/loongarch/Makefile | 1 +
kexec/arch/loongarch/image-header.h | 1 +
kexec/arch/loongarch/kexec-loongarch.c | 1 +
kexec/arch/loongarch/kexec-loongarch.h | 4 +
kexec/arch/loongarch/kexec-pez-loongarch.c | 90 ++++++++++++++++++++++
5 files changed, 97 insertions(+)
create mode 100644 kexec/arch/loongarch/kexec-pez-loongarch.c
diff --git a/kexec/arch/loongarch/Makefile b/kexec/arch/loongarch/Makefile
index 3b33b96..cee7e56 100644
--- a/kexec/arch/loongarch/Makefile
+++ b/kexec/arch/loongarch/Makefile
@@ -6,6 +6,7 @@ loongarch_KEXEC_SRCS += kexec/arch/loongarch/kexec-elf-loongarch.c
loongarch_KEXEC_SRCS += kexec/arch/loongarch/kexec-pei-loongarch.c
loongarch_KEXEC_SRCS += kexec/arch/loongarch/kexec-elf-rel-loongarch.c
loongarch_KEXEC_SRCS += kexec/arch/loongarch/crashdump-loongarch.c
+loongarch_KEXEC_SRCS += kexec/arch/loongarch/kexec-pez-loongarch.c
loongarch_MEM_REGIONS = kexec/mem_regions.c
diff --git a/kexec/arch/loongarch/image-header.h b/kexec/arch/loongarch/image-header.h
index 3b75765..223d81f 100644
--- a/kexec/arch/loongarch/image-header.h
+++ b/kexec/arch/loongarch/image-header.h
@@ -33,6 +33,7 @@ struct loongarch_image_header {
};
static const uint8_t loongarch_image_pe_sig[2] = {'M', 'Z'};
+static const uint8_t loongarch_pe_machtype[6] = {'P','E', 0x0, 0x0, 0x64, 0x62};
/**
* loongarch_header_check_pe_sig - Helper to check the loongarch image header.
diff --git a/kexec/arch/loongarch/kexec-loongarch.c b/kexec/arch/loongarch/kexec-loongarch.c
index f47c998..62ff8fd 100644
--- a/kexec/arch/loongarch/kexec-loongarch.c
+++ b/kexec/arch/loongarch/kexec-loongarch.c
@@ -165,6 +165,7 @@ int get_memory_ranges(struct memory_range **range, int *ranges,
struct file_type file_type[] = {
{"elf-loongarch", elf_loongarch_probe, elf_loongarch_load, elf_loongarch_usage},
+ {"pez-loongarch", pez_loongarch_probe, pez_loongarch_load, pez_loongarch_usage},
{"pei-loongarch", pei_loongarch_probe, pei_loongarch_load, pei_loongarch_usage},
};
int file_types = sizeof(file_type) / sizeof(file_type[0]);
diff --git a/kexec/arch/loongarch/kexec-loongarch.h b/kexec/arch/loongarch/kexec-loongarch.h
index 5120a26..2c7624f 100644
--- a/kexec/arch/loongarch/kexec-loongarch.h
+++ b/kexec/arch/loongarch/kexec-loongarch.h
@@ -27,6 +27,10 @@ int pei_loongarch_probe(const char *buf, off_t len);
int pei_loongarch_load(int argc, char **argv, const char *buf, off_t len,
struct kexec_info *info);
void pei_loongarch_usage(void);
+int pez_loongarch_probe(const char *kernel_buf, off_t kernel_size);
+int pez_loongarch_load(int argc, char **argv, const char *buf, off_t len,
+ struct kexec_info *info);
+void pez_loongarch_usage(void);
int loongarch_process_image_header(const struct loongarch_image_header *h);
diff --git a/kexec/arch/loongarch/kexec-pez-loongarch.c b/kexec/arch/loongarch/kexec-pez-loongarch.c
new file mode 100644
index 0000000..942a47c
--- /dev/null
+++ b/kexec/arch/loongarch/kexec-pez-loongarch.c
@@ -0,0 +1,90 @@
+/*
+ * LoongArch PE compressed Image (vmlinuz, ZBOOT) support.
+ * Based on arm64 code
+ */
+
+#define _GNU_SOURCE
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include "kexec.h"
+#include "kexec-loongarch.h"
+#include <kexec-pe-zboot.h>
+#include "arch/options.h"
+
+static int kernel_fd = -1;
+static off_t decompressed_size;
+
+/* Returns:
+ * -1 : in case of error/invalid format (not a valid PE+compressed ZBOOT format.
+ */
+int pez_loongarch_probe(const char *kernel_buf, off_t kernel_size)
+{
+ int ret = -1;
+ const struct loongarch_image_header *h;
+ char *buf;
+ off_t buf_sz;
+
+ buf = (char *)kernel_buf;
+ buf_sz = kernel_size;
+ if (!buf)
+ return -1;
+ h = (const struct loongarch_image_header *)buf;
+
+ dbgprintf("%s: PROBE.\n", __func__);
+ if (buf_sz < sizeof(struct loongarch_image_header)) {
+ dbgprintf("%s: Not large enough to be a PE image.\n", __func__);
+ return -1;
+ }
+ if (!loongarch_header_check_pe_sig(h)) {
+ dbgprintf("%s: Not an PE image.\n", __func__);
+ return -1;
+ }
+
+ if (buf_sz < sizeof(struct loongarch_image_header) + h->pe_header) {
+ dbgprintf("%s: PE image offset larger than image.\n", __func__);
+ return -1;
+ }
+
+ if (memcmp(&buf[h->pe_header],
+ loongarch_pe_machtype, sizeof(loongarch_pe_machtype))) {
+ dbgprintf("%s: PE header doesn't match machine type.\n", __func__);
+ return -1;
+ }
+
+ ret = pez_prepare(buf, buf_sz, &kernel_fd, &decompressed_size);
+
+ /* Fixme: add sanity check of the decompressed kernel before return */
+ return ret;
+}
+
+int pez_loongarch_load(int argc, char **argv, const char *buf, off_t len,
+ struct kexec_info *info)
+{
+ if (kernel_fd > 0 && decompressed_size > 0) {
+ char *kbuf;
+ off_t nread;
+
+ info->kernel_fd = kernel_fd;
+ /*
+ * slurp_fd will close kernel_fd, but it is safe here
+ * due to no kexec_file_load support.
+ */
+ kbuf = slurp_fd(kernel_fd, NULL, decompressed_size, &nread);
+ if (!kbuf || nread != decompressed_size) {
+ dbgprintf("%s: slurp_fd failed.\n", __func__);
+ return -1;
+ }
+ return pei_loongarch_load(argc, argv, kbuf, decompressed_size, info);
+ }
+
+ dbgprintf("%s: wrong kernel file descriptor.\n", __func__);
+ return -1;
+}
+
+void pez_loongarch_usage(void)
+{
+ printf(
+" An LoongArch vmlinuz, PE image of a compressed, little endian.\n"
+" kernel, built with ZBOOT enabled.\n\n");
+}
--
2.41.0

View File

@ -1,3 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 0.79.0.
The file was generated using packit 0.80.0.

View File

@ -106,6 +106,18 @@ Requires: systemd-udev%{?_isa}
# Patches 601 onward are generic patches
#
Patch601: kexec-tools-2.0.26-makedumpfile-Fix-wrong-exclusion-of-slab-pages-on-Linux-6.2.patch
# kexec-tools 2.0.27.git
# Author: Simon Horman <horms@kernel.org>
Patch602: 0001-kexec-tools-2.0.27.git.patch
# build: fix tarball creation
# Author: Leah Neukirchen <leah@vuxu.org>
Patch603: 0002-build-fix-tarball-creation.patch
# zboot: enable arm64 kexec_load for zboot image
# Author: Dave Young <dyoung@redhat.com>
Patch604: 0003-zboot-enable-arm64-kexec_load-for-zboot-image.patch
# zboot: add loongarch kexec_load support
# Author: Dave Young <dyoung@redhat.com>
Patch605: 0004-zboot-add-loongarch-kexec_load-support.patch
%description
kexec-tools provides /sbin/kexec binary that facilitates a new
@ -360,6 +372,9 @@ fi
%endif
%changelog
* Tue Oct 10 2023 Coiby Xu <coxu@redhat.com> - 2.0.27-1
- kexec-tools 2.0.27 (Simon Horman)
* Thu Aug 31 2023 Coiby Xu <coxu@redhat.com> - 2.0.27-1
- kexec-tools 2.0.27 (Simon Horman)