lkml.org 
[lkml]   [2021]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH 0/3] page table check
    Date
    From: Pasha Tatashin <tatashin@google.com>

    Changelog:
    v1:
    - Added ptep_clear() to mm/debug_vm_pgtable.c (thanks Anshuman Khandual)
    - Addressed documentation comments from Jonathan Corbet.

    Ensure that some memory corruptions are prevented by checking at the
    time of insertion of entries into user page tables that there is no
    illegal sharing.

    We have recently found a problem [1] that existed in kernel since 4.14.
    The problem was caused by broken page ref count and led to memory
    leaking from one process into another. The problem was accidentally
    detected by studying a dump of one process and noticing that one page
    contains memory that should not belong to this process.

    There are some other page->_refcount related problems that were recently
    fixed: [2], [3] which potentially could also lead to illegal sharing.

    In addition to hardening refcount [4] itself, this work is an attempt to
    prevent this class of memory corruption issues.

    It uses a simple state machine that is independent from regular MM logic
    to check for illegal sharing at time pages are inserted and removed
    from page tables.

    [1] https://lore.kernel.org/all/xr9335nxwc5y.fsf@gthelen2.svl.corp.google.com
    [2] https://lore.kernel.org/all/1582661774-30925-2-git-send-email-akaher@vmware.com
    [3] https://lore.kernel.org/all/20210622021423.154662-3-mike.kravetz@oracle.com
    [4] https://lore.kernel.org/all/20211026173822.502506-1-pasha.tatashin@soleen.com

    Previous versions:
    RFC: https://lore.kernel.org/all/20211116220038.116484-1-pasha.tatashin@soleen.com

    Pasha Tatashin (3):
    mm: ptep_clear() page table helper
    mm: page table check
    x86: mm: add x86_64 support for page table check

    Documentation/vm/arch_pgtable_helpers.rst | 6 +-
    Documentation/vm/index.rst | 1 +
    Documentation/vm/page_table_check.rst | 56 +++++
    MAINTAINERS | 9 +
    arch/Kconfig | 3 +
    arch/x86/Kconfig | 1 +
    arch/x86/include/asm/pgtable.h | 29 ++-
    include/linux/page_table_check.h | 147 ++++++++++++
    include/linux/pgtable.h | 8 +
    mm/Kconfig.debug | 24 ++
    mm/Makefile | 1 +
    mm/debug_vm_pgtable.c | 2 +-
    mm/khugepaged.c | 12 +-
    mm/page_alloc.c | 4 +
    mm/page_ext.c | 4 +
    mm/page_table_check.c | 261 ++++++++++++++++++++++
    16 files changed, 553 insertions(+), 15 deletions(-)
    create mode 100644 Documentation/vm/page_table_check.rst
    create mode 100644 include/linux/page_table_check.h
    create mode 100644 mm/page_table_check.c

    --
    2.34.0.rc2.393.gf8c9666880-goog

    \
     
     \ /
      Last update: 2021-11-23 22:49    [W:4.105 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site