• Peter Maydell's avatar
    exec: Handle multipage ranges in invalidate_and_set_dirty() · f874bf90
    Peter Maydell authored
    The code in invalidate_and_set_dirty() needs to handle addr/length
    combinations which cross guest physical page boundaries. This can happen,
    for example, when disk I/O reads large blocks into guest RAM which previously
    held code that we have cached translations for. Unfortunately we were only
    checking the clean/dirty status of the first page in the range, and then
    were calling a tb_invalidate function which only handles ranges that don't
    cross page boundaries. Fix the function to deal with multipage ranges.
    
    The symptoms of this bug were that guest code would misbehave (eg segfault),
    in particular after a guest reboot but potentially any time the guest
    reused a page of its physical RAM for new code.
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: 's avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: 's avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-id: 1416167061-13203-1-git-send-email-peter.maydell@linaro.org
    f874bf90
exec.c 78.6 KB