From owner-svn-src-all@freebsd.org Mon Dec 23 20:19:24 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2B9591CF801; Mon, 23 Dec 2019 20:19:24 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47hW0X0SkGz41Rk; Mon, 23 Dec 2019 20:19:24 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0B3A21D086; Mon, 23 Dec 2019 20:19:24 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id xBNKJNvW020403; Mon, 23 Dec 2019 20:19:23 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id xBNKJNFi020402; Mon, 23 Dec 2019 20:19:23 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201912232019.xBNKJNFi020402@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Mon, 23 Dec 2019 20:19:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r356040 - in stable: 11/sys/dev/vt 12/sys/dev/vt X-SVN-Group: stable-12 X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in stable: 11/sys/dev/vt 12/sys/dev/vt X-SVN-Commit-Revision: 356040 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Dec 2019 20:19:24 -0000 Author: kevans Date: Mon Dec 23 20:19:23 2019 New Revision: 356040 URL: https://svnweb.freebsd.org/changeset/base/356040 Log: MFC r355935: vt: fix post-boot keyboard attachment With absolutely no keyboards attached and no kbdmux in kernel, we descend down this error path. 0 is a valid keyboard index, so leaving vd->vd_keyboard at 0 when there's no keyboard found is objectively wrong as later attachment of a keyboard will fail -- it gets index 0, and vt thinks it's already using that keyboard. This is decidedly the corniest of corner cases, but it's easy enough to get correct that we should do so. Tested in a kernel without atkbdc, atkbd, psm, kbdmux, ukbd, hyperv then loading ukbd post-boot and attaching a usb keyboard. Modified: stable/12/sys/dev/vt/vt_core.c Directory Properties: stable/12/ (props changed) Changes in other areas also in this revision: Modified: stable/11/sys/dev/vt/vt_core.c Directory Properties: stable/11/ (props changed) Modified: stable/12/sys/dev/vt/vt_core.c ============================================================================== --- stable/12/sys/dev/vt/vt_core.c Mon Dec 23 20:18:05 2019 (r356039) +++ stable/12/sys/dev/vt/vt_core.c Mon Dec 23 20:19:23 2019 (r356040) @@ -1039,6 +1039,13 @@ vt_allocate_keyboard(struct vt_device *vd) DPRINTF(20, "%s: no kbdmux allocated\n", __func__); idx0 = kbd_allocate("*", -1, vd, vt_kbdevent, vd); if (idx0 < 0) { + /* + * We don't have a keyboard yet, so we must invalidate + * vd->vd_keyboard so that later keyboard attachment can + * succeed. Any value >= 0 can accidentally match a + * keyboard. + */ + vd->vd_keyboard = -1; DPRINTF(10, "%s: No keyboard found.\n", __func__); return (-1); }