import kexec-tools-2.0.23-9_1.el9_0
This commit is contained in:
parent
9cb4deb9ee
commit
adfa3e6375
@ -1425,25 +1425,59 @@ _get_all_kernels_from_grubby()
|
|||||||
}
|
}
|
||||||
|
|
||||||
GRUB_ETC_DEFAULT="/etc/default/grub"
|
GRUB_ETC_DEFAULT="/etc/default/grub"
|
||||||
# modify the kernel command line parameter in default grub conf
|
# Update a kernel parameter in default grub conf
|
||||||
|
#
|
||||||
|
# If a value is specified, it will be inserted in the end. Otherwise it
|
||||||
|
# would remove given kernel parameter.
|
||||||
|
#
|
||||||
|
# Note this function doesn't address the following cases,
|
||||||
|
# 1. The kernel ignores everything on the command line after a '--'. So
|
||||||
|
# simply adding the new entry to the end will fail if the cmdline
|
||||||
|
# contains a --.
|
||||||
|
# 2. If the value for a parameter contains spaces it can be quoted using
|
||||||
|
# double quotes, for example param="value with spaces". This will
|
||||||
|
# break the [^[:space:]\"] regex for the value.
|
||||||
|
# 3. Dashes and underscores in the parameter name are equivalent. So
|
||||||
|
# some_parameter and some-parameter are identical.
|
||||||
|
# 4. Some parameters, e.g. efivar_ssdt, can be given multiple times.
|
||||||
|
# 5. Some kernel parameters, e.g. quiet, doesn't have value
|
||||||
#
|
#
|
||||||
# $1: the name of the kernel command line parameter
|
# $1: the name of the kernel command line parameter
|
||||||
# $2: new value. If empty, the parameter would be removed
|
# $2: new value. If empty, given parameter would be removed
|
||||||
_update_kernel_cmdline_in_grub_etc_default()
|
_update_kernel_arg_in_grub_etc_default()
|
||||||
{
|
{
|
||||||
local _para=$1 _val=$2 _para_val _regex
|
local _para=$1 _val=$2 _para_val
|
||||||
|
|
||||||
if [[ -n $_val ]]; then
|
if [[ -n $_val ]]; then
|
||||||
_para_val="$_para=$_val"
|
_para_val="$_para=$_val"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_regex='^(GRUB_CMDLINE_LINUX=.*)([[:space:]"])'"$_para"'=[^[:space:]"]*(.*)$'
|
# Update the command line /etc/default/grub, i.e.
|
||||||
if grep -q -E "$_regex" "$GRUB_ETC_DEFAULT"; then
|
# on the line that starts with 'GRUB_CMDLINE_LINUX=',
|
||||||
sed -i -E 's/'"$_regex"'/\1\2'"$_para_val"'\3/' "$GRUB_ETC_DEFAULT"
|
# 1) remove $para=$val if the it's the first arg
|
||||||
elif [[ -n $_para_val ]]; then
|
# 2) remove all occurences of $para=$val
|
||||||
# If the kernel parameter doesn't exist, put it in the first
|
# 3) insert $_para_val to end
|
||||||
sed -i -E 's/^(GRUB_CMDLINE_LINUX=")/\1'"$_para_val"' /' "$GRUB_ETC_DEFAULT"
|
# 4) remove duplicate spaces left over by 1) or 2) or 3)
|
||||||
fi
|
# 5) remove space at the beginning of the string left over by 1) or 2) or 3)
|
||||||
|
# 6) remove space at the end of the string left over by 1) or 2) or 3)
|
||||||
|
sed -i -E "/^GRUB_CMDLINE_LINUX=/ {
|
||||||
|
s/\"${_para}=[^[:space:]\"]*/\"/g;
|
||||||
|
s/[[:space:]]+${_para}=[^[:space:]\"]*/ /g;
|
||||||
|
s/\"$/ ${_para_val}\"/
|
||||||
|
s/[[:space:]]+/ /g;
|
||||||
|
s/(\")[[:space:]]+/\1/g;
|
||||||
|
s/[[:space:]]+(\")/\1/g;
|
||||||
|
}" "$GRUB_ETC_DEFAULT"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Read the kernel arg in default grub conf.
|
||||||
|
|
||||||
|
# Note reading a kernel parameter that doesn't have a value isn't supported.
|
||||||
|
#
|
||||||
|
# $1: the name of the kernel command line parameter
|
||||||
|
_read_kernel_arg_in_grub_etc_default()
|
||||||
|
{
|
||||||
|
sed -n -E "s/^GRUB_CMDLINE_LINUX=.*[[:space:]\"]${1}=([^[:space:]\"]*).*$/\1/p" "$GRUB_ETC_DEFAULT"
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_crashkernel()
|
reset_crashkernel()
|
||||||
@ -1522,10 +1556,12 @@ reset_crashkernel()
|
|||||||
# - set the dump mode as kdump for non-ppc64le cases
|
# - set the dump mode as kdump for non-ppc64le cases
|
||||||
# - retrieved the default crashkernel value for given dump mode
|
# - retrieved the default crashkernel value for given dump mode
|
||||||
if [[ $_grubby_kernel_path == ALL && -n $_dump_mode ]]; then
|
if [[ $_grubby_kernel_path == ALL && -n $_dump_mode ]]; then
|
||||||
_update_kernel_cmdline_in_grub_etc_default crashkernel "$_crashkernel"
|
_update_kernel_arg_in_grub_etc_default crashkernel "$_crashkernel"
|
||||||
# remove the fadump if fadump is disabled
|
# remove the fadump if fadump is disabled
|
||||||
[[ $_fadump_val == off ]] && _fadump_val=""
|
if [[ $_fadump_val == off ]]; then
|
||||||
_update_kernel_cmdline_in_grub_etc_default fadump "$_fadump_val"
|
_fadump_val=""
|
||||||
|
fi
|
||||||
|
_update_kernel_arg_in_grub_etc_default fadump "$_fadump_val"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If kernel-path not specified, either
|
# If kernel-path not specified, either
|
||||||
@ -1577,6 +1613,34 @@ reset_crashkernel()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# update the crashkernel value in GRUB_ETC_DEFAULT if necessary
|
||||||
|
#
|
||||||
|
# called by reset_crashkernel_after_update and inherit its array variable
|
||||||
|
# _crashkernel_vals
|
||||||
|
update_crashkernel_in_grub_etc_default_after_update()
|
||||||
|
{
|
||||||
|
local _crashkernel _fadump_val
|
||||||
|
local _dump_mode _old_default_crashkernel _new_default_crashkernel
|
||||||
|
|
||||||
|
_crashkernel=$(_read_kernel_arg_in_grub_etc_default crashkernel)
|
||||||
|
|
||||||
|
if [[ -z $_crashkernel ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
_fadump_val=$(_read_kernel_arg_in_grub_etc_default fadump)
|
||||||
|
_dump_mode=$(get_dump_mode_by_fadump_val "$_fadump_val")
|
||||||
|
|
||||||
|
_old_default_crashkernel=${_crashkernel_vals[old_${_dump_mode}]}
|
||||||
|
_new_default_crashkernel=${_crashkernel_vals[new_${_dump_mode}]}
|
||||||
|
|
||||||
|
if [[ $_crashkernel == auto ]] ||
|
||||||
|
[[ $_crashkernel == "$_old_default_crashkernel" &&
|
||||||
|
$_new_default_crashkernel != "$_old_default_crashkernel" ]]; then
|
||||||
|
_update_kernel_arg_in_grub_etc_default crashkernel "$_new_default_crashkernel"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# shellcheck disable=SC2154 # false positive when dereferencing an array
|
# shellcheck disable=SC2154 # false positive when dereferencing an array
|
||||||
reset_crashkernel_after_update()
|
reset_crashkernel_after_update()
|
||||||
{
|
{
|
||||||
@ -1605,6 +1669,8 @@ reset_crashkernel_after_update()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
update_crashkernel_in_grub_etc_default_after_update
|
||||||
}
|
}
|
||||||
|
|
||||||
# read the value of an environ variable from given environ file path
|
# read the value of an environ variable from given environ file path
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
From 59b1726fbcc251155140c8a1972384498fee4daf Mon Sep 17 00:00:00 2001
|
||||||
|
From: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
|
||||||
|
Date: Tue, 25 Jan 2022 12:55:15 +0000
|
||||||
|
Subject: [PATCH] [PATCH] sadump, kaslr: fix failure of calculating
|
||||||
|
kaslr_offset
|
||||||
|
|
||||||
|
On kernels v5.8 or later, makedumpfile fails for memory dumps in the
|
||||||
|
sadump-related formats as follows:
|
||||||
|
|
||||||
|
# makedumpfile -f -l -d 31 -x ./vmlinux /dev/sdd4 /root/vmcore-ld31
|
||||||
|
__vtop4_x86_64: Can't get a valid pud_pte.
|
||||||
|
...110 lines of the same message...
|
||||||
|
__vtop4_x86_64: Can't get a valid pud_pte.
|
||||||
|
calc_kaslr_offset: failed to calculate kaslr_offset and phys_base; default to 0
|
||||||
|
readmem: type_addr: 1, addr:ffffffff85411858, size:8
|
||||||
|
__vtop4_x86_64: Can't get pgd (page_dir:ffffffff85411858).
|
||||||
|
readmem: Can't convert a virtual address(ffffffff059be980) to physical address.
|
||||||
|
readmem: type_addr: 0, addr:ffffffff059be980, size:1024
|
||||||
|
cpu_online_mask_init: Can't read cpu_online_mask memory.
|
||||||
|
|
||||||
|
makedumpfile Failed.
|
||||||
|
|
||||||
|
This is caused by the kernel commit 9d06c4027f21 ("x86/entry: Convert
|
||||||
|
Divide Error to IDTENTRY") that renamed divide_error to
|
||||||
|
asm_exc_divide_error, breaking logic for calculating kaslr offset.
|
||||||
|
|
||||||
|
Fix this by adding initialization of asm_exc_divide_error.
|
||||||
|
|
||||||
|
Signed-off-by: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
|
||||||
|
---
|
||||||
|
makedumpfile.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.7.0/makedumpfile.c b/makedumpfile-1.7.0/makedumpfile.c
|
||||||
|
index a51bdaf..7ed9756 100644
|
||||||
|
--- a/makedumpfile-1.7.0/makedumpfile.c
|
||||||
|
+++ b/makedumpfile-1.7.0/makedumpfile.c
|
||||||
|
@@ -1667,6 +1667,8 @@ get_symbol_info(void)
|
||||||
|
SYMBOL_INIT(cur_cpu_spec, "cur_cpu_spec");
|
||||||
|
|
||||||
|
SYMBOL_INIT(divide_error, "divide_error");
|
||||||
|
+ if (SYMBOL(divide_error) == NOT_FOUND_SYMBOL)
|
||||||
|
+ SYMBOL_INIT(divide_error, "asm_exc_divide_error");
|
||||||
|
SYMBOL_INIT(idt_table, "idt_table");
|
||||||
|
SYMBOL_INIT(saved_command_line, "saved_command_line");
|
||||||
|
SYMBOL_INIT(pti_init, "pti_init");
|
||||||
|
--
|
||||||
|
2.33.1
|
||||||
|
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
Version: 2.0.23
|
Version: 2.0.23
|
||||||
Release: 8%{?dist}
|
Release: 9_1%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Summary: The kexec/kdump userspace component
|
Summary: The kexec/kdump userspace component
|
||||||
|
|
||||||
@ -112,6 +112,7 @@ Requires: systemd-udev%{?_isa}
|
|||||||
# Patches 601 onward are generic patches
|
# Patches 601 onward are generic patches
|
||||||
#
|
#
|
||||||
Patch601: ./kexec-tools-2.0.22-01-s390_handle_R_390_PLT32DBL_reloc_entries_in_machine_apply_elf_rel_.patch
|
Patch601: ./kexec-tools-2.0.22-01-s390_handle_R_390_PLT32DBL_reloc_entries_in_machine_apply_elf_rel_.patch
|
||||||
|
Patch602: ./kexec-tools-2.0.23-makedumpfile-sadump-kaslr-fix-failure-of-calculating-kaslr_.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
kexec-tools provides /sbin/kexec binary that facilitates a new
|
kexec-tools provides /sbin/kexec binary that facilitates a new
|
||||||
@ -128,6 +129,7 @@ tar -z -x -v -f %{SOURCE9}
|
|||||||
tar -z -x -v -f %{SOURCE19}
|
tar -z -x -v -f %{SOURCE19}
|
||||||
|
|
||||||
%patch601 -p1
|
%patch601 -p1
|
||||||
|
%patch602 -p1
|
||||||
|
|
||||||
%ifarch ppc
|
%ifarch ppc
|
||||||
%define archdef ARCH=ppc
|
%define archdef ARCH=ppc
|
||||||
@ -407,6 +409,13 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Mar 7 2022 Tao Liu <ltao@redhat.com> - 2.0.23-9_1
|
||||||
|
- try to update the crashkernel in GRUB_ETC_DEFAULT after kexec-tools updates the default crashkernel value
|
||||||
|
- address the case where there are multiple values for the same kernel arg
|
||||||
|
|
||||||
|
* Fri Feb 25 2022 Tao Liu <ltao@redhat.com> - 2.0.23-9
|
||||||
|
- makedumpfile: sadump, kaslr: fix failure of calculating kaslr_offset
|
||||||
|
|
||||||
* Mon Feb 21 2022 Tao Liu <ltao@redhat.com> - 2.0.23-8
|
* Mon Feb 21 2022 Tao Liu <ltao@redhat.com> - 2.0.23-8
|
||||||
- update kernel crashkernel in posttrans RPM scriptlet when updating kexec-tools
|
- update kernel crashkernel in posttrans RPM scriptlet when updating kexec-tools
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user