On Wed, Nov 21, 2012 at 03:59:25PM +1100, David Gibson wrote:
> 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: David Gibson <[email protected]>

Sorry, forgot to add:

Reported-by: Alexey Kardashevskiy <[email protected]>

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Reply via email to