mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-04 13:21:45 +00:00
mm/kasan: introduce __kasan_check_{read,write}
Patch series "mm/kasan: Add object validation in ksize()", v3. This patch (of 5): This introduces __kasan_check_{read,write}. __kasan_check functions may be used from anywhere, even compilation units that disable instrumentation selectively. This change eliminates the need for the __KASAN_INTERNAL definition. [elver@google.com: v5] Link: http://lkml.kernel.org/r/20190708170706.174189-2-elver@google.com Link: http://lkml.kernel.org/r/20190626142014.141844-2-elver@google.com Signed-off-by: Marco Elver <elver@google.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Alexander Potapenko <glider@google.com> Cc: Andrey Konovalov <andreyknvl@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: Kees Cook <keescook@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
751ad98d5f
commit
7d8ad890da
2 changed files with 26 additions and 9 deletions
|
@ -2,9 +2,28 @@
|
||||||
#ifndef _LINUX_KASAN_CHECKS_H
|
#ifndef _LINUX_KASAN_CHECKS_H
|
||||||
#define _LINUX_KASAN_CHECKS_H
|
#define _LINUX_KASAN_CHECKS_H
|
||||||
|
|
||||||
#if defined(__SANITIZE_ADDRESS__) || defined(__KASAN_INTERNAL)
|
/*
|
||||||
void kasan_check_read(const volatile void *p, unsigned int size);
|
* __kasan_check_*: Always available when KASAN is enabled. This may be used
|
||||||
void kasan_check_write(const volatile void *p, unsigned int size);
|
* even in compilation units that selectively disable KASAN, but must use KASAN
|
||||||
|
* to validate access to an address. Never use these in header files!
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_KASAN
|
||||||
|
void __kasan_check_read(const volatile void *p, unsigned int size);
|
||||||
|
void __kasan_check_write(const volatile void *p, unsigned int size);
|
||||||
|
#else
|
||||||
|
static inline void __kasan_check_read(const volatile void *p, unsigned int size)
|
||||||
|
{ }
|
||||||
|
static inline void __kasan_check_write(const volatile void *p, unsigned int size)
|
||||||
|
{ }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kasan_check_*: Only available when the particular compilation unit has KASAN
|
||||||
|
* instrumentation enabled. May be used in header files.
|
||||||
|
*/
|
||||||
|
#ifdef __SANITIZE_ADDRESS__
|
||||||
|
#define kasan_check_read __kasan_check_read
|
||||||
|
#define kasan_check_write __kasan_check_write
|
||||||
#else
|
#else
|
||||||
static inline void kasan_check_read(const volatile void *p, unsigned int size)
|
static inline void kasan_check_read(const volatile void *p, unsigned int size)
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define __KASAN_INTERNAL
|
|
||||||
|
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
@ -89,17 +87,17 @@ void kasan_disable_current(void)
|
||||||
current->kasan_depth--;
|
current->kasan_depth--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void kasan_check_read(const volatile void *p, unsigned int size)
|
void __kasan_check_read(const volatile void *p, unsigned int size)
|
||||||
{
|
{
|
||||||
check_memory_region((unsigned long)p, size, false, _RET_IP_);
|
check_memory_region((unsigned long)p, size, false, _RET_IP_);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(kasan_check_read);
|
EXPORT_SYMBOL(__kasan_check_read);
|
||||||
|
|
||||||
void kasan_check_write(const volatile void *p, unsigned int size)
|
void __kasan_check_write(const volatile void *p, unsigned int size)
|
||||||
{
|
{
|
||||||
check_memory_region((unsigned long)p, size, true, _RET_IP_);
|
check_memory_region((unsigned long)p, size, true, _RET_IP_);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(kasan_check_write);
|
EXPORT_SYMBOL(__kasan_check_write);
|
||||||
|
|
||||||
#undef memset
|
#undef memset
|
||||||
void *memset(void *addr, int c, size_t len)
|
void *memset(void *addr, int c, size_t len)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue