• David Gibson's avatar
    migration: Fix madvise breakage if host and guest have different page sizes · 45e6cee4
    David Gibson authored
    madvise(DONTNEED) will throw away the contents of the whole page at the
    given address, even if the given length is less than the page size.  One
    can argue about whether that's the correct behaviour, but that's what it's
    done for a long time in Linux at least.
    
    That means that the madvise() in ram_load(), on a setup where
    TARGET_PAGE_SIZE is smaller than the host page size, can throw away data
    in guest pages adjacent to the one it's actually processing right now,
    leading to guest memory corruption on an incoming migration.
    
    This patch therefore, disables the madvise() if the host page size is
    larger than TARGET_PAGE_SIZE.  This means we don't get the benefits of that
    madvise() in this case, but a more complete fix is more difficult to
    accomplish.  This at least fixes the guest memory corruption.
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reported-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
    45e6cee4
arch_init.c 29.2 KB