There is a bug In file linux/arch/um/kernel/physmem.c init_mem() functions: *int* *init_maps*(*unsigned* *long* physmem, *unsigned* *long* iomem, *unsigned* *long* highmem) { *struct* page *p, *map; *unsigned* *long* phys_len, phys_pages, highmem_len, highmem_pages; *unsigned* *long* iomem_len, iomem_pages, total_len, total_pages; *int* i; phys_pages = physmem >> PAGE_SHIFT; phys_len = phys_pages * *sizeof*(*struct* page); iomem_pages = iomem >> PAGE_SHIFT; iomem_len = iomem_pages * *sizeof*(*struct* page); highmem_pages = highmem >> PAGE_SHIFT; highmem_len = highmem_pages * *sizeof*(*struct* page); total_pages = phys_pages + iomem_pages + highmem_pages; total_len = phys_len + iomem_pages + highmem_len; *if*(kmalloc_ok){ map = kmalloc(total_len, GFP_KERNEL); *if*(map == NULL) map = vmalloc(total_len); } *else* map = alloc_bootmem_low_pages(total_len); *if*(map == NULL) *return*(-ENOMEM); *for*(i = 0; i < total_pages; i++){ p = &map[i]; set_page_count(p, 0); SetPageReserved(p); INIT_LIST_HEAD(&p->list); } mem_map = map; max_mapnr = total_pages; *return*(0); } this line should be total_len = phys_len + iomem_len + highmem_len;