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>] [day] [month] [year] [list]
Date:	Tue, 15 Oct 2013 21:15:28 +0200
From:	Geert Uytterhoeven <geert@...ux-m68k.org>
To:	"Linux/m68k" <linux-m68k@...r.kernel.org>
Cc:	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: m68k discontigmem bug

Hi,

When trying to debug kexec with a non-zero m68k_memoffset on ARAnyM, I
modified the bootinfo to remove the first 2 MiB of ST-RAM.
However, this failed with:

  | m68k_memoffset = 0x00200000
  | m68k_virt_to_node_shift = 23
  | m68k_setup_node: node = 0 (start 0x00200000 size 0x00c00000)
  |     i = 0, end = 1
  | m68k_setup_node: node = 1 (start 0x01000000 size 0x10000000)
  |     i = 1, end = 33
    overlap at 1 for chunk 1
    On node 0 totalpages: 3072
    free_area_init_node: node 0, pgdat 00371100, node_mem_map 00410800
      DMA zone: 27 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 3072 pages, LIFO batch:0
    kernel BUG at linux-m68k/mm/mm_init.c:138!

Apparently the value of "phys_to_virt(addr) >> __virt_to_node_shift()" is the
same for the end of the first node and the start of the second node, causing an
overlap warning to be printed, and a BUG() later.

Hence after dropping the 256 MiB of FastRAM it does work:

  | m68k_memoffset = 0x00200000
  | m68k_virt_to_node_shift = 18
  | m68k_setup_node: node = 0 (start 0x00200000 size 0x00c00000)
  |     i = 0, end = 47
    On node 0 totalpages: 3072
    free_area_init_node: node 0, pgdat 00371100, node_mem_map 003cc800
      DMA zone: 27 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 3072 pages, LIFO batch:0

It also works when removing the first 2 MiB of FastRAM instead, as this
sufficiently increases the start address of the second node:

  | m68k_memoffset = 0x00200000
  | m68k_virt_to_node_shift = 23
  | m68k_setup_node: node = 0 (start 0x00200000 size 0x00c00000)
  |     i = 0, end = 1
  | m68k_setup_node: node = 1 (start 0x01200000 size 0x0fe00000)
  |     i = 2, end = 33
    On node 0 totalpages: 3072
    free_area_init_node: node 0, pgdat 00371100, node_mem_map 0040f800
      DMA zone: 27 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 3072 pages, LIFO batch:0
    On node 1 totalpages: 65024
    free_area_init_node: node 1, pgdat 003719b8, node_mem_map 00433890
      DMA zone: 572 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 65024 pages, LIFO batch:15

For reference, with the standard 14 MiB of ST-RAM and 256 MiB of FastRAM,
you get:

  | m68k_memoffset = 0x00000000
  | m68k_virt_to_node_shift = 23
  | m68k_setup_node: node = 0 (start 0x00000000 size 0x00e00000)
  |     i = 0, end = 1
  | m68k_setup_node: node = 1 (start 0x01000000 size 0x10000000)
  |     i = 2, end = 33
    On node 0 totalpages: 3584
    free_area_init_node: node 0, pgdat 00371100, node_mem_map 0040c000
      DMA zone: 32 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 3584 pages, LIFO batch:0
    On node 1 totalpages: 65536
    free_area_init_node: node 1, pgdat 003719b8, node_mem_map 00430090
      DMA zone: 576 pages used for memmap
      DMA zone: 0 pages reserved
      DMA zone: 65536 pages, LIFO batch:15

P.S. Booting with ST-RAM starting at a non-zero address requires the
following (gmail-whitespace-damaged) patch:

--- a/arch/m68k/atari/stram.c
+++ b/arch/m68k/atari/stram.c
@@ -75,6 +75,7 @@ void __init atari_stram_init(void)
         */
        stram_start = phys_to_virt(0);
        kernel_in_stram = (stram_start == 0);
+return;

        for (i = 0; i < m68k_num_memory; ++i) {
                if (m68k_memory[i].addr == 0) {

P.S.2. There still seems to be a virt/phys mismatch in the NatFeat code too,
       as nfeth doesn't work when m68k_memoffset is non-zero.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@...ux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
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