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_ */