Skip to content
  1. May 01, 2021
    • Kefeng Wang's avatar
      mm, page_alloc: avoid page_to_pfn() in move_freepages() · 39ddb991
      Kefeng Wang authored
      
      
      The start_pfn and end_pfn are already available in move_freepages_block(),
      there is no need to go back and forth between page and pfn in
      move_freepages and move_freepages_block, and pfn_valid_within() should
      validate pfn first before touching the page.
      
      Link: https://lkml.kernel.org/r/20210323131215.934472-1-liushixin2@huawei.com
      Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
      Signed-off-by: default avatarLiu Shixin <liushixin2@huawei.com>
      Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      Cc: Michal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      39ddb991
    • Geert Uytterhoeven's avatar
      mm/Kconfig: remove default DISCONTIGMEM_MANUAL · d68d015a
      Geert Uytterhoeven authored
      Commit 214496cb
      
       ("ia64: make SPARSEMEM default and disable
      DISCONTIGMEM") removed the last enabler of ARCH_DISCONTIGMEM_DEFAULT,
      hence the memory model can no longer default to DISCONTIGMEM_MANUAL.
      
      Link: https://lkml.kernel.org/r/20210312141208.3465520-1-geert@linux-m68k.org
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d68d015a
    • Minchan Kim's avatar
      mm: page_alloc: dump migrate-failed pages · a1394bdd
      Minchan Kim authored
      
      
      Currently, debugging CMA allocation failures is quite limited.  The most
      common source of these failures seems to be page migration which doesn't
      provide any useful information on the reason of the failure by itself.
      alloc_contig_range can report those failures as it holds a list of
      migrate-failed pages.
      
      The information logged by dump_page() has already proven helpful for
      debugging allocation issues, like identifying long-term pinnings on
      ZONE_MOVABLE or MIGRATE_CMA.
      
      Let's use the dynamic debugging infrastructure, such that we avoid
      flooding the logs and creating a lot of noise on frequent
      alloc_contig_range() calls.  This information is helpful for debugging
      only.
      
      There are two ifdefery conditions to support common dyndbg options:
      
       - CONFIG_DYNAMIC_DEBUG_CORE && DYNAMIC_DEBUG_MODULE
         It aims for supporting the feature with only specific file with
         adding ccflags.
      
       - CONFIG_DYNAMIC_DEBUG
         It aims for supporting the feature with system wide globally.
      
      A simple example to enable the feature:
      
      Admin could enable the dump like this(by default, disabled)
      
      	echo "func alloc_contig_dump_pages +p" > control
      
      Admin could disable it.
      
      	echo "func alloc_contig_dump_pages =_" > control
      
      Detail goes Documentation/admin-guide/dynamic-debug-howto.rst
      
      A concern is utility functions in dump_page use inconsistent
      loglevels. In the future, we might want to make the loglevels
      used inside dump_page() consistent and eventually rework the way
      we log the information here. See [1].
      
      [1] https://lore.kernel.org/linux-mm/YEh4doXvyuRl5BDB@google.com/
      
      Link: https://lkml.kernel.org/r/20210311194042.825152-1-minchan@kernel.org
      Signed-off-by: default avatarMinchan Kim <minchan@kernel.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Cc: John Dias <joaodias@google.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Jason Baron <jbaron@akamai.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a1394bdd
    • Matthew Wilcox (Oracle)'s avatar
      mm/mempolicy: fix mpol_misplaced kernel-doc · 5f076944
      Matthew Wilcox (Oracle) authored
      
      
      Sphinx interprets the Return section as a list and complains about it.
      Turn it into a sentence and move it to the end of the kernel-doc to fit
      the kernel-doc style.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-8-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Michal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5f076944
    • Matthew Wilcox (Oracle)'s avatar
      mm/mempolicy: rewrite alloc_pages_vma documentation · eb350739
      Matthew Wilcox (Oracle) authored
      
      
      The current formatting doesn't quite work with kernel-doc.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-7-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Michal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eb350739
    • Matthew Wilcox (Oracle)'s avatar
      mm/mempolicy: rewrite alloc_pages documentation · 6421ec76
      Matthew Wilcox (Oracle) authored
      
      
      Document alloc_pages() for both NUMA and non-NUMA cases as kernel-doc
      doesn't care.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-6-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6421ec76
    • Matthew Wilcox (Oracle)'s avatar
      mm/mempolicy: rename alloc_pages_current to alloc_pages · d7f946d0
      Matthew Wilcox (Oracle) authored
      
      
      When CONFIG_NUMA is enabled, alloc_pages() is a wrapper around
      alloc_pages_current().  This is pointless, just implement alloc_pages()
      directly.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-5-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Mike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d7f946d0
    • Matthew Wilcox (Oracle)'s avatar
      mm/page_alloc: combine __alloc_pages and __alloc_pages_nodemask · 84172f4b
      Matthew Wilcox (Oracle) authored
      
      
      There are only two callers of __alloc_pages() so prune the thicket of
      alloc_page variants by combining the two functions together.  Current
      callers of __alloc_pages() simply add an extra 'NULL' parameter and
      current callers of __alloc_pages_nodemask() call __alloc_pages() instead.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-4-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Mike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      84172f4b
    • Matthew Wilcox (Oracle)'s avatar
      mm/page_alloc: rename gfp_mask to gfp · 6e5e0f28
      Matthew Wilcox (Oracle) authored
      
      
      Shorten some overly-long lines by renaming this identifier.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-3-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Mike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6e5e0f28
    • Matthew Wilcox (Oracle)'s avatar
      mm/page_alloc: rename alloc_mask to alloc_gfp · 8e6a930b
      Matthew Wilcox (Oracle) authored
      
      
      Patch series "Rationalise __alloc_pages wrappers", v3.
      
      I was poking around the __alloc_pages variants trying to understand why
      they each exist, and couldn't really find a good justification for keeping
      __alloc_pages and __alloc_pages_nodemask as separate functions.  That led
      to getting rid of alloc_pages_current() and then I noticed the
      documentation was bad, and then I noticed the mempolicy documentation
      wasn't included.
      
      Anyway, this is all cleanups & doc fixes.
      
      This patch (of 7):
      
      We have two masks involved -- the nodemask and the gfp mask, so alloc_mask
      is an unclear name.
      
      Link: https://lkml.kernel.org/r/20210225150642.2582252-2-willy@infradead.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Mike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8e6a930b
    • Yu Zhao's avatar
      include/linux/page-flags-layout.h: cleanups · 1587db62
      Yu Zhao authored
      
      
      Tidy things up and delete comments stating the obvious with typos or
      making no sense.
      
      Link: https://lkml.kernel.org/r/20210303071609.797782-2-yuzhao@google.com
      Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1587db62
    • Yu Zhao's avatar
      include/linux/page-flags-layout.h: correctly determine LAST_CPUPID_WIDTH · f73c6c88
      Yu Zhao authored
      
      
      The naming convention used in include/linux/page-flags-layout.h:
        *_SHIFT: the number of bits trying to allocate
        *_WIDTH: the number of bits successfully allocated
      
      So when it comes to LAST_CPUPID_WIDTH, we need to check whether all
      previous *_WIDTH and LAST_CPUPID_SHIFT can fit into page flags. This
      means we need to use NODES_WIDTH, not NODES_SHIFT.
      
      Link: https://lkml.kernel.org/r/20210303071609.797782-1-yuzhao@google.com
      Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f73c6c88
    • Minchan Kim's avatar
      mm: remove lru_add_drain_all in alloc_contig_range · cef4c7d2
      Minchan Kim authored
      __alloc_contig_migrate_range already has lru_add_drain_all call via
      migrate_prep.  It's necessary to move LRU taget pages into LRU list to be
      able to isolated.  However, lru_add_drain_all call after
      __alloc_contig_migrate_range is pointless since it has changed source page
      freeing from putback_lru_pages to put_page[1].
      
      This patch removes it.
      
      [1] c6c919eb
      
      , ("mm: use put_page() to free page instead of putback_lru_page()"
      
      Link: https://lkml.kernel.org/r/20210303204512.2863087-1-minchan@kernel.org
      Signed-off-by: default avatarMinchan Kim <minchan@kernel.org>
      Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cef4c7d2
    • David Hildenbrand's avatar
      mm/page_alloc: drop pr_info_ratelimited() in alloc_contig_range() · 77febec2
      David Hildenbrand authored
      
      
      The information that some PFNs are busy is:
      
      a) not helpful for ordinary users: we don't even know *who* called
         alloc_contig_range(). This is certainly not worth a pr_info.*().
      
      b) not really helpful for debugging: we don't have any details *why*
         these PFNs are busy, and that is what we usually care about.
      
      c) not complete: there are other cases where we fail alloc_contig_range()
         using different paths that are not getting recorded.
      
      For example, we reach this path once we succeeded in isolating pageblocks,
      but failed to migrate some pages - which can happen easily on ZONE_NORMAL
      (i.e., has_unmovable_pages() is racy) but also on ZONE_MOVABLE i.e., we
      would have to retry longer to migrate).
      
      For example via virtio-mem when unplugging memory, we can create quite
      some noise (especially with ZONE_NORMAL) that is not of interest to users
      - it's expected that some allocations may fail as memory is busy.
      
      Let's just drop that pr_info_ratelimit() and rather implement a dynamic
      debugging mechanism in the future that can give us a better reason why
      alloc_contig_range() failed on specific pages.
      
      Link: https://lkml.kernel.org/r/20210301150945.77012-1-david@redhat.com
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
      Acked-by: default avatarMinchan Kim <minchan@kernel.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      77febec2
    • Kefeng Wang's avatar
      mm: move mem_init_print_info() into mm_init() · 1f9d03c5
      Kefeng Wang authored
      
      
      mem_init_print_info() is called in mem_init() on each architecture, and
      pass NULL argument, so using void argument and move it into mm_init().
      
      Link: https://lkml.kernel.org/r/20210317015210.33641-1-wangkefeng.wang@huawei.com
      Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
      Acked-by: Dave Hansen <dave.hansen@linux.intel.com>	[x86]
      Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr>	[powerpc]
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Tested-by: Anatoly Pugachev <matorola@gmail.com>	[sparc64]
      Acked-by: Russell King <rmk+kernel@armlinux.org.uk>	[arm]
      Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: Guo Ren <guoren@kernel.org>
      Cc: Yoshinori Sato <ysato@users.osdn.me>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Jonas Bonn <jonas@southpole.se>
      Cc: Palmer Dabbelt <palmer@dabbelt.com>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: "Peter Zijlstra" <peterz@infradead.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1f9d03c5
    • Zqiang's avatar
      irq_work: record irq_work_queue() call stack · e2b5bcf9
      Zqiang authored
      
      
      Add the irq_work_queue() call stack into the KASAN auxiliary stack in
      order to improve KASAN reports.  this will let us know where the irq work
      be queued.
      
      Link: https://lkml.kernel.org/r/20210331063202.28770-1-qiang.zhang@windriver.com
      Signed-off-by: default avatarZqiang <qiang.zhang@windriver.com>
      Reviewed-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Acked-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
      Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Matthias Brugger <matthias.bgg@gmail.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Walter Wu <walter-zh.wu@mediatek.com>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e2b5bcf9
    • Andrey Konovalov's avatar
      kasan: detect false-positives in tests · 99734b53
      Andrey Konovalov authored
      
      
      Currently, KASAN-KUnit tests can check that a particular annotated part of
      code causes a KASAN report.  However, they do not check that no unwanted
      reports happen between the annotated parts.
      
      This patch implements these checks.
      
      It is done by setting report_data.report_found to false in
      kasan_test_init() and at the end of KUNIT_EXPECT_KASAN_FAIL() and then
      checking that it remains false at the beginning of
      KUNIT_EXPECT_KASAN_FAIL() and in kasan_test_exit().
      
      kunit_add_named_resource() call is moved to kasan_test_init(), and the
      value of fail_data.report_expected is kept as false in between
      KUNIT_EXPECT_KASAN_FAIL() annotations for consistency.
      
      Link: https://lkml.kernel.org/r/48079c52cc329fbc52f4386996598d58022fb872.1617207873.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      99734b53
    • Walter Wu's avatar
      kasan: record task_work_add() call stack · 23f61f0f
      Walter Wu authored
      
      
      Why record task_work_add() call stack?  Syzbot reports many use-after-free
      issues for task_work, see [1].  After seeing the free stack and the
      current auxiliary stack, we think they are useless, we don't know where
      the work was registered.  This work may be the free call stack, so we miss
      the root cause and don't solve the use-after-free.
      
      Add the task_work_add() call stack into the KASAN auxiliary stack in order
      to improve KASAN reports.  It helps programmers solve use-after-free
      issues.
      
      [1]: https://groups.google.com/g/syzkaller-bugs/search?q=kasan%20use-after-free%20task_work_run
      
      Link: https://lkml.kernel.org/r/20210316024410.19967-1-walter-zh.wu@mediatek.com
      Signed-off-by: default avatarWalter Wu <walter-zh.wu@mediatek.com>
      Suggested-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Reviewed-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Reviewed-by: default avatarJens Axboe <axboe@kernel.dk>
      Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
      Acked-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Cc: Andrey Ryabinin <...
      23f61f0f
    • Andrey Konovalov's avatar
      kasan: docs: update tests section · fc23c074
      Andrey Konovalov authored
      
      
      Update the "Tests" section in KASAN documentation:
      
       - Add an introductory sentence.
      
       - Add proper indentation for the list of ways to run KUnit tests.
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/fb08845e25c8847ffda271fa19cda2621c04a65b.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fc23c074
    • Andrey Konovalov's avatar
      kasan: docs: update ignoring accesses section · fe547fca
      Andrey Konovalov authored
      
      
      Update the "Ignoring accesses" section in KASAN documentation:
      
       - Mention __no_sanitize_address/noinstr.
      
       - Mention kasan_disable/enable_current().
      
       - Mention kasan_reset_tag()/page_kasan_tag_reset().
      
       - Readability and punctuation clean-ups.
      
      Link: https://lkml.kernel.org/r/4531ba5f3eca61f6aade863c136778cc8c807a64.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fe547fca
    • Andrey Konovalov's avatar
      kasan: docs: update shadow memory section · 67ca1c0b
      Andrey Konovalov authored
      
      
      Update the "Shadow memory" section in KASAN documentation:
      
       - Rearrange the introduction paragraph do it doesn't give a
         "KASAN has an issue" impression.
      
       - Update the list of architectures with vmalloc support.
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/00f8c38b0fd5290a3f4dced04eaba41383e67e14.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      67ca1c0b
    • Andrey Konovalov's avatar
      kasan: docs: update HW_TAGS implementation details section · bb48675e
      Andrey Konovalov authored
      
      
      Update the "Implementation details" section for HW_TAGS KASAN:
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/ee2caf4c138cc1fd239822c2abefd5af6c057744.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bb48675e
    • Andrey Konovalov's avatar
      kasan: docs: update SW_TAGS implementation details section · a6c18d4e
      Andrey Konovalov authored
      
      
      Update the "Implementation details" section for SW_TAGS KASAN:
      
       - Clarify the introduction sentence.
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/69b9b2e49d8cf789358fa24558be3fc0ce4ee32c.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a6c18d4e
    • Andrey Konovalov's avatar
      kasan: docs: update GENERIC implementation details section · b8191d7d
      Andrey Konovalov authored
      
      
      Update the "Implementation details" section for generic KASAN:
      
       - Don't mention kmemcheck, it's not present in the kernel anymore.
      
       - Don't mention GCC as the only supported compiler.
      
       - Update kasan_mem_to_shadow() definition to match actual code.
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/f2f35fdab701f8c709f63d328f98aec2982c8acc.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b8191d7d
    • Andrey Konovalov's avatar
      kasan: docs: update boot parameters section · f3590747
      Andrey Konovalov authored
      
      
      Update the "Boot parameters" section in KASAN documentation:
      
       - Mention panic_on_warn.
      
       - Mention kasan_multi_shot and its interaction with panic_on_warn.
      
       - Clarify kasan.fault=panic interaction with panic_on_warn.
      
       - A readability clean-up.
      
      Link: https://lkml.kernel.org/r/01364952f15789948f0627d6733b5cdf5209f83a.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f3590747
    • Andrey Konovalov's avatar
      kasan: docs: update error reports section · 836f79a2
      Andrey Konovalov authored
      
      
      Update the "Error reports" section in KASAN documentation:
      
       - Mention that bug titles are best-effort.
      
       - Move and reword the part about auxiliary stacks from "Implementation
         details".
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/3531e8fe6972cf39d1954e3643237b19eb21227e.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      836f79a2
    • Andrey Konovalov's avatar
      kasan: docs: update usage section · 86e6f08d
      Andrey Konovalov authored
      
      
      Update the "Usage" section in KASAN documentation:
      
       - Add inline code snippet markers.
      
       - Reword the part about stack traces for clarity.
      
       - Other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/48427809cd4b8b5d6bc00926cbe87e2b5081df17.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      86e6f08d
    • Andrey Konovalov's avatar
      kasan: docs: update overview section · 3cbc37dc
      Andrey Konovalov authored
      
      
      Update the "Overview" section in KASAN documentation:
      
       - Outline main use cases for each mode.
      
       - Mention that HW_TAGS mode need compiler support too.
      
       - Move the part about SLUB/SLAB support from "Usage" to "Overview".
      
       - Punctuation, readability, and other minor clean-ups.
      
      Link: https://lkml.kernel.org/r/1486fba8514de3d7db2f47df2192db59228b0a7b.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      3cbc37dc
    • Andrey Konovalov's avatar
      kasan: docs: clean up sections · 96d7d141
      Andrey Konovalov authored
      
      
      Update KASAN documentation:
      
       - Give some sections clearer names.
      
       - Remove unneeded subsections in the "Tests" section.
      
       - Move the "For developers" section and split into subsections.
      
      Link: https://lkml.kernel.org/r/c2bbb56eaea80ad484f0ee85bb71959a3a63f1d7.1615559068.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      96d7d141
    • Andrey Konovalov's avatar
      kasan, mm: integrate slab init_on_free with HW_TAGS · d57a964e
      Andrey Konovalov authored
      
      
      This change uses the previously added memory initialization feature of
      HW_TAGS KASAN routines for slab memory when init_on_free is enabled.
      
      With this change, memory initialization memset() is no longer called when
      both HW_TAGS KASAN and init_on_free are enabled.  Instead, memory is
      initialized in KASAN runtime.
      
      For SLUB, the memory initialization memset() is moved into
      slab_free_hook() that currently directly follows the initialization loop.
      A new argument is added to slab_free_hook() that indicates whether to
      initialize the memory or not.
      
      To avoid discrepancies with which memory gets initialized that can be
      caused by future changes, both KASAN hook and initialization memset() are
      put together and a warning comment is added.
      
      Combining setting allocation tags with memory initialization improves
      HW_TAGS KASAN performance when init_on_free is enabled.
      
      Link: https://lkml.kernel.org/r/190fd15c1886654afdec0d19ebebd5ade665b601.1615296150.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d57a964e
    • Andrey Konovalov's avatar
      kasan, mm: integrate slab init_on_alloc with HW_TAGS · da844b78
      Andrey Konovalov authored
      
      
      This change uses the previously added memory initialization feature of
      HW_TAGS KASAN routines for slab memory when init_on_alloc is enabled.
      
      With this change, memory initialization memset() is no longer called when
      both HW_TAGS KASAN and init_on_alloc are enabled.  Instead, memory is
      initialized in KASAN runtime.
      
      The memory initialization memset() is moved into slab_post_alloc_hook()
      that currently directly follows the initialization loop.  A new argument
      is added to slab_post_alloc_hook() that indicates whether to initialize
      the memory or not.
      
      To avoid discrepancies with which memory gets initialized that can be
      caused by future changes, both KASAN hook and initialization memset() are
      put together and a warning comment is added.
      
      Combining setting allocation tags with memory initialization improves
      HW_TAGS KASAN performance when init_on_alloc is enabled.
      
      Link: https://lkml.kernel.org/r/c1292aeb5d519da221ec74a0684a949b027d7720.1615296150.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      da844b78
    • Andrey Konovalov's avatar
      kasan, mm: integrate page_alloc init with HW_TAGS · 1bb5eab3
      Andrey Konovalov authored
      
      
      This change uses the previously added memory initialization feature of
      HW_TAGS KASAN routines for page_alloc memory when init_on_alloc/free is
      enabled.
      
      With this change, kernel_init_free_pages() is no longer called when both
      HW_TAGS KASAN and init_on_alloc/free are enabled.  Instead, memory is
      initialized in KASAN runtime.
      
      To avoid discrepancies with which memory gets initialized that can be
      caused by future changes, both KASAN and kernel_init_free_pages() hooks
      are put together and a warning comment is added.
      
      This patch changes the order in which memory initialization and page
      poisoning hooks are called.  This doesn't lead to any side-effects, as
      whenever page poisoning is enabled, memory initialization gets disabled.
      
      Combining setting allocation tags with memory initialization improves
      HW_TAGS KASAN performance when init_on_alloc/free is enabled.
      
      [andreyknvl@google.com: fix for "integrate page_alloc init with HW_TAGS"]
        Link: https://lkml.kernel.org/r/65b6028dea2e9a6e8e2cb779b5115c09457363fc.1617122211.git.andreyknvl@google.com
      
      Link: https://lkml.kernel.org/r/e77f0d5b1b20658ef0b8288625c74c2b3690e725.1615296150.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Tested-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Reviewed-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1bb5eab3
    • Andrey Konovalov's avatar
      kasan: init memory in kasan_(un)poison for HW_TAGS · aa5c219c
      Andrey Konovalov authored
      
      
      This change adds an argument to kasan_poison() and kasan_unpoison() that
      allows initializing memory along with setting the tags for HW_TAGS.
      
      Combining setting allocation tags with memory initialization will improve
      HW_TAGS KASAN performance when init_on_alloc/free is enabled.
      
      This change doesn't integrate memory initialization with KASAN, this is
      done is subsequent patches in this series.
      
      Link: https://lkml.kernel.org/r/3054314039fa64510947e674180d675cab1b4c41.1615296150.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      aa5c219c
    • Andrey Konovalov's avatar
      arm64: kasan: allow to init memory when setting tags · d9b6f907
      Andrey Konovalov authored
      
      
      Patch series "kasan: integrate with init_on_alloc/free", v3.
      
      This patch series integrates HW_TAGS KASAN with init_on_alloc/free by
      initializing memory via the same arm64 instruction that sets memory tags.
      
      This is expected to improve HW_TAGS KASAN performance when
      init_on_alloc/free is enabled.  The exact perfomance numbers are unknown
      as MTE-enabled hardware doesn't exist yet.
      
      This patch (of 5):
      
      This change adds an argument to mte_set_mem_tag_range() that allows to
      enable memory initialization when settinh the allocation tags.  The
      implementation uses stzg instruction instead of stg when this argument
      indicates to initialize memory.
      
      Combining setting allocation tags with memory initialization will improve
      HW_TAGS KASAN performance when init_on_alloc/free is enabled.
      
      This change doesn't integrate memory initialization with KASAN, this is
      done is subsequent patches in this series.
      
      Link: https://lkml.kernel.org/r/cover.1615296150.git.andreyknvl@google.com
      Link: https://lkml.kernel.org/r/d04ae90cc36be3fe246ea8025e5085495681c3d7.1615296150.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Acked-by: default avatarMarco Elver <elver@google.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d9b6f907
    • Andrey Konovalov's avatar
      mm, kasan: don't poison boot memory with tag-based modes · 2c335680
      Andrey Konovalov authored
      
      
      During boot, all non-reserved memblock memory is exposed to page_alloc via
      memblock_free_pages->__free_pages_core().  This results in
      kasan_free_pages() being called, which poisons that memory.
      
      Poisoning all that memory lengthens boot time.  The most noticeable effect
      is observed with the HW_TAGS mode.  A boot-time impact may potentially
      also affect systems with large amount of RAM.
      
      This patch changes the tag-based modes to not poison the memory during the
      memblock->page_alloc transition.
      
      An exception is made for KASAN_GENERIC.  Since it marks all new memory as
      accessible, not poisoning the memory released from memblock will lead to
      KASAN missing invalid boot-time accesses to that memory.
      
      With KASAN_SW_TAGS, as it uses the invalid 0xFE tag as the default tag for
      all memory, it won't miss bad boot-time accesses even if the poisoning of
      memblock memory is removed.
      
      With KASAN_HW_TAGS, the default memory tags values are unspecified.
      Therefore, if memblock poisoning is removed, this KASAN mode will miss the
      mentioned type of boot-time bugs with a 1/16 probability.  This is taken
      as an acceptable trafe-off.
      
      Internally, the poisoning is removed as follows.  __free_pages_core() is
      used when exposing fresh memory during system boot and when onlining
      memory during hotplug.  This patch adds a new FPI_SKIP_KASAN_POISON flag
      and passes it to __free_pages_ok() through free_pages_prepare() from
      __free_pages_core().  If FPI_SKIP_KASAN_POISON is set, kasan_free_pages()
      is not called.
      
      All memory allocated normally when the boot is over keeps getting poisoned
      as usual.
      
      Link: https://lkml.kernel.org/r/a0570dc1e3a8f39a55aa343a1fc08cd5c2d4cad6.1613692950.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Christoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2c335680
    • Andrey Konovalov's avatar
      kasan: initialize shadow to TAG_INVALID for SW_TAGS · a064cb00
      Andrey Konovalov authored
      
      
      Currently, KASAN_SW_TAGS uses 0xFF as the default tag value for
      unallocated memory.  The underlying idea is that since that memory hasn't
      been allocated yet, it's only supposed to be dereferenced through a
      pointer with the native 0xFF tag.
      
      While this is a good idea in terms on consistency, practically it doesn't
      bring any benefit.  Since the 0xFF pointer tag is a match-all tag, it
      doesn't matter what tag the accessed memory has.  No accesses through
      0xFF-tagged pointers are considered buggy by KASAN.
      
      This patch changes the default tag value for unallocated memory to 0xFE,
      which is the tag KASAN uses for inaccessible memory.  This doesn't affect
      accesses through 0xFF-tagged pointer to this memory, but this allows KASAN
      to detect wild and large out-of-bounds invalid memory accesses through
      otherwise-tagged pointers.
      
      This is a prepatory patch for the next one, which changes the tag-based
      KASAN modes to not poison the boot memory.
      
      Link: https://lkml.kernel.org/r/c8e93571c18b3528aac5eb33ade213bf133d10ad.1613692950.git.andreyknvl@google.com
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Branislav Rankov <Branislav.Rankov@arm.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Cc: Kevin Brodsky <kevin.brodsky@arm.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a064cb00
    • Peter Collingbourne's avatar
      kasan: fix kasan_byte_accessible() to be consistent with actual checks · bfcfe371
      Peter Collingbourne authored
      
      
      We can sometimes end up with kasan_byte_accessible() being called on
      non-slab memory.  For example ksize() and krealloc() may end up calling it
      on KFENCE allocated memory.  In this case the memory will be tagged with
      KASAN_SHADOW_INIT, which a subsequent patch ("kasan: initialize shadow to
      TAG_INVALID for SW_TAGS") will set to the same value as KASAN_TAG_INVALID,
      causing kasan_byte_accessible() to fail when called on non-slab memory.
      
      This highlighted the fact that the check in kasan_byte_accessible() was
      inconsistent with checks as implemented for loads and stores
      (kasan_check_range() in SW tags mode and hardware-implemented checks in HW
      tags mode).  kasan_check_range() does not have a check for
      KASAN_TAG_INVALID, and instead has a comparison against
      KASAN_SHADOW_START.  In HW tags mode, we do not have either, but we do set
      TCR_EL1.TCMA which corresponds with the comparison against
      KASAN_TAG_KERNEL.
      
      Therefore, update kasan_byte_accessible() for both SW and HW tags modes to
      correspond with the respective checks on loads and stores.
      
      Link: https://linux-review.googlesource.com/id/Ic6d40803c57dcc6331bd97fbb9a60b0d38a65a36
      Link: https://lkml.kernel.org/r/20210405220647.1965262-1-pcc@google.com
      Signed-off-by: default avatarPeter Collingbourne <pcc@google.com>
      Reviewed-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
      Reviewed-by: default avatarMarco Elver <elver@google.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Peter Collingbourne <pcc@google.com>
      Cc: Evgenii Stepanov <eugenis@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bfcfe371
    • Zhiyuan Dai's avatar
      mm/kasan: switch from strlcpy to strscpy · f76e0c41
      Zhiyuan Dai authored
      
      
      strlcpy is marked as deprecated in Documentation/process/deprecated.rst,
      and there is no functional difference when the caller expects truncation
      (when not checking the return value).  strscpy is relatively better as it
      also avoids scanning the whole source string.
      
      Link: https://lkml.kernel.org/r/1613970647-23272-1-git-send-email-daizhiyuan@phytium.com.cn
      Signed-off-by: default avatarZhiyuan Dai <daizhiyuan@phytium.com.cn>
      Acked-by: default avatarAlexander Potapenko <glider@google.com>
      Reviewed-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f76e0c41
    • Lukas Bulwahn's avatar
      pagewalk: prefix struct kernel-doc descriptions · 91ab1a41
      Lukas Bulwahn authored
      
      
      The script './scripts/kernel-doc -none ./include/linux/pagewalk.h' reports:
      
        include/linux/pagewalk.h:37: warning: cannot understand function prototype: 'struct mm_walk_ops '
        include/linux/pagewalk.h:85: warning: cannot understand function prototype: 'struct mm_walk '
      
      A kernel-doc description for a structure requires to prefix the struct
      name with the keyword 'struct'.  So, do that such that no further
      kernel-doc warnings are reported for this file.
      
      Link: https://lkml.kernel.org/r/20210322122542.15072-3-lukas.bulwahn@gmail.com
      Signed-off-by: default avatarLukas Bulwahn <lukas.bulwahn@gmail.com>
      Cc: Joe Perches <joe@perches.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Ralf Ramsauer <ralf.ramsauer@oth-regensburg.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      91ab1a41
    • Lukas Bulwahn's avatar
      MAINTAINERS: assign pagewalk.h to MEMORY MANAGEMENT · a3ddd79a
      Lukas Bulwahn authored
      Patch series "kernel-doc and MAINTAINERS clean-up".
      
      Roughly 900 warnings of about 21.000 kernel-doc warnings in the kernel
      tree warn with 'cannot understand function prototype:', i.e., the
      kernel-doc parser cannot parse the function's signature.  The majority,
      about 600 cases of those, are just struct definitions following the
      kernel-doc description.  Further, spot-check investigations suggest that
      the authors of the specific kernel-doc descriptions simply were not
      aware that the general format for a kernel-doc description for a
      structure requires to prefix the struct name with the keyword 'struct',
      as in 'struct struct_name - Brief description.'.  Details on kernel-doc
      are at the Link below.
      
      Without the struct keyword, kernel-doc does not check if the kernel-doc
      description fits to the actual struct definition in the source code.
      Fortunately, in roughly a quarter of these cases, the kernel-doc
      description is actually complete wrt.  its corresponding struct
      definition.  So, the trivial change adding the struct keyword will allow
      us to keep the kernel-doc descriptions more consistent for future
      changes, by checking for new kernel-doc warnings.
      
      Also, some of the files in ./include/ are not assigned to a specific
      MAINTAINERS section and hence have no dedicated maintainer.  So, if
      needed, the files in ./include/ are also assigned to the fitting
      MAINTAINERS section, as I need to identify whom to send the clean-up
      patch anyway.
      
      Here is the change from this kernel-doc janitorial work in the
      ./include/ directory for MEMORY MANAGEMENT.
      
      This patch (of 2):
      
      Commit a520110e
      
       ("mm: split out a new pagewalk.h header from mm.h")
      adds a new file in ./include/linux, but misses to update MAINTAINERS
      accordingly.  Hence,
      
        ./scripts/get_maintainers.pl include/linux/pagewalk.h
      
      points only to lkml as general fallback for all files, whereas the
      original include/linux/mm.h clearly marks this file part of MEMORY
      MANAGEMENT.
      
      Assign include/linux/pagewalk.h to MEMORY MANAGEMENT.
      
      Link: https://lkml.kernel.org/r/20210322122542.15072-1-lukas.bulwahn@gmail.com
      Link: https://lkml.kernel.org/r/20210322122542.15072-2-lukas.bulwahn@gmail.com
      Signed-off-by: default avatarLukas Bulwahn <lukas.bulwahn@gmail.com>
      Cc: Joe Perches <joe@perches.com>
      Cc: Ralf Ramsauer <ralf.ramsauer@oth-regensburg.de>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a3ddd79a