Module Name: src Committed By: maxv Date: Wed Aug 22 09:38:21 UTC 2018
Modified Files: src/sys/kern: kern_malloc.c subr_kmem.c src/sys/sys: asan.h Log Message: Reduce the number of KASAN ifdefs, suggested by Christos/Taylor. To generate a diff of this commit: cvs rdiff -u -r1.150 -r1.151 src/sys/kern/kern_malloc.c cvs rdiff -u -r1.69 -r1.70 src/sys/kern/subr_kmem.c cvs rdiff -u -r1.1 -r1.2 src/sys/sys/asan.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_malloc.c diff -u src/sys/kern/kern_malloc.c:1.150 src/sys/kern/kern_malloc.c:1.151 --- src/sys/kern/kern_malloc.c:1.150 Tue Aug 21 07:56:53 2018 +++ src/sys/kern/kern_malloc.c Wed Aug 22 09:38:21 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_malloc.c,v 1.150 2018/08/21 07:56:53 maxv Exp $ */ +/* $NetBSD: kern_malloc.c,v 1.151 2018/08/22 09:38:21 maxv Exp $ */ /* * Copyright (c) 1987, 1991, 1993 @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.150 2018/08/21 07:56:53 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.151 2018/08/22 09:38:21 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_kasan.h" @@ -79,10 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_malloc. #include <sys/param.h> #include <sys/malloc.h> #include <sys/kmem.h> - -#ifdef KASAN #include <sys/asan.h> -#endif /* * Built-in malloc types. Note: ought to be removed. @@ -111,16 +108,12 @@ void * kern_malloc(unsigned long size, int flags) { const int kmflags = (flags & M_NOWAIT) ? KM_NOSLEEP : KM_SLEEP; -#ifdef KASAN - size_t origsize = size; -#endif + const size_t origsize = size; size_t allocsize, hdroffset; struct malloc_header *mh; void *p; -#ifdef KASAN kasan_add_redzone(&size); -#endif if (size >= PAGE_SIZE) { if (size > (ULONG_MAX-PAGE_SIZE)) @@ -147,9 +140,7 @@ kern_malloc(unsigned long size, int flag #endif mh++; -#ifdef KASAN kasan_alloc(mh, origsize, size); -#endif return mh; } @@ -162,9 +153,7 @@ kern_free(void *addr) mh = addr; mh--; -#ifdef KASAN kasan_free(addr, mh->mh_size); -#endif if (mh->mh_size >= PAGE_SIZE + sizeof(struct malloc_header)) kmem_intr_free((char *)addr - PAGE_SIZE, Index: src/sys/kern/subr_kmem.c diff -u src/sys/kern/subr_kmem.c:1.69 src/sys/kern/subr_kmem.c:1.70 --- src/sys/kern/subr_kmem.c:1.69 Mon Aug 20 15:04:52 2018 +++ src/sys/kern/subr_kmem.c Wed Aug 22 09:38:21 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kmem.c,v 1.69 2018/08/20 15:04:52 maxv Exp $ */ +/* $NetBSD: subr_kmem.c,v 1.70 2018/08/22 09:38:21 maxv Exp $ */ /*- * Copyright (c) 2009-2015 The NetBSD Foundation, Inc. @@ -92,7 +92,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_kmem.c,v 1.69 2018/08/20 15:04:52 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_kmem.c,v 1.70 2018/08/22 09:38:21 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_kmem.h" @@ -106,10 +106,7 @@ __KERNEL_RCSID(0, "$NetBSD: subr_kmem.c, #include <sys/debug.h> #include <sys/lockdebug.h> #include <sys/cpu.h> - -#ifdef KASAN #include <sys/asan.h> -#endif #include <uvm/uvm_extern.h> #include <uvm/uvm_map.h> @@ -227,9 +224,7 @@ CTASSERT(KM_NOSLEEP == PR_NOWAIT); void * kmem_intr_alloc(size_t requested_size, km_flag_t kmflags) { -#ifdef KASAN - size_t origsize = requested_size; -#endif + const size_t origsize = requested_size; size_t allocsz, index; size_t size; pool_cache_t pc; @@ -247,10 +242,7 @@ kmem_intr_alloc(size_t requested_size, k } #endif -#ifdef KASAN kasan_add_redzone(&requested_size); -#endif - size = kmem_roundup_size(requested_size); allocsz = size + SIZE_SIZE; @@ -278,9 +270,7 @@ kmem_intr_alloc(size_t requested_size, k FREECHECK_OUT(&kmem_freecheck, p); kmem_size_set(p, requested_size); p += SIZE_SIZE; -#ifdef KASAN kasan_alloc(p, origsize, size); -#endif return p; } return p; @@ -323,17 +313,10 @@ kmem_intr_free(void *p, size_t requested } #endif -#ifdef KASAN kasan_add_redzone(&requested_size); -#endif - size = kmem_roundup_size(requested_size); allocsz = size + SIZE_SIZE; -#ifdef KASAN - kasan_free(p, size); -#endif - if ((index = ((allocsz -1) >> KMEM_SHIFT)) < kmem_cache_maxidx) { pc = kmem_cache[index]; @@ -347,6 +330,8 @@ kmem_intr_free(void *p, size_t requested return; } + kasan_free(p, size); + p = (uint8_t *)p - SIZE_SIZE; kmem_size_check(p, requested_size); FREECHECK_IN(&kmem_freecheck, p); Index: src/sys/sys/asan.h diff -u src/sys/sys/asan.h:1.1 src/sys/sys/asan.h:1.2 --- src/sys/sys/asan.h:1.1 Mon Aug 20 15:04:52 2018 +++ src/sys/sys/asan.h Wed Aug 22 09:38:21 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: asan.h,v 1.1 2018/08/20 15:04:52 maxv Exp $ */ +/* $NetBSD: asan.h,v 1.2 2018/08/22 09:38:21 maxv Exp $ */ /* * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -34,8 +34,29 @@ #include <sys/types.h> +#ifdef KASAN void kasan_add_redzone(size_t *); void kasan_alloc(const void *, size_t, size_t); void kasan_free(const void *, size_t); +#else +static void __always_inline +kasan_add_redzone(size_t *size __unused) +{ + /* nothing */ +} + +static void __always_inline +kasan_alloc(const void *addr __unused, size_t size __unused, + size_t sz_with_redz __unused) +{ + /* nothing */ +} + +static void __always_inline +kasan_free(const void *addr __unused, size_t sz_with_redz __unused) +{ + /* nothing */ +} +#endif #endif /* !_SYS_ASAN_H_ */