• David Hildenbrand's avatar
    fs/proc/kcore: drop KCORE_REMAP and KCORE_OTHER · 3c36b419
    David Hildenbrand authored
    Patch series "fs/proc/kcore: don't read offline sections, logically offline pages and hwpoisoned pages", v3.
    
    Looking for places where the kernel might unconditionally read
    PageOffline() pages, I stumbled over /proc/kcore; turns out /proc/kcore
    needs some more love to not touch some other pages we really don't want to
    read -- i.e., hwpoisoned ones.
    
    Examples for PageOffline() pages are pages inflated in a balloon, memory
    unplugged via virtio-mem, and partially-present sections in memory added
    by the Hyper-V balloon.
    
    When reading pages inflated in a balloon, we essentially produce
    unnecessary load in the hypervisor; holes in partially present sections in
    case of Hyper-V are not accessible and already were a problem for
    /proc/vmcore, fixed in makedumpfile by detecting PageOffline() pages.  In
    the future, virtio-mem might disallow reading unplugged memory -- marked
    as PageOffline() -- in some environments, resulting in undefined behavior
    when accessed; therefore, I'm trying to identify and rework all these
    (corner) cases.
    
    With this series, there is really only access via /dev/mem, /proc/vmcore
    and kdb left after I ripped out /dev/kmem.  kdb is an advanced corner-case
    use case -- we won't care for now if someone explicitly tries to do nasty
    things by reading from/writing to physical addresses we better not touch.
    /dev/mem is a use case we won't support for virtio-mem, at least for now,
    so we'll simply disallow mapping any virtio-mem memory via /dev/mem next.
    /proc/vmcore is really only a problem when dumping the old kernel via
    something that's not makedumpfile (read: basically never), however, we'll
    try sanitizing that as well in the second kernel in the future.
    
    Tested via kcore_dump:
    	https://github.com/schlafwandler/kcore_dump
    
    This patch (of 6):
    
    Commit db779ef6 ("proc/kcore: Remove unused kclist_add_remap()")
    removed the last user of KCORE_REMAP.
    
    Commit 595dd46e ("vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault when
    dumping vsyscall user page") removed the last user of KCORE_OTHER.
    
    Let's drop both types.  While at it, also drop vaddr in "struct
    kcore_list", used by KCORE_REMAP only.
    
    Link: https://lkml.kernel.org/r/20210526093041.8800-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20210526093041.8800-2-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Roman Gushchin <guro@fb.com>
    Cc: Alex Shi <alex.shi@linux.alibaba.com>
    Cc: Steven Price <steven.price@arm.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Aili Yao <yaoaili@kingsoft.com>
    Cc: Jiri Bohac <jbohac@suse.cz>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: Wei Liu <wei.liu@kernel.org>
    Cc: Naoya Horiguchi <naoya.horiguchi@nec.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3c36b419
kcore.c 15.5 KB