• Andrey Vagin's avatar
    mm: don't lose the SOFT_DIRTY flag on mprotect · 24f91eba
    Andrey Vagin authored
    The SOFT_DIRTY bit shows that the content of memory was changed after a
    defined point in the past.  mprotect() doesn't change the content of
    memory, so it must not change the SOFT_DIRTY bit.
    
    This bug causes a malfunction: on the first iteration all pages are
    dumped.  On other iterations only pages with the SOFT_DIRTY bit are
    dumped.  So if the SOFT_DIRTY bit is cleared from a page by mistake, the
    page is not dumped and its content will be restored incorrectly.
    
    This patch does nothing with _PAGE_SWP_SOFT_DIRTY, becase pte_modify()
    is called only for present pages.
    
    Fixes commit 0f8975ec ("mm: soft-dirty bits for user memory changes
    tracking").
    Signed-off-by: default avatarAndrey Vagin <avagin@openvz.org>
    Acked-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Pavel Emelyanov <xemul@parallels.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Wen Congyang <wency@cn.fujitsu.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    24f91eba
pgtable_types.h 12.7 KB