linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Abbott Liu <liuwenliang@huawei.com>
To: linux@armlinux.org.uk, aryabinin@virtuozzo.com,
	marc.zyngier@arm.com, kstewart@linuxfoundation.org,
	gregkh@linuxfoundation.org, f.fainelli@gmail.com,
	liuwenliang@huawei.com, akpm@linux-foundation.org,
	afzal.mohd.ma@gmail.com, alexander.levin@verizon.com
Cc: glider@google.com, dvyukov@google.com,
	christoffer.dall@linaro.org, linux@rasmusvillemoes.dk,
	mawilcox@microsoft.com, pombredanne@nexb.com,
	ard.biesheuvel@linaro.org, vladimir.murzin@arm.com,
	nicolas.pitre@linaro.org, tglx@linutronix.de,
	thgarnie@google.com, dhowells@redhat.com, keescook@chromium.org,
	arnd@arndb.de, geert@linux-m68k.org, tixy@linaro.org,
	mark.rutland@arm.com, james.morse@arm.com,
	zhichao.huang@linaro.org, jinb.park7@gmail.com,
	labbott@redhat.com, philip@cog.systems,
	grygorii.strashko@linaro.org, catalin.marinas@arm.com,
	opendmb@gmail.com, kirill.shutemov@linux.intel.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com,
	kvmarm@lists.cs.columbia.edu, linux-mm@kvack.org
Subject: [PATCH v2 0/7] KASan for arm
Date: Sun, 18 Mar 2018 20:53:35 +0800	[thread overview]
Message-ID: <20180318125342.4278-1-liuwenliang@huawei.com> (raw)

Changelog:
v2 - v1
- Fixed some compiling error which happens on changing kernel compression
  mode to lzma/xz/lzo/lz4.
  ---Reported by: Florian Fainelli <f.fainelli@gmail.com>,
	     Russell King - ARM Linux <linux@armlinux.org.uk>
- Fixed a compiling error cause by some older arm instruction set(armv4t)
  don't suppory movw/movt which is reported by kbuild.
- Changed the pte flag from _L_PTE_DEFAULT | L_PTE_DIRTY | L_PTE_XN to
  pgprot_val(PAGE_KERNEL).
  ---Reported by: Russell King - ARM Linux <linux@armlinux.org.uk>
- Moved Enable KASan patch as the last one.
  ---Reported by: Florian Fainelli <f.fainelli@gmail.com>,
     Russell King - ARM Linux <linux@armlinux.org.uk>
- Moved the definitions of cp15 registers from 
  arch/arm/include/asm/kvm_hyp.h to arch/arm/include/asm/cp15.h.
  ---Asked by: Mark Rutland <mark.rutland@arm.com>
- Merge the following commits into the commit
  Define the virtual space of KASan's shadow region:
  1) Define the virtual space of KASan's shadow region;
  2) Avoid cleaning the KASan shadow area's mapping table;
  3) Add KASan layout;
- Merge the following commits into the commit
  Initialize the mapping of KASan shadow memory:
  1) Initialize the mapping of KASan shadow memory;
  2) Add support arm LPAE;
  3) Don't need to map the shadow of KASan's shadow memory;
     ---Reported by: Russell King - ARM Linux <linux@armlinux.org.uk>
  4) Change mapping of kasan_zero_page int readonly.

Hi,all:
   These patches add arch specific code for kernel address sanitizer
(see Documentation/kasan.txt).

   1/8 of kernel addresses reserved for shadow memory. There was no
big enough hole for this, so virtual addresses for shadow were
stolen from user space.

   At early boot stage the whole shadow region populated with just
one physical page (kasan_zero_page). Later, this page reused
as readonly zero shadow for some memory that KASan currently
don't track (vmalloc).

  After mapping the physical memory, pages for shadow memory are
allocated and mapped.
  
  KASan's stack instrumentation significantly increases stack's
consumption, so CONFIG_KASAN doubles THREAD_SIZE.

  Functions like memset/memmove/memcpy do a lot of memory accesses.
If bad pointer passed to one of these function it is important
to catch this. Compiler's instrumentation cannot do this since
these functions are written in assembly.

  KASan replaces memory functions with manually instrumented variants.
Original functions declared as weak symbols so strong definitions
in mm/kasan/kasan.c could replace them. Original functions have aliases
with '__' prefix in name, so we could call non-instrumented variant
if needed.

  Some files built without kasan instrumentation (e.g. mm/slub.c).
Original mem* function replaced (via #define) with prefixed variants
to disable memory access checks for such files.

  On arm LPAE architecture,  the mapping table of KASan shadow memory(if
PAGE_OFFSET is 0xc0000000, the KASan shadow memory's virtual space is
0xb6e000000~0xbf000000) can't be filled in do_translation_fault function,
because kasan instrumentation maybe cause do_translation_fault function
accessing KASan shadow memory. The accessing of KASan shadow memory in
do_translation_fault function maybe cause dead circle. So the mapping table
of KASan shadow memory need be copyed in pgd_alloc function.


Most of the code comes from:
https://github.com/aryabinin/linux/commit/0b54f17e70ff50a902c4af05bb92716eb95acefe

These patches are tested on vexpress-ca15, vexpress-ca9



Cc: Andrey Ryabinin <a.ryabinin@samsung.com>
Tested-by: Abbott Liu <liuwenliang@huawei.com>
Signed-off-by: Abbott Liu <liuwenliang@huawei.com>

Abbott Liu (3):
  2 1-byte checks more safer for memory_is_poisoned_16
  Add TTBR operator for kasan_init
  Define the virtual space of KASan's shadow region

Andrey Ryabinin (4):
  Disable instrumentation for some code
  Replace memory function for kasan
  Initialize the mapping of KASan shadow memory
  Enable KASan for arm

 arch/arm/Kconfig                      |   1 +
 arch/arm/boot/compressed/Makefile     |   1 +
 arch/arm/boot/compressed/decompress.c |   2 +
 arch/arm/boot/compressed/libfdt_env.h |   2 +
 arch/arm/include/asm/cp15.h           | 104 ++++++++++++
 arch/arm/include/asm/kasan.h          |  23 +++
 arch/arm/include/asm/kasan_def.h      |  52 ++++++
 arch/arm/include/asm/kvm_hyp.h        |  52 ------
 arch/arm/include/asm/memory.h         |   5 +
 arch/arm/include/asm/pgalloc.h        |   7 +-
 arch/arm/include/asm/string.h         |  17 ++
 arch/arm/include/asm/thread_info.h    |   4 +
 arch/arm/kernel/entry-armv.S          |   5 +-
 arch/arm/kernel/entry-common.S        |   6 +-
 arch/arm/kernel/head-common.S         |   7 +-
 arch/arm/kernel/setup.c               |   2 +
 arch/arm/kernel/unwind.c              |   3 +-
 arch/arm/kvm/hyp/cp15-sr.c            |  12 +-
 arch/arm/kvm/hyp/switch.c             |   6 +-
 arch/arm/lib/memcpy.S                 |   3 +
 arch/arm/lib/memmove.S                |   5 +-
 arch/arm/lib/memset.S                 |   3 +
 arch/arm/mm/Makefile                  |   3 +
 arch/arm/mm/init.c                    |   6 +
 arch/arm/mm/kasan_init.c              | 290 ++++++++++++++++++++++++++++++++++
 arch/arm/mm/mmu.c                     |   7 +-
 arch/arm/mm/pgd.c                     |  14 ++
 arch/arm/vdso/Makefile                |   2 +
 mm/kasan/kasan.c                      |  24 ++-
 29 files changed, 588 insertions(+), 80 deletions(-)
 create mode 100644 arch/arm/include/asm/kasan.h
 create mode 100644 arch/arm/include/asm/kasan_def.h
 create mode 100644 arch/arm/mm/kasan_init.c

-- 
2.9.0

             reply	other threads:[~2018-03-18 13:13 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-18 12:53 Abbott Liu [this message]
2018-03-18 12:53 ` [PATCH 1/7] 2 1-byte checks more safer for memory_is_poisoned_16 Abbott Liu
2018-03-18 13:21   ` Russell King - ARM Linux
2018-03-18 12:53 ` [PATCH 2/7] Add TTBR operator for kasan_init Abbott Liu
2018-03-18 12:53 ` [PATCH 3/7] Disable instrumentation for some code Abbott Liu
2018-03-19  8:38   ` Marc Zyngier
2018-03-18 12:53 ` [PATCH 4/7] Replace memory function for kasan Abbott Liu
2018-03-18 12:53 ` [PATCH 5/7] Define the virtual space of KASan's shadow region Abbott Liu
2018-03-18 12:53 ` [PATCH 6/7] Initialize the mapping of KASan shadow memory Abbott Liu
2018-03-18 12:53 ` [PATCH 7/7] Enable KASan for arm Abbott Liu
2018-03-19 20:43   ` kbuild test robot
2018-03-18 19:13 ` [PATCH v2 0/7] " Florian Fainelli
2018-03-19 18:29 ` Florian Fainelli
2018-03-25 23:58 ` Joel Stanley
  -- strict thread matches above, loose matches on Subject: below --
2018-03-19  1:20 Liuwenliang (Abbott Liu)
2018-03-19  1:23 ` Florian Fainelli
2018-03-19  1:56 Liuwenliang (Abbott Liu)
2018-03-19  8:43 ` Dmitry Vyukov
2018-03-24 12:24 Liuwenliang (Abbott Liu)
2018-03-24 13:06 Liuwenliang (Abbott Liu)
2018-03-26  1:13 Liuwenliang (Abbott Liu)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180318125342.4278-1-liuwenliang@huawei.com \
    --to=liuwenliang@huawei.com \
    --cc=afzal.mohd.ma@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.levin@verizon.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=arnd@arndb.de \
    --cc=aryabinin@virtuozzo.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=dhowells@redhat.com \
    --cc=dvyukov@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=geert@linux-m68k.org \
    --cc=glider@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=grygorii.strashko@linaro.org \
    --cc=james.morse@arm.com \
    --cc=jinb.park7@gmail.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=keescook@chromium.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kstewart@linuxfoundation.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=labbott@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@rasmusvillemoes.dk \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=mawilcox@microsoft.com \
    --cc=nicolas.pitre@linaro.org \
    --cc=opendmb@gmail.com \
    --cc=philip@cog.systems \
    --cc=pombredanne@nexb.com \
    --cc=tglx@linutronix.de \
    --cc=thgarnie@google.com \
    --cc=tixy@linaro.org \
    --cc=vladimir.murzin@arm.com \
    --cc=zhichao.huang@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).