mm: remove kern_addr_valid() completely
authorKefeng Wang <wangkefeng.wang@huawei.com>
Tue, 18 Oct 2022 07:40:14 +0000 (15:40 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 9 Nov 2022 01:37:18 +0000 (17:37 -0800)
Most architectures (except arm64/x86/sparc) simply return 1 for
kern_addr_valid(), which is only used in read_kcore(), and it calls
copy_from_kernel_nofault() which could check whether the address is a
valid kernel address.  So as there is no need for kern_addr_valid(), let's
remove it.

Link: https://lkml.kernel.org/r/20221018074014.185687-1-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> [m68k]
Acked-by: Heiko Carstens <hca@linux.ibm.com> [s390]
Acked-by: Christoph Hellwig <hch@lst.de>
Acked-by: Helge Deller <deller@gmx.de> [parisc]
Acked-by: Michael Ellerman <mpe@ellerman.id.au> [powerpc]
Acked-by: Guo Ren <guoren@kernel.org> [csky]
Acked-by: Catalin Marinas <catalin.marinas@arm.com> [arm64]
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: <aou@eecs.berkeley.edu>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Chris Zankel <chris@zankel.net>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Greg Ungerer <gerg@linux-m68k.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Richard Weinberger <richard@nod.at>
Cc: Rich Felker <dalias@libc.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Stafford Horne <shorne@gmail.com>
Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Vineet Gupta <vgupta@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: Xuerui Wang <kernel@xen0n.name>
Cc: Yoshinori Sato <ysato@users.osdn.me>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
31 files changed:
arch/alpha/include/asm/pgtable.h
arch/arc/include/asm/pgtable-bits-arcv2.h
arch/arm/include/asm/pgtable-nommu.h
arch/arm/include/asm/pgtable.h
arch/arm64/include/asm/pgtable.h
arch/arm64/mm/mmu.c
arch/arm64/mm/pageattr.c
arch/csky/include/asm/pgtable.h
arch/hexagon/include/asm/page.h
arch/ia64/include/asm/pgtable.h
arch/loongarch/include/asm/pgtable.h
arch/m68k/include/asm/pgtable_mm.h
arch/m68k/include/asm/pgtable_no.h
arch/microblaze/include/asm/pgtable.h
arch/mips/include/asm/pgtable.h
arch/nios2/include/asm/pgtable.h
arch/openrisc/include/asm/pgtable.h
arch/parisc/include/asm/pgtable.h
arch/powerpc/include/asm/pgtable.h
arch/riscv/include/asm/pgtable.h
arch/s390/include/asm/pgtable.h
arch/sh/include/asm/pgtable.h
arch/sparc/include/asm/pgtable_32.h
arch/sparc/mm/init_32.c
arch/sparc/mm/init_64.c
arch/um/include/asm/pgtable.h
arch/x86/include/asm/pgtable_32.h
arch/x86/include/asm/pgtable_64.h
arch/x86/mm/init_64.c
arch/xtensa/include/asm/pgtable.h
fs/proc/kcore.c

index 3ea9661c09ffc10c969ea4059fd8ff4a27dd71fe..9e45f6735d5d2cacf678fb9c83ba8dbf04de20e5 100644 (file)
@@ -313,8 +313,6 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define kern_addr_valid(addr)  (1)
-
 #define pte_ERROR(e) \
        printk("%s:%d: bad pte %016lx.\n", __FILE__, __LINE__, pte_val(e))
 #define pmd_ERROR(e) \
index b23be557403e3dfefbfe77c72ef445fa5b9a1584..515e82db519fe332bfefd08646f6757f5c4b24d4 100644 (file)
@@ -120,8 +120,6 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define kern_addr_valid(addr)  (1)
-
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 #include <asm/hugepage.h>
 #endif
index d16aba48fa0a411d7ee851ba8ded85fe383d8e5c..25d8c7bb07e0cf9efffa120bad74329494329551 100644 (file)
@@ -21,8 +21,6 @@
 #define pgd_none(pgd)          (0)
 #define pgd_bad(pgd)           (0)
 #define pgd_clear(pgdp)
-#define kern_addr_valid(addr)  (1)
-/* FIXME */
 /*
  * PMD_SHIFT determines the size of the area a second-level page table can map
  * PGDIR_SHIFT determines what a third-level page table entry can map
index 78a532068fec2ccb083886afba64d665e8441206..00954ab1a0393ce25d414d76da5a39bb31f2f068 100644 (file)
@@ -298,10 +298,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
  */
 #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS)
 
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-/* FIXME: this is not correct */
-#define kern_addr_valid(addr)  (1)
-
 /*
  * We provide our own arch_get_unmapped_area to cope with VIPT caches.
  */
index 71a1af42f0e89775163c9d6428c22901b9a6f1e9..4873c1d6e7d0d73aa8a7c0a704548615a57855a7 100644 (file)
@@ -1021,8 +1021,6 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
  */
 #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS)
 
-extern int kern_addr_valid(unsigned long addr);
-
 #ifdef CONFIG_ARM64_MTE
 
 #define __HAVE_ARCH_PREPARE_TO_SWAP
index 9a7c38965154081eebea1936146d349989a222cb..556154d821bf43de4f5343697155d8bc062c7722 100644 (file)
@@ -814,53 +814,6 @@ void __init paging_init(void)
        create_idmap();
 }
 
-/*
- * Check whether a kernel address is valid (derived from arch/x86/).
- */
-int kern_addr_valid(unsigned long addr)
-{
-       pgd_t *pgdp;
-       p4d_t *p4dp;
-       pud_t *pudp, pud;
-       pmd_t *pmdp, pmd;
-       pte_t *ptep, pte;
-
-       addr = arch_kasan_reset_tag(addr);
-       if ((((long)addr) >> VA_BITS) != -1UL)
-               return 0;
-
-       pgdp = pgd_offset_k(addr);
-       if (pgd_none(READ_ONCE(*pgdp)))
-               return 0;
-
-       p4dp = p4d_offset(pgdp, addr);
-       if (p4d_none(READ_ONCE(*p4dp)))
-               return 0;
-
-       pudp = pud_offset(p4dp, addr);
-       pud = READ_ONCE(*pudp);
-       if (pud_none(pud))
-               return 0;
-
-       if (pud_sect(pud))
-               return pfn_valid(pud_pfn(pud));
-
-       pmdp = pmd_offset(pudp, addr);
-       pmd = READ_ONCE(*pmdp);
-       if (pmd_none(pmd))
-               return 0;
-
-       if (pmd_sect(pmd))
-               return pfn_valid(pmd_pfn(pmd));
-
-       ptep = pte_offset_kernel(pmdp, addr);
-       pte = READ_ONCE(*ptep);
-       if (pte_none(pte))
-               return 0;
-
-       return pfn_valid(pte_pfn(pte));
-}
-
 #ifdef CONFIG_MEMORY_HOTPLUG
 static void free_hotplug_page_range(struct page *page, size_t size,
                                    struct vmem_altmap *altmap)
index d107c3d434e224552ae34011a4df3319cc977516..0a741a910a6abb909902ab21b5baf6b6995685bb 100644 (file)
@@ -201,8 +201,7 @@ void __kernel_map_pages(struct page *page, int numpages, int enable)
 
 /*
  * This function is used to determine if a linear map page has been marked as
- * not-valid. Walk the page table and check the PTE_VALID bit. This is based
- * on kern_addr_valid(), which almost does what we need.
+ * not-valid. Walk the page table and check the PTE_VALID bit.
  *
  * Because this is only called on the kernel linear map,  p?d_sect() implies
  * p?d_present(). When debug_pagealloc is enabled, sections mappings are
index c3d9b92cbe61c81d030eda9cfe1d968fe10d4050..77bc6caff2d23875e0474940db012ad0fb9d5738 100644 (file)
@@ -249,9 +249,6 @@ extern void paging_init(void);
 void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
                      pte_t *pte);
 
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-#define kern_addr_valid(addr)  (1)
-
 #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
        remap_pfn_range(vma, vaddr, pfn, size, prot)
 
index 7cbf719c578ec455fa3243d7193718dd2462f150..d7d4f9fca32795ef0d921c93c7bda4d4fe732e75 100644 (file)
@@ -131,13 +131,6 @@ static inline void clear_page(void *page)
 
 #define page_to_virt(page)     __va(page_to_phys(page))
 
-/*
- * For port to Hexagon Virtual Machine, MAYBE we check for attempts
- * to reference reserved HVM space, but in any case, the VM will be
- * protected.
- */
-#define kern_addr_valid(addr)   (1)
-
 #include <asm/mem-layout.h>
 #include <asm-generic/memory_model.h>
 /* XXX Todo: implement assembly-optimized version of getorder. */
index 6925e28ae61d192ff6bfa102c9427daf5f78ce49..01517a5e677891b2a0fbaf0f454248c31ddc0f23 100644 (file)
@@ -181,22 +181,6 @@ ia64_phys_addr_valid (unsigned long addr)
        return (addr & (local_cpu_data->unimpl_pa_mask)) == 0;
 }
 
-/*
- * kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
- * memory.  For the return value to be meaningful, ADDR must be >=
- * PAGE_OFFSET.  This operation can be relatively expensive (e.g.,
- * require a hash-, or multi-level tree-lookup or something of that
- * sort) but it guarantees to return TRUE only if accessing the page
- * at that address does not cause an error.  Note that there may be
- * addresses for which kern_addr_valid() returns FALSE even though an
- * access would not cause an error (e.g., this is typically true for
- * memory mapped I/O regions.
- *
- * XXX Need to implement this for IA-64.
- */
-#define kern_addr_valid(addr)  (1)
-
-
 /*
  * Now come the defines and routines to manage and access the three-level
  * page table.
index 946704bee599ee843c9abc154355683550b1c6e0..fc70b7041b760ee71f33159a6e2365d41c71fb25 100644 (file)
@@ -421,8 +421,6 @@ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
        __update_tlb(vma, address, (pte_t *)pmdp);
 }
 
-#define kern_addr_valid(addr)  (1)
-
 static inline unsigned long pmd_pfn(pmd_t pmd)
 {
        return (pmd_val(pmd) & _PFN_MASK) >> _PFN_SHIFT;
index 9b4e2fe2ac821671ee5615801cbe791fbee4a8f1..b93c41fe2067864e5f9f3656f28a4ec5fc1aef6f 100644 (file)
@@ -145,8 +145,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
 
 #endif /* !__ASSEMBLY__ */
 
-#define kern_addr_valid(addr)  (1)
-
 /* MMU-specific headers */
 
 #ifdef CONFIG_SUN3
index bce5ca56c3883dea12147eff894e99b968d964fb..fed58da3a6b65c5adc216135b2f3a37bfaeb10b8 100644 (file)
@@ -20,7 +20,6 @@
 #define pgd_none(pgd)          (0)
 #define pgd_bad(pgd)           (0)
 #define pgd_clear(pgdp)
-#define kern_addr_valid(addr)  (1)
 #define        pmd_offset(a, b)        ((void *)0)
 
 #define PAGE_NONE      __pgprot(0)
index ba348e997dbb4a26602b9277692523b9142c3ca5..42f5988e998b8f3be833a6d7db533860edef0cf5 100644 (file)
@@ -416,9 +416,6 @@ extern unsigned long iopa(unsigned long addr);
 #define        IOMAP_NOCACHE_NONSER    2
 #define        IOMAP_NO_COPYBACK       3
 
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-#define kern_addr_valid(addr)  (1)
-
 void do_page_fault(struct pt_regs *regs, unsigned long address,
                   unsigned long error_code);
 
index 6caec386ad2f6861566588dc3a3b0a5570fe84a8..364a06033105cace5d0d3641b70dc668bfc7e122 100644 (file)
@@ -550,8 +550,6 @@ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
        __update_tlb(vma, address, pte);
 }
 
-#define kern_addr_valid(addr)  (1)
-
 /*
  * Allow physical addresses to be fixed up to help 36-bit peripherals.
  */
index b3d45e815295f8a833954efe381a7f565de14f53..ab793bc517f5cc8ff115f3659c28ce54d713333d 100644 (file)
@@ -249,8 +249,6 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
 #define __swp_entry_to_pte(swp)        ((pte_t) { (swp).val })
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 
-#define kern_addr_valid(addr)          (1)
-
 extern void __init paging_init(void);
 extern void __init mmu_init(void);
 
index dcae8aea132fdc7d5d7853c7b3c083c9f2725928..6477c17b3062d83c88ddc7765a497d07f763ec07 100644 (file)
@@ -395,8 +395,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define kern_addr_valid(addr)           (1)
-
 typedef pte_t *pte_addr_t;
 
 #endif /* __ASSEMBLY__ */
index ecd028854469856e0493e191e10b8738cf4fefed..bd09a44cfb2d4b81350a5c81db7492401e14e9ff 100644 (file)
 #include <asm/processor.h>
 #include <asm/cache.h>
 
-/*
- * kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
- * memory.  For the return value to be meaningful, ADDR must be >=
- * PAGE_OFFSET.  This operation can be relatively expensive (e.g.,
- * require a hash-, or multi-level tree-lookup or something of that
- * sort) but it guarantees to return TRUE only if accessing the page
- * at that address does not cause an error.  Note that there may be
- * addresses for which kern_addr_valid() returns FALSE even though an
- * access would not cause an error (e.g., this is typically true for
- * memory mapped I/O regions.
- *
- * XXX Need to implement this for parisc.
- */
-#define kern_addr_valid(addr)  (1)
-
 /* This is for the serialization of PxTLB broadcasts. At least on the N class
  * systems, only one PxTLB inter processor broadcast can be active at any one
  * time on the Merced bus. */
index 283f40d05a4d7ee725a3d4bf4c77ee9482ca8feb..9972626ddaf68e3c5d8d2dbd36d8fa8ff7dfd6cd 100644 (file)
@@ -81,13 +81,6 @@ void poking_init(void);
 extern unsigned long ioremap_bot;
 extern const pgprot_t protection_map[16];
 
-/*
- * kern_addr_valid is intended to indicate whether an address is a valid
- * kernel address.  Most 32-bit archs define it as always true (like this)
- * but most 64-bit archs actually perform a test.  What should we do here?
- */
-#define kern_addr_valid(addr)  (1)
-
 #ifndef CONFIG_TRANSPARENT_HUGEPAGE
 #define pmd_large(pmd)         0
 #endif
index 7ec936910a96e12d1994ceb2719eb98a2b0820d3..c7993bdf749f1d40ee1c7fccb817d60cbd3f3bcc 100644 (file)
@@ -801,8 +801,6 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
 
 #endif /* !CONFIG_MMU */
 
-#define kern_addr_valid(addr)   (1) /* FIXME */
-
 extern char _start[];
 extern void *_dtb_early_va;
 extern uintptr_t _dtb_early_pa;
index f1cb9391190db93f051602be1ac3834492fe5278..e1db072118186df58150e5300ca11b23efa39d30 100644 (file)
@@ -1773,8 +1773,6 @@ static inline swp_entry_t __swp_entry(unsigned long type, unsigned long offset)
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define kern_addr_valid(addr)   (1)
-
 extern int vmem_add_mapping(unsigned long start, unsigned long size);
 extern void vmem_remove_mapping(unsigned long start, unsigned long size);
 extern int __vmem_map_4k_page(unsigned long addr, unsigned long phys, pgprot_t prot, bool alloc);
index 6fb9ec54cf9b413ab7c1aa8a99a294f509eb161a..3ce30becf6dfa9a85f85e80a9a7cbd198816b70b 100644 (file)
@@ -92,8 +92,6 @@ static inline unsigned long phys_addr_mask(void)
 
 typedef pte_t *pte_addr_t;
 
-#define kern_addr_valid(addr)  (1)
-
 #define pte_pfn(x)             ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
 
 struct vm_area_struct;
index 8ff549004fac4920037fd7622b723c2062062a9b..5acc05b572e65f4dfe1f1c70a6f08649fd8f6b65 100644 (file)
@@ -368,12 +368,6 @@ __get_iospace (unsigned long addr)
        }
 }
 
-extern unsigned long *sparc_valid_addr_bitmap;
-
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-#define kern_addr_valid(addr) \
-       (test_bit(__pa((unsigned long)(addr))>>20, sparc_valid_addr_bitmap))
-
 /*
  * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in
  * its high 4 bits.  These macros/functions put it there or get it from there.
index d88e774c8eb49ea778b39c76d1631fdb02dea7e0..9c0ea457bdf05571e816ccb83e18a3321cd6ed03 100644 (file)
@@ -37,8 +37,7 @@
 
 #include "mm_32.h"
 
-unsigned long *sparc_valid_addr_bitmap;
-EXPORT_SYMBOL(sparc_valid_addr_bitmap);
+static unsigned long *sparc_valid_addr_bitmap;
 
 unsigned long phys_base;
 EXPORT_SYMBOL(phys_base);
index d6faee23c77dd04b8e4fd62d8541d52a7d36d3f7..04f9db0c31117936733dfe32d87438a78fcb818c 100644 (file)
@@ -1667,7 +1667,6 @@ bool kern_addr_valid(unsigned long addr)
 
        return pfn_valid(pte_pfn(*pte));
 }
-EXPORT_SYMBOL(kern_addr_valid);
 
 static unsigned long __ref kernel_map_hugepud(unsigned long vstart,
                                              unsigned long vend,
index 66bc3f99d9bef1103fca18fb583c24b3145ced90..4e3052f2671a04c4b7f6d23c0812575942ffe67b 100644 (file)
@@ -298,8 +298,6 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);
        ((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define kern_addr_valid(addr) (1)
-
 /* Clear a kernel PTE and flush it from the TLB */
 #define kpte_clear_flush(ptep, vaddr)          \
 do {                                           \
index 7c9c968a42efedcbbf83b4d9050743710c96d82a..7d4ad8907297c37600c742cca0a2013f93268858 100644 (file)
@@ -47,15 +47,6 @@ do {                                         \
 
 #endif /* !__ASSEMBLY__ */
 
-/*
- * kern_addr_valid() is (1) for FLATMEM and (0) for SPARSEMEM
- */
-#ifdef CONFIG_FLATMEM
-#define kern_addr_valid(addr)  (1)
-#else
-#define kern_addr_valid(kaddr) (0)
-#endif
-
 /*
  * This is used to calculate the .brk reservation for initial pagetables.
  * Enough space is reserved to allocate pagetables sufficient to cover all
index e479491da8d5164497f6684a87d25246202f0f1e..7929327abe009112b59ed62436d28af4929e1424 100644 (file)
@@ -240,7 +240,6 @@ static inline void native_pgd_clear(pgd_t *pgd)
 #define __swp_entry_to_pte(x)          ((pte_t) { .pte = (x).val })
 #define __swp_entry_to_pmd(x)          ((pmd_t) { .pmd = (x).val })
 
-extern int kern_addr_valid(unsigned long addr);
 extern void cleanup_highmap(void);
 
 #define HAVE_ARCH_UNMAPPED_AREA
index 3f040c6e5d13adec988114a570b52e600853d328..e8db4edd7cc9b39f96afad568285092d814039b8 100644 (file)
@@ -1416,47 +1416,6 @@ void mark_rodata_ro(void)
        debug_checkwx();
 }
 
-int kern_addr_valid(unsigned long addr)
-{
-       unsigned long above = ((long)addr) >> __VIRTUAL_MASK_SHIFT;
-       pgd_t *pgd;
-       p4d_t *p4d;
-       pud_t *pud;
-       pmd_t *pmd;
-       pte_t *pte;
-
-       if (above != 0 && above != -1UL)
-               return 0;
-
-       pgd = pgd_offset_k(addr);
-       if (pgd_none(*pgd))
-               return 0;
-
-       p4d = p4d_offset(pgd, addr);
-       if (!p4d_present(*p4d))
-               return 0;
-
-       pud = pud_offset(p4d, addr);
-       if (!pud_present(*pud))
-               return 0;
-
-       if (pud_large(*pud))
-               return pfn_valid(pud_pfn(*pud));
-
-       pmd = pmd_offset(pud, addr);
-       if (!pmd_present(*pmd))
-               return 0;
-
-       if (pmd_large(*pmd))
-               return pfn_valid(pmd_pfn(*pmd));
-
-       pte = pte_offset_kernel(pmd, addr);
-       if (pte_none(*pte))
-               return 0;
-
-       return pfn_valid(pte_pfn(*pte));
-}
-
 /*
  * Block size is the minimum amount of memory which can be hotplugged or
  * hotremoved. It must be power of two and must be equal or larger than
index 54f577c13afa1ecb9349332ed22a7d7ae471be63..5b5484d707b2e59bb69d0ca89c11645c7a90abf7 100644 (file)
@@ -386,8 +386,6 @@ ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
 
 #else
 
-#define kern_addr_valid(addr)  (1)
-
 extern  void update_mmu_cache(struct vm_area_struct * vma,
                              unsigned long address, pte_t *ptep);
 
index 98f3289556e4a1776e107720847333b8ec893936..71157ee35c1a226364531b5fc96832adb31b69e1 100644 (file)
@@ -540,25 +540,17 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
                        fallthrough;
                case KCORE_VMEMMAP:
                case KCORE_TEXT:
-                       if (kern_addr_valid(start)) {
-                               /*
-                                * Using bounce buffer to bypass the
-                                * hardened user copy kernel text checks.
-                                */
-                               if (copy_from_kernel_nofault(buf, (void *)start,
-                                               tsz)) {
-                                       if (clear_user(buffer, tsz)) {
-                                               ret = -EFAULT;
-                                               goto out;
-                                       }
-                               } else {
-                                       if (copy_to_user(buffer, buf, tsz)) {
-                                               ret = -EFAULT;
-                                               goto out;
-                                       }
+                       /*
+                        * Using bounce buffer to bypass the
+                        * hardened user copy kernel text checks.
+                        */
+                       if (copy_from_kernel_nofault(buf, (void *)start, tsz)) {
+                               if (clear_user(buffer, tsz)) {
+                                       ret = -EFAULT;
+                                       goto out;
                                }
                        } else {
-                               if (clear_user(buffer, tsz)) {
+                               if (copy_to_user(buffer, buf, tsz)) {
                                        ret = -EFAULT;
                                        goto out;
                                }