[PATCH RESEND 0/3] vmss/core related fixes and enhancements
by Mathias Krause
[Resend as the original posting apaprnetly got stuck in the mail queue.]
This small patch series enhances support for VMware vmss dump and core
files by fixing some bugs I ran into.
I meanwhile realized that the register dump of patch 2 can also be seen
via 'help -r' but its formating fixes are useful nonetheless.
Please apply!
Thanks,
Mathias
Mathias Krause (3):
vmware: vmss - support huge holes in vmem
vmware: vmss - beautify and extend debug log
Support core files with "unusual" layout
netdump.c | 86 +++++++++++++++++++++++++++++++++++----------------
netdump.h | 2 ++
vmware_vmss.c | 18 +++++++++--
3 files changed, 76 insertions(+), 30 deletions(-)
--
2.20.1
4 years, 4 months
[PATCH v2 0/4] sadump, kaslr: fix failure of calculating kaslr_offset due to an sadump format restriction
by HATAYAMA Daisuke
This patch series fix failure of calculating kaslr_offset due to an
sadump format restriction.
The main part is the 4-th patch. I found some small bugs during this
work and the 2nd and 3rd are to fix them and are also needed for the
4-th patch.
This issue occurs also in makedumpfile, and I have already posted the
corresponding patch for makedumpfile at:
http://lists.infradead.org/pipermail/kexec/2020-July/020852.html
ChangeLog:
v1=>v2:
- Add Signed-off-by: in each commit description
- 4/4: Remove unused zero variable in get_sadump_smram_cpu_state_any()
- 2/4: Fix mismatch of the symbol name and the member of the symbol table
HATAYAMA Daisuke (4):
symbols: Add linux_banner_vmlinux in symbol table
symbols: fix initialization of st->{pti_init,kaiser}_vmlinux
kaslr: cleanup how to set values to the arguments of
calc_kaslr_offset()
kaslr: fix failure of calculating kaslr_offset due to an sadump format
restriction
defs.h | 1 +
kaslr_helper.c | 61 +++++++++++++++++++++++++++++++++++++++++++++-------------
sadump.c | 20 +++++++++++--------
symbols.c | 25 +++++++++++++++++++-----
4 files changed, 81 insertions(+), 26 deletions(-)
--
1.8.3.1
4 years, 4 months
[PATCH RESEND] Basic support for PaX's split module layout
by Mathias Krause
PaX and grsecurity kernels split module memory into dedicated r/x and
r/w mappings using '*_rw' and '*_rx' named member variables in 'struct
module'. To add basic support for such kernels detect the split layout
by testing for the corresponding structure members and use these
instead.
So far we limit ourself to only track module code mappings for such
kernels as adding support for separate data mappings violates lots of
invariants in the rest of our code base, thereby would require a major
rework. However, with that patch applied, module code references can be
resolved in backtraces, memory and code dumps, which makes it already
very useful for analyzing such kernels.
Signed-off-by: Mathias Krause <minipli(a)grsecurity.net>
---
Resend as the original posting got stuck in the mail queue.
defs.h | 13 +++++++++++
kernel.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++----
symbols.c | 20 ++++++++--------
3 files changed, 86 insertions(+), 15 deletions(-)
diff --git a/defs.h b/defs.h
index d7adb23b86d5..160974ed554a 100644
--- a/defs.h
+++ b/defs.h
@@ -654,12 +654,15 @@ struct new_utsname {
#define TIMER_BASES (0x20ULL)
#define IRQ_DESC_TREE_RADIX (0x40ULL)
#define IRQ_DESC_TREE_XARRAY (0x80ULL)
+#define KMOD_PAX (0x100ULL)
#define XEN() (kt->flags & ARCH_XEN)
#define OPENVZ() (kt->flags & ARCH_OPENVZ)
#define PVOPS() (kt->flags & ARCH_PVOPS)
#define PVOPS_XEN() (kt->flags & ARCH_PVOPS_XEN)
+#define PAX_MODULE_SPLIT() (kt->flags2 & KMOD_PAX)
+
#define XEN_MACHINE_TO_MFN(m) ((ulonglong)(m) >> PAGESHIFT())
#define XEN_PFN_TO_PSEUDO(p) ((ulonglong)(p) << PAGESHIFT())
@@ -1346,7 +1349,11 @@ struct offset_table { /* stash of commonly-used offsets */
long module_gpl_syms;
long module_num_gpl_syms;
long module_module_core;
+ long module_module_core_rw;
+ long module_module_core_rx;
long module_core_size;
+ long module_core_size_rw;
+ long module_core_size_rx;
long module_core_text_size;
long module_num_symtab;
long module_symtab;
@@ -1776,6 +1783,8 @@ struct offset_table { /* stash of commonly-used offsets */
long mm_struct_rss_stat;
long mm_rss_stat_count;
long module_module_init;
+ long module_module_init_rw;
+ long module_module_init_rx;
long module_init_text_size;
long cpu_context_save_fp;
long cpu_context_save_sp;
@@ -1793,6 +1802,8 @@ struct offset_table { /* stash of commonly-used offsets */
long unwind_idx_insn;
long signal_struct_nr_threads;
long module_init_size;
+ long module_init_size_rw;
+ long module_init_size_rx;
long module_percpu;
long radix_tree_node_slots;
long s390_stack_frame_back_chain;
@@ -2313,6 +2324,8 @@ struct array_table {
* in the offset table, size table or array_table.
*/
#define OFFSET(X) (OFFSET_verify(offset_table.X, (char *)__FUNCTION__, __FILE__, __LINE__, #X))
+#define MODULE_OFFSET(X,Y) (PAX_MODULE_SPLIT() ? OFFSET(Y) : OFFSET(X))
+#define MODULE_OFFSET2(X,T) MODULE_OFFSET(X, X##_##T)
#define SIZE(X) (SIZE_verify(size_table.X, (char *)__FUNCTION__, __FILE__, __LINE__, #X))
#define INVALID_OFFSET (-1)
#define INVALID_MEMBER(X) (offset_table.X == INVALID_OFFSET)
diff --git a/kernel.c b/kernel.c
index 5ed602108b87..c2b8e0a04a26 100644
--- a/kernel.c
+++ b/kernel.c
@@ -3540,6 +3540,62 @@ module_init(void)
"module_core");
MEMBER_OFFSET_INIT(module_module_init, "module",
"module_init");
+ } else if (MEMBER_EXISTS("module", "module_core_rx")) {
+ if (CRASHDEBUG(1))
+ error(INFO, "PaX module layout detected.\n");
+ kt->flags2 |= KMOD_PAX;
+
+ MEMBER_OFFSET_INIT(module_core_size_rw, "module",
+ "core_size_rw");
+ MEMBER_OFFSET_INIT(module_core_size_rx, "module",
+ "core_size_rx");
+
+ MEMBER_OFFSET_INIT(module_init_size_rw, "module",
+ "init_size_rw");
+ MEMBER_OFFSET_INIT(module_init_size_rx, "module",
+ "init_size_rx");
+
+ MEMBER_OFFSET_INIT(module_module_core_rw, "module",
+ "module_core_rw");
+ MEMBER_OFFSET_INIT(module_module_core_rx, "module",
+ "module_core_rx");
+
+ MEMBER_OFFSET_INIT(module_module_init_rw, "module",
+ "module_init_rw");
+ MEMBER_OFFSET_INIT(module_module_init_rx, "module",
+ "module_init_rx");
+ } else if (MEMBER_EXISTS("module_layout", "base_rx")) {
+ if (CRASHDEBUG(1))
+ error(INFO, "PaX module layout detected.\n");
+ kt->flags2 |= KMOD_PAX;
+
+ ASSIGN_OFFSET(module_core_size_rw) =
+ MEMBER_OFFSET("module", "core_layout") +
+ MEMBER_OFFSET("module_layout", "size_rw");
+ ASSIGN_OFFSET(module_core_size_rx) =
+ MEMBER_OFFSET("module", "core_layout") +
+ MEMBER_OFFSET("module_layout", "size_rx");
+
+ ASSIGN_OFFSET(module_init_size_rw) =
+ MEMBER_OFFSET("module", "init_layout") +
+ MEMBER_OFFSET("module_layout", "size_rw");
+ ASSIGN_OFFSET(module_init_size_rx) =
+ MEMBER_OFFSET("module", "init_layout") +
+ MEMBER_OFFSET("module_layout", "size_rx");
+
+ ASSIGN_OFFSET(module_module_core_rw) =
+ MEMBER_OFFSET("module", "core_layout") +
+ MEMBER_OFFSET("module_layout", "base_rw");
+ ASSIGN_OFFSET(module_module_core_rx) =
+ MEMBER_OFFSET("module", "core_layout") +
+ MEMBER_OFFSET("module_layout", "base_rx");
+
+ ASSIGN_OFFSET(module_module_init_rw) =
+ MEMBER_OFFSET("module", "init_layout") +
+ MEMBER_OFFSET("module_layout", "base_rw");
+ ASSIGN_OFFSET(module_module_init_rx) =
+ MEMBER_OFFSET("module", "init_layout") +
+ MEMBER_OFFSET("module_layout", "base_rx");
} else {
ASSIGN_OFFSET(module_core_size) =
MEMBER_OFFSET("module", "core_layout") +
@@ -3682,10 +3738,10 @@ module_init(void)
case KALLSYMS_V2:
if (THIS_KERNEL_VERSION >= LINUX(2,6,27)) {
numksyms = UINT(modbuf + OFFSET(module_num_symtab));
- size = UINT(modbuf + OFFSET(module_core_size));
+ size = UINT(modbuf + MODULE_OFFSET2(module_core_size, rx));
} else {
numksyms = ULONG(modbuf + OFFSET(module_num_symtab));
- size = ULONG(modbuf + OFFSET(module_core_size));
+ size = ULONG(modbuf + MODULE_OFFSET2(module_core_size, rx));
}
if (!size) {
@@ -3792,7 +3848,7 @@ verify_modules(void)
break;
case KMOD_V2:
mod_base = ULONG(modbuf +
- OFFSET(module_module_core));
+ MODULE_OFFSET2(module_module_core, rx));
break;
}
@@ -3816,10 +3872,10 @@ verify_modules(void)
OFFSET(module_name);
if (THIS_KERNEL_VERSION >= LINUX(2,6,27))
mod_size = UINT(modbuf +
- OFFSET(module_core_size));
+ MODULE_OFFSET2(module_core_size, rx));
else
mod_size = ULONG(modbuf +
- OFFSET(module_core_size));
+ MODULE_OFFSET2(module_core_size, rx));
if (strlen(module_name) < MAX_MOD_NAME)
strcpy(buf, module_name);
else
@@ -5989,6 +6045,8 @@ dump_kernel_table(int verbose)
fprintf(fp, "%sIRQ_DESC_TREE_RADIX", others++ ? "|" : "");
if (kt->flags2 & IRQ_DESC_TREE_XARRAY)
fprintf(fp, "%sIRQ_DESC_TREE_XARRAY", others++ ? "|" : "");
+ if (kt->flags2 & KMOD_PAX)
+ fprintf(fp, "%sKMOD_PAX", others++ ? "|" : "");
fprintf(fp, ")\n");
fprintf(fp, " stext: %lx\n", kt->stext);
diff --git a/symbols.c b/symbols.c
index 3b1f08af43ff..be672fcaefd9 100644
--- a/symbols.c
+++ b/symbols.c
@@ -1766,17 +1766,17 @@ store_module_symbols_v2(ulong total, int mods_installed)
if (THIS_KERNEL_VERSION >= LINUX(2,6,27)) {
nksyms = UINT(modbuf + OFFSET(module_num_symtab));
- size = UINT(modbuf + OFFSET(module_core_size));
+ size = UINT(modbuf + MODULE_OFFSET2(module_core_size, rx));
} else {
nksyms = ULONG(modbuf + OFFSET(module_num_symtab));
- size = ULONG(modbuf + OFFSET(module_core_size));
+ size = ULONG(modbuf + MODULE_OFFSET2(module_core_size, rx));
}
mod_name = modbuf + OFFSET(module_name);
lm = &st->load_modules[m++];
BZERO(lm, sizeof(struct load_module));
- lm->mod_base = ULONG(modbuf + OFFSET(module_module_core));
+ lm->mod_base = ULONG(modbuf + MODULE_OFFSET2(module_module_core, rx));
lm->module_struct = mod;
lm->mod_size = size;
if (strlen(mod_name) < MAX_MOD_NAME)
@@ -1795,23 +1795,23 @@ store_module_symbols_v2(ulong total, int mods_installed)
lm->mod_flags = MOD_EXT_SYMS;
lm->mod_ext_symcnt = mcnt;
lm->mod_init_module_ptr = ULONG(modbuf +
- OFFSET(module_module_init));
+ MODULE_OFFSET2(module_module_init, rx));
if (VALID_MEMBER(module_percpu))
lm->mod_percpu = ULONG(modbuf + OFFSET(module_percpu));
if (THIS_KERNEL_VERSION >= LINUX(2,6,27)) {
lm->mod_etext_guess = lm->mod_base +
- UINT(modbuf + OFFSET(module_core_text_size));
+ UINT(modbuf + MODULE_OFFSET(module_core_text_size, module_core_size_rx));
lm->mod_init_size =
- UINT(modbuf + OFFSET(module_init_size));
+ UINT(modbuf + MODULE_OFFSET2(module_init_size, rx));
lm->mod_init_text_size =
- UINT(modbuf + OFFSET(module_init_text_size));
+ UINT(modbuf + MODULE_OFFSET(module_init_text_size, module_init_size_rx));
} else {
lm->mod_etext_guess = lm->mod_base +
- ULONG(modbuf + OFFSET(module_core_text_size));
+ ULONG(modbuf + MODULE_OFFSET(module_core_text_size, module_core_size_rx));
lm->mod_init_size =
- ULONG(modbuf + OFFSET(module_init_size));
+ ULONG(modbuf + MODULE_OFFSET2(module_init_size, rx));
lm->mod_init_text_size =
- ULONG(modbuf + OFFSET(module_init_text_size));
+ ULONG(modbuf + MODULE_OFFSET(module_init_text_size, module_init_size_rx));
}
lm->mod_text_start = lm->mod_base;
--
2.20.1
4 years, 4 months
[PATCH] extensions: Upload crash-trace-command-2.0.tar.gz to github as well
by Bhupesh Sharma
Although we have trace.c uploaded to crash-extensions github currently,
several users (like RHEL/SUSE rpm packagers), prefer using
crash-trace-*.tar.gz directly for rpm packaging, lets upload the same to
github extensions as well.
Signed-off-by: Bhupesh Sharma <bhsharma(a)redhat.com>
---
crash-trace-command-2.0.tar.gz | Bin 0 -> 17472 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 crash-trace-command-2.0.tar.gz
diff --git a/crash-trace-command-2.0.tar.gz b/crash-trace-command-2.0.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8860f2031f35b5e25fa6e55142507fdd439d40b9
GIT binary patch
literal 17472
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
PxZi&R6GzJa02l!PI)5Lq
literal 0
HcmV?d00001
--
2.7.4
4 years, 5 months
[PATCH 0/4] sadump, kaslr: fix failure of calculating kaslr_offset due to an sadump format restriction
by HATAYAMA Daisuke
This patch series fix failure of calculating kaslr_offset due to an
sadump format restriction.
The main part is the 4-th patch. I found some small bugs during this
work and the 2nd and 3rd are to fix them and are also needed for the
4-th patch.
This issue occurs also in makedumpfile, and I have already posted the
corresponding patch for makedumpfile at:
http://lists.infradead.org/pipermail/kexec/2020-July/020852.html
HATAYAMA Daisuke (4):
symbols: Add linux_banner_vmlinux in symbol table
symbols: fix initialization of st->{pti_init,kaiser}_vmlinux
kaslr: cleanup how to set values to the arguments of
calc_kaslr_offset()
kaslr: fix failure of calculating kaslr_offset due to an sadump format
restriction
defs.h | 1 +
kaslr_helper.c | 61 +++++++++++++++++++++++++++++++++++++++++++++-------------
sadump.c | 18 ++++++++++-------
symbols.c | 25 +++++++++++++++++++-----
4 files changed, 80 insertions(+), 25 deletions(-)
--
1.8.3.1
4 years, 5 months
[PATCH 1/2] Makefile: Mention arm and arm64 as supported targets
by Bhupesh Sharma
Update the Makefile comments to note that arm and arm64
are also supported build targets.
Signed-off-by: Bhupesh Sharma <bhsharma(a)redhat.com>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 745541012f43..7062139e68bc 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@
PROGRAM=crash
#
-# Supported targets: X86 ALPHA PPC IA64 PPC64 SPARC64
+# Supported targets: X86 ALPHA ARM ARM64 PPC IA64 PPC64 SPARC64
# TARGET and GDB_CONF_FLAGS will be configured automatically by configure
#
TARGET=
--
2.7.4
4 years, 5 months
Re: [Crash-utility] EXT: Re: EXT: Re: EXT: Re: crash start in CentOS 8 - Solved
by Agrain Patrick
Hello,
Using the kernel-debuginfo packages is the solution.
The provided vmlinux has the required ' with debug_info, not stripped' tags.
'crash' is starting well.
Thanks to all for your time.
Best regards,
Patrick Agrain
-----Message d'origine-----
De : Masayoshi Mizuma [mailto:msys.mizuma@gmail.com]
Envoyé : lundi 20 juillet 2020 14:50
À : Agrain Patrick <patrick.agrain(a)al-enterprise.com>
Cc : Discussion list for crash utility usage, maintenance and development <crash-utility(a)redhat.com>
Objet : EXT: Re: [Crash-utility] EXT: Re: EXT: Re: crash start in CentOS 8
** External email - Please consider with caution **
Hello,
On 7/20/20 8:04 AM, Agrain Patrick wrote:
> Hello all,
>
> I've upgraded my Centos 8 VM to the latest kernel (4.18.0-193.6.3.el8_2.x86_64).
> I have then installed the kernel-debug packages (and dependencies), as suggested below.
>
> Now, I have following kernels in /boot:
> - vmlinuz-4.18.0-193.6.3.el8_2.x86_64
> - vmlinuz-4.18.0-193.6.3.el8_2.x86_64+debug
This is a kernel-debug pacakge, not kernel-debuginfo package.
I think you can get the kernel-debuginfo here:
http://debuginfo.centos.org/8/x86_64/Packages/
Probably you need to install kernel-debuginfo-common-x86_64 package as well.
After the debuginfo package is installed, you'll see the vmlinux as follows:
/usr/lib/debug/lib/modules/4.18.0-193.6.3.el8_2.x86_64/vmlinux
Then:
crash /usr/lib/debug/lib/modules/4.18.0-193.6.3.el8_2.x86_64/vmlinux vmcore
Could you try it?
Thanks,
Masa
> And a vmlinuz file in /lib/modules/4.18.0-193.6.3.el8_2.x86_64+debug
>
> Then, I reboot the VM on this latest kernel and extracted the vmlinux files with the extract-vmlinux script from a CentOS 4.18.0 kernel source tree.
> A last, the 'echo c > /proc/sysrq-trigger' creates the /var/crash/vmcore file.
>
> Exporting the vmcore, vmlinux-4.18.0-193.6.3.el8_2.x86_64+debug and vmlinux (from /lib/modules) on another CentOS machine and executing:
> /usr/bin/crash -d 15 vmlinux-4.18.0-193.6.3.el8_2.x86_64+debug vmcore
> returns:
> crash: vmlinux-4.18.0-193.6.3.el8_2.x86_64+debug: no .gnu_debuglink
> section
>
> Note: same result when using the exported vmlinux from /lib/modules directory.
>
> Still not driving me nut... but not far away...
>
> To be continued...
> Thanks.
> Best regards,
> Patrick
>
>
> -----Message d'origine-----
> De : crash-utility-bounces(a)redhat.com
> [mailto:crash-utility-bounces@redhat.com] De la part de Kazuhito Hagio
> Envoyé : jeudi 9 juillet 2020 07:00 À : Discussion list for crash
> utility usage, maintenance and development <crash-utility(a)redhat.com>
> Objet : EXT: Re: [Crash-utility] EXT: Re: crash start in CentOS 8
>
>
> ** External email - Please consider with caution **
>
>
> Hi Patrick,
>
>> OSRELEASE=4.18.0-147.el8.x86_64
>
> Hmm, I think you might boot the virtual machine with the original (unmodified) CentOS 8 kernel, because the address of init_uts_ns looks to be its one:
>
>> SYMBOL(init_uts_ns)=ffffffffb5a12540
>> KERNELOFFSET=33800000
>
> I happen to have a CentOS 8 machine..
>
> # grep 'D init_uts_ns' /boot/System.map-4.18.0-147.el8.x86_64
> ffffffff82212540 D init_uts_ns
> # printf "%16llx\n" $(( 0xffffffff82212540 + 0x33800000 ))
> ffffffffb5a12540
>
> while your vmcore.debuginfo has the different address:
>
>> <readmem: ffffffffb7221d64, KVADDR, "init_uts_ns", 390, (ROE),
>> d71b7c>
>
> So, which kernel do you actually want to use on the virtual machine?
> (1) The original CentOS 8 kernel
> (2) The kernel you built
>
> If it's (1), you can just install the kernel-debuginfo package corresponding to the original CentOS 8 kernel into the machine on which you want to analyze vmcores and execute:
> # crash /usr/lib/debug/lib/modules/4.18.0-147.el8.x86_64/vmlinux
> vmcore
>
> If it's (2), you need to boot the VM with the kernel and make a crash.
>
> Could you check this first?
>
> Thanks,
> Kazu
>
>
> On Mon, Jul 6, 2020 at 10:03 PM Agrain Patrick <patrick.agrain(a)al-enterprise.com> wrote:
>>
>> Hello all,
>>
>> Back on this topic:
>> I compiled a kernel with debuginfo on the Virtual Machine with CentOS8.
>> I made a crash on this same VM.
>> I transferred the vmcore and vmlinux.debuginfo files on another CentOS8 baremetal machine.
>>
>> The command '/usr/bin/crash -d 15 vmlinux.debuginfo vmcore' produces following logs, but still failing to get the crash> prompt.
>> Still KASLR ?
>>
>> Thanks in advance for any information.
>> Best regards,
>> Patrick Agrain
>>
>> -- Logs:
>> crash 7.2.6-2.el8
>> Copyright (C) 2002-2019 Red Hat, Inc.
>> Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation Copyright (C)
>> 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006, 2011, 2012
>> Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
>> Copyright (C) 2005, 2011 NEC Corporation Copyright (C) 1999, 2002,
>> 2007 Silicon Graphics, Inc.
>> Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
>> This program is free software, covered by the GNU General Public
>> License, and you are welcome to change it and/or distribute copies of
>> it under certain conditions. Enter "help copying" to see the conditions.
>> This program has absolutely no warranty. Enter "help warranty" for details.
>>
>> compressed kdump: header->utsname.machine: x86_64 compressed kdump:
>> memory bitmap offset: 2000
>> diskdump_data:
>> filename: vmcore
>> flags: 6 (KDUMP_CMPRS_LOCAL|ERROR_EXCLUDED)
>> dfd: 3
>> ofp: 0
>> machine_type: 62 (EM_X86_64)
>>
>> header: 212b5d0
>> signature: "KDUMP "
>> header_version: 6
>> utsname:
>> sysname: Linux
>> nodename: localhost.localdomain
>> release: 4.18.0-147.el8.x86_64
>> version: #1 SMP Wed Dec 4 21:51:45 UTC 2019
>> machine: x86_64
>> domainname: (none)
>> timestamp:
>> tv_sec: 5ee72d23
>> tv_usec: 0
>> status: 2 (DUMP_DH_COMPRESSED_LZO)
>> block_size: 4096
>> sub_hdr_size: 1
>> bitmap_blocks: 32
>> max_mapnr: 524288
>> total_ram_blocks: 0
>> device_blocks: 0
>> written_blocks: 0
>> current_cpu: 0
>> nr_cpus: 1
>> tasks[nr_cpus]: 0
>>
>> sub_header: 0 (n/a)
>>
>> sub_header_kdump: 212c5e0
>> phys_base: 7c00000
>> dump_level: 31 (0x1f) (DUMP_EXCLUDE_ZERO|DUMP_EXCLUDE_CACHE|DUMP_EXCLUDE_CACHE_PRI|DUMP_EXCLUDE_USER_DATA|DUMP_EXCLUDE_FREE)
>> split: 0
>> start_pfn: (unused)
>> end_pfn: (unused)
>> offset_vmcoreinfo: 4580 (0x11e4)
>> size_vmcoreinfo: 2025 (0x7e9)
>> OSRELEASE=4.18.0-147.el8.x86_64
>> PAGESIZE=4096
>> SYMBOL(init_uts_ns)=ffffffffb5a12540
>> SYMBOL(node_online_map)=ffffffffb5c06d60
>> SYMBOL(swapper_pg_dir)=ffffffffb5a0a000
>> SYMBOL(_stext)=ffffffffb4800000
>> SYMBOL(vmap_area_list)=ffffffffb5ad2a90
>> SYMBOL(mem_section)=ffff89df7ffd2000
>> LENGTH(mem_section)=2048
>> SIZE(mem_section)=16
>> OFFSET(mem_section.section_mem_map)=0
>> SIZE(page)=64
>> SIZE(pglist_data)=171968
>> SIZE(zone)=1472
>> SIZE(free_area)=88
>> SIZE(list_head)=16
>> SIZE(nodemask_t)=128
>> OFFSET(page.flags)=0
>> OFFSET(page._refcount)=52
>> OFFSET(page.mapping)=24
>> OFFSET(page.lru)=8
>> OFFSET(page._mapcount)=48
>> OFFSET(page.private)=40
>> OFFSET(page.compound_dtor)=16
>> OFFSET(page.compound_order)=17
>> OFFSET(page.compound_head)=8
>> OFFSET(pglist_data.node_zones)=0
>> OFFSET(pglist_data.nr_zones)=171232
>> OFFSET(pglist_data.node_start_pfn)=171240
>> OFFSET(pglist_data.node_spanned_pages)=171256
>> OFFSET(pglist_data.node_id)=171264
>> OFFSET(zone.free_area)=192
>> OFFSET(zone.vm_stat)=1296
>> OFFSET(zone.spanned_pages)=112
>> OFFSET(free_area.free_list)=0
>> OFFSET(list_head.next)=0
>> OFFSET(list_head.prev)=8
>> OFFSET(vmap_area.va_start)=0
>> OFFSET(vmap_area.list)=48
>> LENGTH(zone.free_area)=11
>> SYMBOL(log_buf)=ffffffffb5a5a280
>> SYMBOL(log_buf_len)=ffffffffb5a5a27c
>> SYMBOL(log_first_idx)=ffffffffb633a770
>> SYMBOL(clear_idx)=ffffffffb633a744
>> SYMBOL(log_next_idx)=ffffffffb633a760
>> SIZE(printk_log)=16
>> OFFSET(printk_log.ts_nsec)=0
>> OFFSET(printk_log.len)=8
>> OFFSET(printk_log.text_len)=10
>> OFFSET(printk_log.dict_len)=12
>> LENGTH(free_area.free_list)=5
>> NUMBER(NR_FREE_PAGES)=0
>> NUMBER(PG_lru)=5
>> NUMBER(PG_private)=12
>> NUMBER(PG_swapcache)=9
>> NUMBER(PG_swapbacked)=18
>> NUMBER(PG_slab)=8
>> NUMBER(PG_hwpoison)=22
>> NUMBER(PG_head_mask)=32768
>> NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE)=-129
>> NUMBER(HUGETLB_PAGE_DTOR)=2
>> NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE)=-257
>> NUMBER(phys_base)=130023424
>> SYMBOL(init_top_pgt)=ffffffffb5a0a000
>> NUMBER(pgtable_l5_enabled)=0
>> SYMBOL(node_data)=ffffffffb5c02580
>> LENGTH(node_data)=1024
>> KERNELOFFSET=33800000
>> NUMBER(KERNEL_IMAGE_SIZE)=1073741824
>> NUMBER(sme_mask)=0
>> CRASHTIME=1592208675
>> offset_note: 4200 (0x1068)
>> size_note: 2408 (0x968)
>> notes_buf: 2129460
>> num_vmcoredd_notes: 0
>> num_prstatus_notes: 1
>> notes[0]: 2129460 (NT_PRSTATUS)
>> si.signo: 0 si.code: 0 si.errno: 0
>> cursig: 0 sigpend: 0 sighold: 0
>> pid: 2846 ppid: 0 pgrp: 0 sid:0
>> utime: 0.000000 stime: 0.000000
>> cutime: 0.000000 cstime: 0.000000
>> ORIG_RAX: ffffffffffffffff fpvalid: 0
>> R15: 0000000000000000 R14: 00005616bb1208f0
>> R13: ffffffffb5b36fc0 R12: 0000000000000000
>> RBP: 0000000000000004 RBX: 0000000000000063
>> R11: 6873617263206120 R10: 7265676769725420
>> R9: 54203a2071527379 R8: 000000000000056a
>> RAX: ffffffffb4d12d10 RCX: 0000000000000006
>> RDX: 0000000000000000 RSI: 0000000000000086
>> RDI: 0000000000000063 RIP: ffffffffb4d12d22
>> RFLAGS: 0000000000010246 RSP: ffffb03903147e80
>> FS_BASE: 00007f5d6e06f740
>> GS_BASE: 0000000000000000
>> CS: 0010 SS: 0018 DS: 0000
>> ES: 0000 FS: 0000 GS: 0000
>> snapshot_task: 0
>> num_qemu_notes: 0
>> NOTE offsets: 1068 (NT_PRSTATUS)
>> offset_eraseinfo: 0 (0x0)
>> size_eraseinfo: 0 (0x0)
>> start_pfn_64: (unused)
>> end_pfn_64: (unused)
>> max_mapnr_64: 524288 (0x80000)
>>
>> data_offset: 22000
>> block_size: 4096
>> block_shift: 12
>> bitmap: 212f190
>> bitmap_len: 131072
>> max_mapnr: 524288 (0x80000)
>> dumpable_bitmap: 7f937ad93010
>> byte: 0
>> bit: 0
>> compressed_page: 212d5f0
>> curbufptr: 0
>>
>> page_cache_hdr[0]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 217f1d0
>> pg_hit_count: 0
>> page_cache_hdr[1]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21801d0
>> pg_hit_count: 0
>> page_cache_hdr[2]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21811d0
>> pg_hit_count: 0
>> page_cache_hdr[3]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21821d0
>> pg_hit_count: 0
>> page_cache_hdr[4]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21831d0
>> pg_hit_count: 0
>> page_cache_hdr[5]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21841d0
>> pg_hit_count: 0
>> page_cache_hdr[6]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21851d0
>> pg_hit_count: 0
>> page_cache_hdr[7]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21861d0
>> pg_hit_count: 0
>> page_cache_hdr[8]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21871d0
>> pg_hit_count: 0
>> page_cache_hdr[9]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21881d0
>> pg_hit_count: 0
>> page_cache_hdr[10]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 21891d0
>> pg_hit_count: 0
>> page_cache_hdr[11]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 218a1d0
>> pg_hit_count: 0
>> page_cache_hdr[12]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 218b1d0
>> pg_hit_count: 0
>> page_cache_hdr[13]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 218c1d0
>> pg_hit_count: 0
>> page_cache_hdr[14]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 218d1d0
>> pg_hit_count: 0
>> page_cache_hdr[15]:
>> pg_flags: 0 ()
>> pg_addr: 0
>> pg_bufptr: 218e1d0
>> pg_hit_count: 0
>>
>> page_cache_buf: 217f1d0
>> evict_index: 0
>> evictions: 0
>> accesses: 0
>> cached_reads: 0
>> valid_pages: 212a3b0
>> readmem: read_diskdump()
>> KASLR:
>> _stext from vmlinux.debuginfo: ffffffff81000000
>> _stext from vmcoreinfo: ffffffffb4800000
>> relocate: 33800000 (824MB)
>> crash: pv_init_ops exists: ARCH_PVOPS
>> VMCOREINFO: NUMBER(phys_base): 130023424 -> 7c00000 gdb
>> vmlinux.debuginfo GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software
>> Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later
>> <http://gnu.org/licenses/gpl.html>
>> This is free software: you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
>> and "show warranty" for details.
>> This GDB was configured as "x86_64-unknown-linux-gnu"...
>> GETBUF(328 -> 0)
>> GETBUF(1500 -> 1)
>>
>> WARNING: kernel relocated [824MB]: patching 109676 gdb minimal_symbol
>> values
>>
>> FREEBUF(1)
>> FREEBUF(0)
>> <readmem: ffffffffb70df958, KVADDR, "page_offset_base", 8, (FOE|Q),
>> d8b948>
>> <read_diskdump: addr: ffffffffb70df958 paddr: 3ecdf958 cnt: 8>
>> read_diskdump: paddr/pfn: 3ecdf958/3ecdf -> cache physical page:
>> 3ecdf000
>> GETBUF(328 -> 0)
>> FREEBUF(0)
>> GETBUF(1024 -> 0)
>> <readmem: ffffffffb7f0c5e0, KVADDR, "possible", 1024, (ROE), fcd120>
>> <read_diskdump: addr: ffffffffb7f0c5e0 paddr: 3fb0c5e0 cnt: 1024>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 3fb0c5e0/3fb0c
>> crash: page excluded: kernel virtual address: ffffffffb7f0c5e0 type: "possible"
>> WARNING: cannot read cpu_possible_map
>> <readmem: ffffffffb7f0bde0, KVADDR, "present", 1024, (ROE), fcd120>
>> <read_diskdump: addr: ffffffffb7f0bde0 paddr: 3fb0bde0 cnt: 544>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 3fb0bde0/3fb0b
>> crash: page excluded: kernel virtual address: ffffffffb7f0bde0 type: "present"
>> WARNING: cannot read cpu_present_map
>> <readmem: ffffffffb7f0c1e0, KVADDR, "online", 1024, (ROE), fcd120>
>> <read_diskdump: addr: ffffffffb7f0c1e0 paddr: 3fb0c1e0 cnt: 1024>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 3fb0c1e0/3fb0c
>> crash: page excluded: kernel virtual address: ffffffffb7f0c1e0 type: "online"
>> WARNING: cannot read cpu_online_map
>> <readmem: ffffffffb7f0b9e0, KVADDR, "active", 1024, (ROE), fcd120>
>> <read_diskdump: addr: ffffffffb7f0b9e0 paddr: 3fb0b9e0 cnt: 1024>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 3fb0b9e0/3fb0b
>> crash: page excluded: kernel virtual address: ffffffffb7f0b9e0 type: "active"
>> WARNING: cannot read cpu_active_map
>> FREEBUF(0)
>> <readmem: ffffffffb731a5b0, KVADDR, "pv_init_ops", 8, (ROE),
>> 7ffd3655d640>
>> <read_diskdump: addr: ffffffffb731a5b0 paddr: 3ef1a5b0 cnt: 8>
>> read_diskdump: paddr/pfn: 3ef1a5b0/3ef1a -> cache physical page:
>> 3ef1a000
>> GETBUF(328 -> 0)
>> FREEBUF(0)
>> GETBUF(328 -> 0)
>> FREEBUF(0)
>> <readmem: ffffffffb9bad1d0, KVADDR, "shadow_timekeeper xtime_sec", 8,
>> (ROE), 7ffd3655d5f0>
>> <read_diskdump: addr: ffffffffb9bad1d0 paddr: 417ad1d0 cnt: 8>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 417ad1d0/417ad
>> crash: page excluded: kernel virtual address: ffffffffb9bad1d0 type: "shadow_timekeeper xtime_sec"
>> xtime timespec.tv_sec: 900f27: Mon Apr 20 07:31:03 1970
>> <readmem: ffffffffb7221d64, KVADDR, "init_uts_ns", 390, (ROE),
>> d71b7c>
>> <read_diskdump: addr: ffffffffb7221d64 paddr: 3ee21d64 cnt: 390>
>> read_diskdump: paddr/pfn: 3ee21d64/3ee21 -> cache physical page:
>> 3ee21000
>> utsname:
>> sysname:
>> nodename:
>> release:
>> version:
>> machine:
>> domainname:
>> base kernel version: 0.0.0
>> <readmem: ffffffffb6a016c0, KVADDR, "accessible check", 8, (ROE|Q),
>> 7ffd3655af30>
>> <read_diskdump: addr: ffffffffb6a016c0 paddr: 3e6016c0 cnt: 8>
>> read_diskdump: PAGE_EXCLUDED: paddr/pfn: 3e6016c0/3e601
>> crash: page excluded: kernel virtual address: ffffffffb6a016c0 type: "accessible check"
>> crash: vmlinux.debuginfo and vmcore do not match!
>>
>> Usage:
>>
>> crash [OPTION]... NAMELIST MEMORY-IMAGE[@ADDRESS] (dumpfile form)
>> crash [OPTION]... [NAMELIST] (live system form)
>>
>> Enter "crash -h" for details.
>>
>
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
>
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
4 years, 5 months
Re: [Crash-utility] crash start in CentOS 8
by HAGIO KAZUHITO(萩尾 一仁)
Hi Bhupesh,
-----Original Message-----
> > Just FYI, with respect to the System.map file, the following Dave's post
> > would be helpful:
> > https://www.redhat.com/archives/crash-utility/2018-June/msg00002.html
> >
> > If you have the vmlinux corresponding to a running kernel, you don't need
> > the System.map file.
>
> Indeed, I remember discussing this with Dave A. some months back.
> Infact with newer KASLR enabled kernels it makes little sense to use
> System.map file as it contains the non-relocated symbol values that
> were compiled into the vmlinux file - that's why I suggested just to
> use to the vmlinux and vmcore file as an arguments while invoking the
> crash tool to Patrick.
>
> However, going back to the discussion I had with Dave A., I think the
> main point of confusion was the 'crash_whitepaper' which is still
> located at [1], and which provides the following example to invoke the
> crash utility with the System.map file, vmlinux and vmcore
> combination:
>
> Examples when running on a dumpfile:
>
> $ crash /boot/System.map vmlinux.dbg vmcore
>
> I think while this was ok for older kernels which did not support
> KASLR, for newer kernels this needs an update.
> I am trying to see if I can modify the 'crash_whitepaper' and push the
> same to github, so that users are not confused with the System.map
> option.
>
> What's your views on the same? Please let me know.
>
> [1]. https://crash-utility.github.io/crash_whitepaper.html
There are several command lines with System.map in "4. Invocation" chapter and
I think that the ones in "RHEL2.1 Kernels (or kernels built without -g flag)"
section are no problem because the reason why it's needed is explained well.
The others in the "crash -h" output in "Invocation output" section might be
a little confusing as you say if they see only the -S option's explanation..
I think it would be fine to omit the part of the output below the [mapfile]
argument and itself because the output looks to be intended almost only to
introduce the "crash -h" option. Then users see the current crash -h output
which doesn't have command lines with System.map. So, for instance:
diff --git a/crash_whitepaper.html b/crash_whitepaper.html
index 9b2e88c8acb4..7cb2608e6062 100644
--- a/crash_whitepaper.html
+++ b/crash_whitepaper.html
@@ -1166,7 +1166,8 @@ Usage:
file. If the [dumpfile] argument is not entered, the session will be
invoked on the live system using /dev/mem, which usually requires root
privileges.
-
+...
+<!-- Omit this part so that users don't use System.map needlessly.
[mapfile]
If the live system kernel, or the kernel from which the [dumpfile]
was derived, was not compiled with the -g switch, then the additional
@@ -1215,7 +1216,7 @@ Usage:
[-d num]
Set crash debug level [num]. The higher the number, the more debug data
will be printed during crash runtime.
-
+-->
</pre>
</td>
</tr>
How about this?
Thanks,
Kazu
4 years, 5 months
[PATCH] Fix spelling typos in help.c
by Masanari Iida
This patch fixes some spelling typos in help.c
(standby24x7(a)gmail.com)
---
help.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/help.c b/help.c
index 6476e28d54f9..5e98c037282a 100644
--- a/help.c
+++ b/help.c
@@ -77,7 +77,7 @@ char *program_usage_info[] = {
" value is the physical start address of the block expressed in hexadecimal.",
" The physical address value(s) will be used to create a temporary ELF header",
" in /var/tmp, which will only exist during the crash session. If a raw RAM",
- " dumpile represents a live memory source, such as that specified by the QEMU",
+ " dumpfile represents a live memory source, such as that specified by the QEMU",
" mem-path argument of a memory-backend-file object, then \"live:\" must be",
" prepended to the MEMORY-IMAGE name.",
"",
@@ -4517,7 +4517,7 @@ char *help_vm[] = {
"[-p | -P vma | -M mm | -v | -m | -x | -d | [-R reference] [pid | task]]"
"\n [-f vm_flags]",
" This command displays basic virtual memory information of a context,",
-" consisting of a pointer to its mm_struct and page dirctory, its RSS and ",
+" consisting of a pointer to its mm_struct and page directory, its RSS and ",
" total virtual memory size; and a list of pointers to each vm_area_struct,",
" its starting and ending address, vm_flags value, and file pathname. If no",
" arguments are entered, the current context is used. Additionally, the -p ",
@@ -4539,7 +4539,7 @@ char *help_vm[] = {
" it can be entered manually in order to try to resurrect the",
" virtual memory data of the task.",
" -R reference search for references to this number or filename.",
-" -m dump the mm_struct assocated with the task.",
+" -m dump the mm_struct associated with the task.",
" -v dump all of the vm_area_structs associated with the task.",
" -x override the default output format for the -m or -v options",
" with hexadecimal format.",
@@ -5196,7 +5196,7 @@ char *help_struct[] = {
" arg3 = 0",
" }",
" }\n",
-" Display the flags and virtual members of 4 contigous page structures",
+" Display the flags and virtual members of 4 contiguous page structures",
" in the mem_map page structure array:\n",
" %s> page.flags,virtual c101196c 4",
" flags = 0x8000,",
@@ -6678,7 +6678,7 @@ char *help_kmem[] = {
" and kernel stacks, and the mem_map array. If found in any of",
" those areas, the information will be dumped in the same manner as",
" if the location-specific flags were used; if contained within a",
-" curent task_struct or kernel stack, that task's context will be",
+" current task_struct or kernel stack, that task's context will be",
" displayed.",
" address when used with -s or -S, searches the kmalloc() slab subsystem",
" for the slab containing of this virtual address, showing whether",
--
2.27.0.221.ga08a83db2bf2
4 years, 5 months