summaryrefslogtreecommitdiffstats
path: root/sys/dev/vt
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2016-08-01 19:50:28 +0000
committeremaste <emaste@FreeBSD.org>2016-08-01 19:50:28 +0000
commita99c449f2ed07be07e948200139fdc82b523e77b (patch)
tree7c00f0c76a8416f3714ec8c6f9026f11ccbc6ce3 /sys/dev/vt
parent82fff785c8abda9358b253361fa1a70807114244 (diff)
downloadFreeBSD-src-a99c449f2ed07be07e948200139fdc82b523e77b.zip
FreeBSD-src-a99c449f2ed07be07e948200139fdc82b523e77b.tar.gz
MFC r303338: vt: lock Giant around kbd calls in CONS_GETINFO
Note that keyboards are stored in an array and are not freed (just "unregistered" by clearing some fields) so a race would be limited to obtaining stale information about an unregistered keyboard. Reported by: CTurt Approved by: re (gjb, kib)
Diffstat (limited to 'sys/dev/vt')
-rw-r--r--sys/dev/vt/vt_core.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
index 32ac080..e09e8a7 100644
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -2228,9 +2228,11 @@ skip_thunk:
return (EINVAL);
if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
kbd = kbd_get_keyboard(vd->vd_keyboard);
if (kbd != NULL)
vt_save_kbd_state(vw, kbd);
+ mtx_unlock(&Giant);
}
vi->m_num = vd->vd_curwindow->vw_number + 1;
OpenPOWER on IntegriCloud