diff options
author | emaste <emaste@FreeBSD.org> | 2016-08-01 19:50:28 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2016-08-01 19:50:28 +0000 |
commit | a99c449f2ed07be07e948200139fdc82b523e77b (patch) | |
tree | 7c00f0c76a8416f3714ec8c6f9026f11ccbc6ce3 /sys/dev/vt | |
parent | 82fff785c8abda9358b253361fa1a70807114244 (diff) | |
download | FreeBSD-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.c | 2 |
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; |