aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_rwlock.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-07-23 17:26:53 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-07-23 17:26:53 +0000
commitc795344ff71ff37ee942ac1ace3705a58a9d9ad8 (patch)
tree9e68af145b3af63758a4d41639dc738e81da2690 /sys/kern/kern_rwlock.c
parente605dcc939848312a201b4aa53bd7bb67d862b18 (diff)
downloadsrc-c795344ff71ff37ee942ac1ace3705a58a9d9ad8.tar.gz
src-c795344ff71ff37ee942ac1ace3705a58a9d9ad8.zip
locks: fix a long standing bug for primitives with kdtrace but without spinning
In such a case the second argument to lock_delay_arg_init was NULL which was immediately causing a null pointer deref. Since the sructure is only used for spin count, provide a dedicate routine initializing it. Reported by: andrew
Notes
Notes: svn path=/head/; revision=363451
Diffstat (limited to 'sys/kern/kern_rwlock.c')
-rw-r--r--sys/kern/kern_rwlock.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 4d1f314c09d3..2489d029cbb3 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -475,7 +475,7 @@ __rw_rlock_hard(struct rwlock *rw, struct thread *td, uintptr_t v
#if defined(ADAPTIVE_RWLOCKS)
lock_delay_arg_init(&lda, &rw_delay);
#elif defined(KDTRACE_HOOKS)
- lock_delay_arg_init(&lda, NULL);
+ lock_delay_arg_init_noadapt(&lda);
#endif
#ifdef HWPMC_HOOKS
@@ -951,7 +951,7 @@ __rw_wlock_hard(volatile uintptr_t *c, uintptr_t v LOCK_FILE_LINE_ARG_DEF)
#if defined(ADAPTIVE_RWLOCKS)
lock_delay_arg_init(&lda, &rw_delay);
#elif defined(KDTRACE_HOOKS)
- lock_delay_arg_init(&lda, NULL);
+ lock_delay_arg_init_noadapt(&lda);
#endif
if (__predict_false(v == RW_UNLOCKED))
v = RW_READ_VALUE(rw);