[PATCH] kdump: Retrieve saved max pfn
This patch retrieves the max_pfn being used by previous kernel and stores it in a safe location (saved_max_pfn) before it is overwritten due to user defined memory map. This pfn is used to make sure that user does not try to read the physical memory beyond saved_max_pfn. Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
d58831e416
Коммит
92aa63a5a1
|
@ -59,6 +59,9 @@
|
|||
#include "setup_arch_pre.h"
|
||||
#include <bios_ebda.h>
|
||||
|
||||
/* Forward Declaration. */
|
||||
void __init find_max_pfn(void);
|
||||
|
||||
/* This value is set up by the early boot code to point to the value
|
||||
immediately after the boot time page tables. It contains a *physical*
|
||||
address, and must not be in the .bss segment! */
|
||||
|
@ -736,6 +739,15 @@ static void __init parse_cmdline_early (char ** cmdline_p)
|
|||
if (to != command_line)
|
||||
to--;
|
||||
if (!memcmp(from+7, "exactmap", 8)) {
|
||||
#ifdef CONFIG_CRASH_DUMP
|
||||
/* If we are doing a crash dump, we
|
||||
* still need to know the real mem
|
||||
* size before original memory map is
|
||||
* reset.
|
||||
*/
|
||||
find_max_pfn();
|
||||
saved_max_pfn = max_pfn;
|
||||
#endif
|
||||
from += 8+7;
|
||||
e820.nr_map = 0;
|
||||
userdef = 1;
|
||||
|
|
|
@ -22,6 +22,10 @@ extern unsigned long min_low_pfn;
|
|||
*/
|
||||
extern unsigned long max_pfn;
|
||||
|
||||
#ifdef CONFIG_CRASH_DUMP
|
||||
extern unsigned long saved_max_pfn;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* node_bootmem_map is a map pointer - the bits represent all physical
|
||||
* memory pages (including holes) on the node.
|
||||
|
|
|
@ -33,6 +33,14 @@ EXPORT_SYMBOL(max_pfn); /* This is exported so
|
|||
* dma_get_required_mask(), which uses
|
||||
* it, can be an inline function */
|
||||
|
||||
#ifdef CONFIG_CRASH_DUMP
|
||||
/*
|
||||
* If we have booted due to a crash, max_pfn will be a very low value. We need
|
||||
* to know the amount of memory that the previous kernel used.
|
||||
*/
|
||||
unsigned long saved_max_pfn;
|
||||
#endif
|
||||
|
||||
/* return the number of _pages_ that will be allocated for the boot bitmap */
|
||||
unsigned long __init bootmem_bootmap_pages (unsigned long pages)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче