From owner-dev-commits-src-branches@freebsd.org Thu Feb 18 22:01:13 2021 Return-Path: Delivered-To: dev-commits-src-branches@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 78A4B529BC4; Thu, 18 Feb 2021 22:01:13 +0000 (UTC) (envelope-from git@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) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DhTDn1Nzwz3sqP; Thu, 18 Feb 2021 22:01:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 19262202A1; Thu, 18 Feb 2021 22:01:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 11IM1CY1060312; Thu, 18 Feb 2021 22:01:12 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 11IM1CDI060311; Thu, 18 Feb 2021 22:01:12 GMT (envelope-from git) Date: Thu, 18 Feb 2021 22:01:12 GMT Message-Id: <202102182201.11IM1CDI060311@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Toomas Soome Subject: git: 03c31d3ca31a - releng/13.0 - vt: terminal size can grow too big with small font MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tsoome X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.0 X-Git-Reftype: branch X-Git-Commit: 03c31d3ca31ab211055e01aae6b8a81c27d1a29b Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-branches@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commits to the stable branches of the FreeBSD src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Feb 2021 22:01:15 -0000 The branch releng/13.0 has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=03c31d3ca31ab211055e01aae6b8a81c27d1a29b commit 03c31d3ca31ab211055e01aae6b8a81c27d1a29b Author: Toomas Soome AuthorDate: 2021-01-21 22:18:56 +0000 Commit: Toomas Soome CommitDate: 2021-02-18 08:22:43 +0000 vt: terminal size can grow too big with small font vt is using static buffers for on screen data, the buffer size is calculated based on maximum supported screen size and 8x16 font. When using hi-res graphics and very smaller than 8x16 font, we need to be careful not to overflow static buffers in vt. Testing: I did test by building smaller buffers than vt currently is using, royger was testing on actual 4k capable hardware. Tested by: royger (cherry picked from commit 32bf05ad89aaa93f4dd27e3721f4cb52cf57fa03) Approved by: re(gjb) --- sys/dev/vt/vt_core.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c index 05c383829f49..e4a8288962c4 100644 --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -640,8 +640,10 @@ vt_termsize(struct vt_device *vd, struct vt_font *vf, term_pos_t *size) size->tp_row -= vt_logo_sprite_height; size->tp_col = vd->vd_width; if (vf != NULL) { - size->tp_row /= vf->vf_height; - size->tp_col /= vf->vf_width; + size->tp_row = MIN(size->tp_row / vf->vf_height, + PIXEL_HEIGHT(VT_FB_MAX_HEIGHT)); + size->tp_col = MIN(size->tp_col / vf->vf_width, + PIXEL_WIDTH(VT_FB_MAX_WIDTH)); } } @@ -660,8 +662,10 @@ vt_termrect(struct vt_device *vd, struct vt_font *vf, term_rect_t *rect) rect->tr_begin.tp_row = howmany(rect->tr_begin.tp_row, vf->vf_height); - rect->tr_end.tp_row /= vf->vf_height; - rect->tr_end.tp_col /= vf->vf_width; + rect->tr_end.tp_row = MIN(rect->tr_end.tp_row / vf->vf_height, + PIXEL_HEIGHT(VT_FB_MAX_HEIGHT)); + rect->tr_end.tp_col = MIN(rect->tr_end.tp_col / vf->vf_width, + PIXEL_WIDTH(VT_FB_MAX_WIDTH)); } } @@ -675,8 +679,10 @@ vt_winsize(struct vt_device *vd, struct vt_font *vf, struct winsize *size) size->ws_row = size->ws_ypixel; size->ws_col = size->ws_xpixel = vd->vd_width; if (vf != NULL) { - size->ws_row /= vf->vf_height; - size->ws_col /= vf->vf_width; + size->ws_row = MIN(size->ws_row / vf->vf_height, + PIXEL_HEIGHT(VT_FB_MAX_HEIGHT)); + size->ws_col = MIN(size->ws_col / vf->vf_width, + PIXEL_WIDTH(VT_FB_MAX_WIDTH)); } }