Index: /trunk/src/VBox/VMM/PGMPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 33779)
+++ /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 33780)
@@ -4118,4 +4118,5 @@
         return VMSetError(pVM, VERR_PGM_PHYS_NOT_RAM, RT_SRC_POS, "GCPhys=%RGp type=%d", GCPhys, PGM_PAGE_GET_TYPE(pPage));
     }
+    Assert(PGM_PAGE_GET_PDE_TYPE(pPage) != PGM_PAGE_PDE_TYPE_PDE);
 
     if (    PGM_PAGE_IS_ZERO(pPage)
Index: /trunk/src/VBox/VMM/PGMSavedState.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 33779)
+++ /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 33780)
@@ -2644,7 +2644,12 @@
                             break;
                         AssertLogRelMsgReturn(PGM_PAGE_GET_STATE(pPage) == PGM_PAGE_STATE_ALLOCATED, ("GCPhys=%RGp %R[pgmpage]\n", GCPhys, pPage), VERR_INTERNAL_ERROR_5);
-                        /* Allocated before (prealloc), so free it now. */
-                        rc = pgmPhysFreePage(pVM, pReq, &cPendingPages, pPage, GCPhys);
-                        AssertRC(rc);
+
+                        /* Free it only if it's not part of a previously allocated large page. */
+                        if (PGM_PAGE_GET_PDE_TYPE(pPage) != PGM_PAGE_PDE_TYPE_PDE)
+                        {
+                            /* Allocated before (prealloc), so free it now. */
+                            rc = pgmPhysFreePage(pVM, pReq, &cPendingPages, pPage, GCPhys);
+                            AssertRC(rc);
+                        }
                         break;
                     }
