Module Name:    src
Committed By:   maxv
Date:           Tue Aug 21 07:56:53 UTC 2018

Modified Files:
        src/sys/kern: kern_malloc.c

Log Message:
Need to keep track of the requested size, when realloc is used under kASan.
Maybe we could use mh_rqsz by default.


To generate a diff of this commit:
cvs rdiff -u -r1.149 -r1.150 src/sys/kern/kern_malloc.c

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.149 src/sys/kern/kern_malloc.c:1.150
--- src/sys/kern/kern_malloc.c:1.149	Tue Aug 21 01:25:57 2018
+++ src/sys/kern/kern_malloc.c	Tue Aug 21 07:56:53 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_malloc.c,v 1.149 2018/08/21 01:25:57 pgoyette Exp $	*/
+/*	$NetBSD: kern_malloc.c,v 1.150 2018/08/21 07:56:53 maxv Exp $	*/
 
 /*
  * Copyright (c) 1987, 1991, 1993
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.149 2018/08/21 01:25:57 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.150 2018/08/21 07:56:53 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_kasan.h"
@@ -101,7 +101,10 @@ MALLOC_DEFINE(M_MRTABLE, "mrt", "multica
  * Header contains total size, including the header itself.
  */
 struct malloc_header {
-	size_t		mh_size;
+	size_t mh_size;
+#ifdef KASAN
+	size_t mh_rqsz;
+#endif
 } __aligned(ALIGNBYTES + 1);
 
 void *
@@ -139,6 +142,9 @@ kern_malloc(unsigned long size, int flag
 	}
 	mh = (void *)((char *)p + hdroffset);
 	mh->mh_size = allocsize - hdroffset;
+#ifdef KASAN
+	mh->mh_rqsz = origsize;
+#endif
 	mh++;
 
 #ifdef KASAN
@@ -195,7 +201,11 @@ kern_realloc(void *curaddr, unsigned lon
 	mh = curaddr;
 	mh--;
 
+#ifdef KASAN
+	cursize = mh->mh_rqsz;
+#else
 	cursize = mh->mh_size - sizeof(struct malloc_header);
+#endif
 
 	/*
 	 * If we already actually have as much as they want, we're done.

Reply via email to