diff --git a/[refs] b/[refs] index 838e4b804620..6f09487f4e6e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cf04d120d9413de581437cf9a29f138ec1178f65 +refs/heads/master: 7cb31b752c71e0bd405c1139e1907c3335877dff diff --git a/trunk/arch/x86/xen/setup.c b/trunk/arch/x86/xen/setup.c index b5a7f928234b..75bdf2ab3d7c 100644 --- a/trunk/arch/x86/xen/setup.c +++ b/trunk/arch/x86/xen/setup.c @@ -179,8 +179,13 @@ char * __init xen_memory_setup(void) e820.nr_map = 0; xen_extra_mem_start = mem_end; for (i = 0; i < memmap.nr_entries; i++) { - unsigned long long end = map[i].addr + map[i].size; + unsigned long long end; + /* Guard against non-page aligned E820 entries. */ + if (map[i].type == E820_RAM) + map[i].size -= (map[i].size + map[i].addr) % PAGE_SIZE; + + end = map[i].addr + map[i].size; if (map[i].type == E820_RAM && end > mem_end) { /* RAM off the end - may be partially included */ u64 delta = min(map[i].size, end - mem_end);