Skip to content
  • Andrei Warkentin's avatar
    page_check_range: don't bail out early after unprotecting page · cd7ccc83
    Andrei Warkentin authored
    
    
    When checking a page range, if we found that a page was
    made read-only by QEMU because it contained translated code,
    we were incorrectly returning immediately after unprotecting
    that page, rather than continuing to check the entire range,
    so we might fail to unprotect pages later in the range, or
    might incorrectly return a "success" result even if later
    pages were not writable.
    
    In particular, this could cause segfaults in a case where
    signals are delivered back to back on a target architecture
    which uses trampoline code in the stack frame (as AArch64
    currently does). The second signal causes a segfault because
    the frame cannot be written to (it was protected because
    we translated and executed the restorer trampoline, and the
    unprotect logic did not unprotect the whole range).
    
    Signed-off-by: default avatarAndrei Warkentin <andrey.warkentin@gmail.com>
    [PMM: expanded commit message a bit]
    Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    cd7ccc83