lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4DC3958F.1090800@kernel.org>
Date:	Thu, 05 May 2011 23:30:39 -0700
From:	Yinghai Lu <yinghai@...nel.org>
To:	Stefan Hellermann <stefan@...2masters.de>
CC:	linux-kernel@...r.kernel.org
Subject: Re: early crash on ancient tablet related to no-bootmem

On 05/05/2011 03:46 PM, Stefan Hellermann wrote:
> Am 06.05.2011 00:06, schrieb Yinghai Lu:
>>
>> can you please boot with "ignore_loglevel debug memblock=debug"?
>>
> 
> Here we are:
> 
> early console in setup code
> early console in decompress_kernel
> 
> Decompressing Linux... Parsing ELF... done.
> Booting the kernel.
> Linux version 2.6.39-rc6+ (stefan@...-stefan.lan) (gcc version 4.6.0
> 20110428 (Red Hat 4.6.0-6) (GCC) ) #1 Thu May 5 19:21:50 CEST 2011
> BIOS-provided physical RAM map:
>  BIOS-88: 0000000000000000 - 000000000009f000 (usable)
>  BIOS-88: 0000000000100000 - 0000000000840000 (usable)
> bootconsole [earlyser0] enabled
> debug: ignoring loglevel setting.
> Notice: NX (Execute Disable) protection missing in CPU!
> DMI not present or invalid.
> e820 update range: 0000000000000000 - 0000000000010000 (usable) ==>
> (reserved)
> e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
> last_pfn = 0x840 max_arch_pfn = 0x100000
>     memblock_x86_reserve_range: [0x003a5000-0x003a6fff]              BRK
> MEMBLOCK configuration:
>  memory size = 0x7cf000
>  memory.cnt  = 0x2
>  memory[0x0]	[0x00000000010000-0x0000000009efff], 0x8f000 bytes
>  memory[0x1]	[0x00000000100000-0x0000000083ffff], 0x740000 bytes
>  reserved.cnt  = 0x1
>  reserved[0x0]	[0x0000000009f000-0x000000003a6fff], 0x308000 bytes
> initial memory mapped : 0 - 00800000
>     memblock_x86_reserve_range: [0x0009e000-0x0009efff]       TRAMPOLINE
> Base memory trampoline at [c009e000] 9e000 size 4096
> init_memory_mapping: 0000000000000000-0000000000840000
>  0000000000 - 0000840000 page 4k
> kernel direct mapping tables up to 840000 @ 7fa000-800000
>     memblock_x86_reserve_range: [0x007fa000-0x007fafff]          PGTABLE
> 8MB LOWMEM available.
>   mapped low ram: 0 - 00840000
>   low ram: 0 - 00840000
> Zone PFN ranges:
>   DMA      0x00000010 -> 0x00001000
>   Normal   empty
> Movable zone start PFN for each node
> early_node_map[2] active PFN ranges
>     0: 0x00000010 -> 0x0000009f
>     0: 0x00000100 -> 0x00000840
> On node 0 totalpages: 1999
> free_area_init_node: node 0, pgdat c03555a0, node_mem_map 00000200
>   DMA zone: 17 pages used for memmap
>   DMA zone: 0 pages reserved
>   DMA zone: 1982 pages, LIFO batch:0
> BUG: Int 6: CR2   (null)
>      EDI c0355868  ESI   (null)  EBP 00000830  ESP c0339f10
>      EBX c03555a0  EDX 00000006  ECX 01000000  EAX fffffff4
>      err   (null)  EIP c0361b85   CS 00000060  flg 00010082
> Stack:   (null) c031d2f2 000007be   (null) c031d2f2 00000003   (null)
> (null)
>        00000010 00000018 00000002   (null) 00000002 c0361ea8   (null)
> (null)
>        00000100 00000840 00000001   (null)   (null) c0339f8c c0339fb8
> c035e41b
> Pid: 0, comm: swapper Not tainted 2.6.39-rc6+ #1
> Call Trace:
>  [<c036edb5>] ? 0xc036edb5
>  [<c0361b85>] ? 0xc0361b85
>  [<c0361ea8>] ? 0xc0361ea8
>  [<c035e41b>] ? 0xc035e41b
>  [<c035986d>] ? 0xc035986d
>  [<c0358401>] ? 0xc0358401


please check

[PATCH] mm: Use alloc_bootmem_node_nopanic on really needed path

Stefan found nobootmem does not work on his system that only have 8M ram.

It turns out we should ignore the low limit the 16M.

Use alloc_bootmem_node_nopanic in those calling.

Reported-by: Stefan Hellermann <stefan@...2masters.de>
Signed-off-by: Yinghai LU <yinghai@...nel.org>

---
 include/linux/bootmem.h |    2 ++
 mm/page_alloc.c         |    6 +++---
 2 files changed, 5 insertions(+), 3 deletions(-)

Index: linux-2.6/include/linux/bootmem.h
===================================================================
--- linux-2.6.orig/include/linux/bootmem.h
+++ linux-2.6/include/linux/bootmem.h
@@ -111,6 +111,8 @@ extern void *__alloc_bootmem_low_node(pg
 	__alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_node(pgdat, x) \
 	__alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
+#define alloc_bootmem_node_nopanic(pgdat, x) \
+	__alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_pages_node(pgdat, x) \
 	__alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_pages_node_nopanic(pgdat, x) \
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -3564,7 +3564,7 @@ int zone_wait_table_init(struct zone *zo
 
 	if (!slab_is_available()) {
 		zone->wait_table = (wait_queue_head_t *)
-			alloc_bootmem_node(pgdat, alloc_size);
+			alloc_bootmem_node_nopanic(pgdat, alloc_size);
 	} else {
 		/*
 		 * This case means that a zone whose size was 0 gets new memory
@@ -4141,7 +4141,7 @@ static void __init setup_usemap(struct p
 	unsigned long usemapsize = usemap_size(zonesize);
 	zone->pageblock_flags = NULL;
 	if (usemapsize)
-		zone->pageblock_flags = alloc_bootmem_node(pgdat, usemapsize);
+		zone->pageblock_flags = alloc_bootmem_node_nopanic(pgdat, usemapsize);
 }
 #else
 static inline void setup_usemap(struct pglist_data *pgdat,
@@ -4307,7 +4307,7 @@ static void __init_refok alloc_node_mem_
 		size =  (end - start) * sizeof(struct page);
 		map = alloc_remap(pgdat->node_id, size);
 		if (!map)
-			map = alloc_bootmem_node(pgdat, size);
+			map = alloc_bootmem_node_nopanic(pgdat, size);
 		pgdat->node_mem_map = map + (pgdat->node_start_pfn - start);
 	}
 #ifndef CONFIG_NEED_MULTIPLE_NODES
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ