Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/kern psref(9): Make use-after-free panic message more ob...
details: https://anonhg.NetBSD.org/src/rev/ddaa6eeeac6b
branches: trunk
changeset: 379478:ddaa6eeeac6b
user: riastradh <riastradh%NetBSD.org@localhost>
date: Wed Jun 02 09:23:32 2021 +0000
description:
psref(9): Make use-after-free panic message more obvious.
Previously it would almost always manifest as
mismatched psref target class: 0x0 (ref) != 0x... (expected)
and now it will manifest as
psref target already destroyed: 0x...
diffstat:
sys/kern/subr_psref.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diffs (48 lines):
diff -r 5378ea1be275 -r ddaa6eeeac6b sys/kern/subr_psref.c
--- a/sys/kern/subr_psref.c Wed Jun 02 08:46:16 2021 +0000
+++ b/sys/kern/subr_psref.c Wed Jun 02 09:23:32 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_psref.c,v 1.13 2019/05/17 03:34:26 ozaki-r Exp $ */
+/* $NetBSD: subr_psref.c,v 1.14 2021/06/02 09:23:32 riastradh Exp $ */
/*-
* Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_psref.c,v 1.13 2019/05/17 03:34:26 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_psref.c,v 1.14 2021/06/02 09:23:32 riastradh Exp $");
#include <sys/types.h>
#include <sys/condvar.h>
@@ -293,11 +293,11 @@ psref_acquire(struct psref *psref, const
"passive references are CPU-local,"
" but preemption is enabled and the caller is not"
" in a softint or CPU-bound LWP");
+ KASSERTMSG(!target->prt_draining, "psref target already destroyed: %p",
+ target);
KASSERTMSG((target->prt_class == class),
"mismatched psref target class: %p (ref) != %p (expected)",
target->prt_class, class);
- KASSERTMSG(!target->prt_draining, "psref target already destroyed: %p",
- target);
/* Block interrupts and acquire the current CPU's reference list. */
s = splraiseipl(class->prc_iplcookie);
@@ -516,13 +516,13 @@ psref_target_destroy(struct psref_target
ASSERT_SLEEPABLE();
+ KASSERTMSG(!target->prt_draining, "psref target already destroyed: %p",
+ target);
KASSERTMSG((target->prt_class == class),
"mismatched psref target class: %p (ref) != %p (expected)",
target->prt_class, class);
/* Request psref_release to notify us when done. */
- KASSERTMSG(!target->prt_draining, "psref target already destroyed: %p",
- target);
target->prt_draining = true;
/* Wait until there are no more references on any CPU. */
Home |
Main Index |
Thread Index |
Old Index