Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/kern Added a malloc freelist sanity check function, for ...
details: https://anonhg.NetBSD.org/src/rev/3c94a2b6cbce
branches: trunk
changeset: 550991:3c94a2b6cbce
user: manu <manu%NetBSD.org@localhost>
date: Tue Aug 26 21:48:53 2003 +0000
description:
Added a malloc freelist sanity check function, for debugging purposes
diffstat:
sys/kern/kern_malloc.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 44 insertions(+), 2 deletions(-)
diffs (64 lines):
diff -r d45f8b302011 -r 3c94a2b6cbce sys/kern/kern_malloc.c
--- a/sys/kern/kern_malloc.c Tue Aug 26 21:14:08 2003 +0000
+++ b/sys/kern/kern_malloc.c Tue Aug 26 21:48:53 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_malloc.c,v 1.81 2003/08/07 16:31:46 agc Exp $ */
+/* $NetBSD: kern_malloc.c,v 1.82 2003/08/26 21:48:53 manu Exp $ */
/*
* Copyright (c) 1987, 1991, 1993
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.81 2003/08/07 16:31:46 agc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.82 2003/08/26 21:48:53 manu Exp $");
#include "opt_lockdebug.h"
@@ -903,3 +903,45 @@
#endif /* KMEMSTATS */
}
#endif /* DDB */
+
+
+#if 0
+/*
+ * Diagnostic messages about "Data modified on
+ * freelist" indicate a memory corruption, but
+ * they do not help tracking it down.
+ * This function can be called at various places
+ * to sanity check malloc's freelist and discover
+ * where does the corruption take place.
+ */
+int
+freelist_sanitycheck(void) {
+ int i,j;
+ struct kmembuckets *kbp;
+ struct freelist *freep;
+ int rv = 0;
+
+ for (i = MINBUCKET; i <= MINBUCKET + 15; i++) {
+ kbp = &bucket[i];
+ freep = (struct freelist *)kbp->kb_next;
+ j = 0;
+ while(freep) {
+ vm_map_lock(kmem_map);
+ rv = uvm_map_checkprot(kmem_map, (vaddr_t)freep,
+ (vaddr_t)freep + sizeof(struct freelist),
+ VM_PROT_WRITE);
+ vm_map_unlock(kmem_map);
+
+ if ((rv == 0) || (*(int *)freep != WEIRD_ADDR)) {
+ printf("bucket %i, chunck %d at %p modified\n",
+ i, j, freep);
+ return 1;
+ }
+ freep = (struct freelist *)freep->next;
+ j++;
+ }
+ }
+
+ return 0;
+}
+#endif
Home |
Main Index |
Thread Index |
Old Index