Skip to content

Commit

Permalink
get vmalloc start address from vmcoreinfo
Browse files Browse the repository at this point in the history
Below error is noticed when running crash on vmcore collected from a linux-next
kernel crash (linux-next tag next-20240121):

  # crash /boot/vmlinuz-6.8.0-rc5-next-20240221 ./vmcore
  ...
  For help, type "help".
  Type "apropos word" to search for commands related to "word"...

  crash: page excluded: kernel virtual address: c00000000219a2c0  type: "vmlist"

This occured since getting the vmalloc area base address doesn't work in
crash now, due to 'vmap_area_list' being removed in the linux kernel
6.9-rc1 with below commit:

    commit 55c49fee57af99f3c663e69dedc5b85e691bbe50
         mm/vmalloc: remove vmap_area_list

As an alternative, the commit introduced 'VMALLOC_START' in vmcoreinfo to
get base address of vmalloc area, use it to return vmallow start address
instead of depending on vmap_area_list and vmlist.

Reported-by: Sachin Sant <[email protected]>
Signed-off-by: Aditya Gupta <[email protected]>
Tested-by: Sachin Sant <[email protected]>
Acked-by: Hari Bathini <[email protected]>
  • Loading branch information
adi-g15-ibm authored and k-hagio committed Mar 19, 2024
1 parent 18bf18c commit 5b24e36
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -17220,11 +17220,20 @@ first_vmalloc_address(void)
{
static ulong vmalloc_start = 0;
ulong vm_struct, vmap_area;
char *vmalloc_start_string;

if (DUMPFILE() && vmalloc_start)
return vmalloc_start;

if (vt->flags & USE_VMAP_AREA) {
/*
* 'vmap_area_list' and 'vmlist' in Linux 6.9 and later kernels might be
* empty, prefer NUMBER(VMALLOC_START) if exported in vmcoreinfo.
*/
vmalloc_start_string = pc->read_vmcoreinfo("NUMBER(VMALLOC_START)");
if (vmalloc_start_string) {
vmalloc_start = htol(vmalloc_start_string, QUIET, NULL);
free(vmalloc_start_string);
} else if (vt->flags & USE_VMAP_AREA) {
get_symbol_data("vmap_area_list", sizeof(void *), &vmap_area);
if (!vmap_area)
return 0;
Expand Down

0 comments on commit 5b24e36

Please sign in to comment.