Module Name: src Committed By: jdolecek Date: Tue Jul 3 18:09:28 UTC 2018
Modified Files: src/sys/kern: kern_rndq.c Log Message: add DIAGNOSTIC check for rnd_attach_source() being called twice for same rnd source; it's driver error, and it breaks rnd source list pointers To generate a diff of this commit: cvs rdiff -u -r1.89 -r1.90 src/sys/kern/kern_rndq.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_rndq.c diff -u src/sys/kern/kern_rndq.c:1.89 src/sys/kern/kern_rndq.c:1.90 --- src/sys/kern/kern_rndq.c:1.89 Sat May 21 15:27:15 2016 +++ src/sys/kern/kern_rndq.c Tue Jul 3 18:09:28 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_rndq.c,v 1.89 2016/05/21 15:27:15 riastradh Exp $ */ +/* $NetBSD: kern_rndq.c,v 1.90 2018/07/03 18:09:28 jdolecek Exp $ */ /*- * Copyright (c) 1997-2013 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.89 2016/05/21 15:27:15 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.90 2018/07/03 18:09:28 jdolecek Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -747,6 +747,18 @@ rnd_attach_source(krndsource_t *rs, cons rs->state = rnd_sample_allocate(rs); mutex_spin_enter(&rnd_global.lock); + +#ifdef DIAGNOSTIC + krndsource_t *s; + LIST_FOREACH(s, &rnd_global.sources, list) { + if (s == rs) { + panic("%s: source '%s' already attached", + __func__, name); + /* NOTREACHED */ + } + } +#endif + LIST_INSERT_HEAD(&rnd_global.sources, rs, list); #ifdef RND_VERBOSE