]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/xen/init.c: Do not map more pages than we can address.
authorVladimir Serbinenko <phcoder@gmail.com>
Fri, 22 Nov 2013 12:04:29 +0000 (13:04 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Fri, 22 Nov 2013 12:04:29 +0000 (13:04 +0100)
ChangeLog
grub-core/kern/xen/init.c

index 0c6d7f4b8d3e0d1057fa646fcddd5d4361091aef..b0a40c6ba73ee1cc9c7ce55231bdc546e3c636db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-22  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/xen/init.c: Do not map more pages than we can address.
+
 2013-11-22  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/efi/mm.c: Limit allocations to 2GiB when not compiling
index ab74543d16c9fdd42a3cd3ee5502703bfe5e7c58..1d8eaec1a14addb9cd48c0807f729b9a0a3d2329 100644 (file)
@@ -341,6 +341,14 @@ page2offset (grub_uint64_t page)
   return page << 12;
 }
 
+#if defined (__x86_64__) && defined (__code_model_large__)
+#define MAX_TOTAL_PAGES (1LL << (64 - 12))
+#elif defined (__x86_64__)
+#define MAX_TOTAL_PAGES (1LL << (31 - 12))
+#else
+#define MAX_TOTAL_PAGES (1LL << (32 - 12))
+#endif
+
 static void
 map_all_pages (void)
 {
@@ -355,6 +363,9 @@ map_all_pages (void)
   grub_size_t n_unusable_pages = 0;
   struct mmu_update m2p_updates[2 * MAX_N_UNUSABLE_PAGES];
 
+  if (total_pages > MAX_TOTAL_PAGES - 4)
+    total_pages = MAX_TOTAL_PAGES - 4;
+
   grub_memset (&gnttab_setver, 0, sizeof (gnttab_setver));
 
   gnttab_setver.version = 2;