Upstream commit 2bd926b439b4cb6b9ed240a9781cd01958b53d85. There were a couple of issues during backport. The first one is caused by the upstream commit using cc-option in Kconfig, which android kernel doesn't support. Instead of using cc-option, this backport moves the compiler check to the Makefile. The other one is that older GCCs (before version 5) don't support the __has_attribute macro. The upstream has dealt with this via a special header file (compiler_attributes.h) that emulates this macro for some cases. Instead of backporting the whole series that adds this header do a direct GCC version check to determine the presense of the no_sanitize_address attribute. This commit splits the current CONFIG_KASAN config option into two: 1. CONFIG_KASAN_GENERIC, that enables the generic KASAN mode (the one that exists now); 2. CONFIG_KASAN_SW_TAGS, that enables the software tag-based KASAN mode. The name CONFIG_KASAN_SW_TAGS is chosen as in the future we will have another hardware tag-based KASAN mode, that will rely on hardware memory tagging support in arm64. With CONFIG_KASAN_SW_TAGS enabled, compiler options are changed to instrument kernel files with -fsantize=kernel-hwaddress (except the ones for which KASAN_SANITIZE := n is set). Both CONFIG_KASAN_GENERIC and CONFIG_KASAN_SW_TAGS support both CONFIG_KASAN_INLINE and CONFIG_KASAN_OUTLINE instrumentation modes. This commit also adds empty placeholder (for now) implementation of tag-based KASAN specific hooks inserted by the compiler and adjusts common hooks implementation. While this commit adds the CONFIG_KASAN_SW_TAGS config option, this option is not selectable, as it depends on HAVE_ARCH_KASAN_SW_TAGS, which we will enable once all the infrastracture code has been added. Link: http://lkml.kernel.org/r/b2550106eb8a68b10fefbabce820910b115aa853.1544099024.git.andreyknvl@google.com Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Cc: Christoph Lameter <cl@linux.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Change-Id: Iaf18eccf0c6ee952a14bb13cd14dc1ddaf9e7698 Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Bug: 128674696tirimbino
parent
4bc7100ce0
commit
8a94e7d158
@ -0,0 +1,75 @@ |
||||
/*
|
||||
* This file contains core tag-based KASAN code. |
||||
* |
||||
* Copyright (c) 2018 Google, Inc. |
||||
* Author: Andrey Konovalov <andreyknvl@google.com> |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License version 2 as |
||||
* published by the Free Software Foundation. |
||||
* |
||||
*/ |
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
||||
#define DISABLE_BRANCH_PROFILING |
||||
|
||||
#include <linux/export.h> |
||||
#include <linux/interrupt.h> |
||||
#include <linux/init.h> |
||||
#include <linux/kasan.h> |
||||
#include <linux/kernel.h> |
||||
#include <linux/kmemleak.h> |
||||
#include <linux/linkage.h> |
||||
#include <linux/memblock.h> |
||||
#include <linux/memory.h> |
||||
#include <linux/mm.h> |
||||
#include <linux/module.h> |
||||
#include <linux/printk.h> |
||||
#include <linux/random.h> |
||||
#include <linux/sched.h> |
||||
#include <linux/sched/task_stack.h> |
||||
#include <linux/slab.h> |
||||
#include <linux/stacktrace.h> |
||||
#include <linux/string.h> |
||||
#include <linux/types.h> |
||||
#include <linux/vmalloc.h> |
||||
#include <linux/bug.h> |
||||
|
||||
#include "kasan.h" |
||||
#include "../slab.h" |
||||
|
||||
void check_memory_region(unsigned long addr, size_t size, bool write, |
||||
unsigned long ret_ip) |
||||
{ |
||||
} |
||||
|
||||
#define DEFINE_HWASAN_LOAD_STORE(size) \ |
||||
void __hwasan_load##size##_noabort(unsigned long addr) \
|
||||
{ \
|
||||
} \
|
||||
EXPORT_SYMBOL(__hwasan_load##size##_noabort); \
|
||||
void __hwasan_store##size##_noabort(unsigned long addr) \
|
||||
{ \
|
||||
} \
|
||||
EXPORT_SYMBOL(__hwasan_store##size##_noabort) |
||||
|
||||
DEFINE_HWASAN_LOAD_STORE(1); |
||||
DEFINE_HWASAN_LOAD_STORE(2); |
||||
DEFINE_HWASAN_LOAD_STORE(4); |
||||
DEFINE_HWASAN_LOAD_STORE(8); |
||||
DEFINE_HWASAN_LOAD_STORE(16); |
||||
|
||||
void __hwasan_loadN_noabort(unsigned long addr, unsigned long size) |
||||
{ |
||||
} |
||||
EXPORT_SYMBOL(__hwasan_loadN_noabort); |
||||
|
||||
void __hwasan_storeN_noabort(unsigned long addr, unsigned long size) |
||||
{ |
||||
} |
||||
EXPORT_SYMBOL(__hwasan_storeN_noabort); |
||||
|
||||
void __hwasan_tag_memory(unsigned long addr, u8 tag, unsigned long size) |
||||
{ |
||||
} |
||||
EXPORT_SYMBOL(__hwasan_tag_memory); |
Loading…
Reference in new issue