Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2306102imm; Tue, 10 Jul 2018 17:53:17 -0700 (PDT) X-Google-Smtp-Source: AAOMgpckRieoxP6tUVDh8ZCpLZ9JGDQP4It+YDN4vRdWmuesSUkURe5M3VwAl93bZYCc4Txu5NgC X-Received: by 2002:a62:1016:: with SMTP id y22-v6mr2308463pfi.109.1531270397323; Tue, 10 Jul 2018 17:53:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531270397; cv=none; d=google.com; s=arc-20160816; b=E8v9SxsIpTu53Wl7cz3vGSA7cNpWG90+KFYZwCj07XVrEO/WPog1jgkcGU8VMTqptT kkv2tUVAFqtiSzP/o+ntbKR+NmaxCOmylX6++Qe3G9oSxAOaILIn4OdMQiiAoOGh2lbb eOXQzZDcLU+rW9R5xLgu+PyJvizWs0x0IB2TjvoOck/8nflKBhAPxMRtoINkqrIkwdpK FR7tDOzoak+P29Kr2wA8/v+9HFcKzGFQk1DBe1QfCr44Vx1/rhNaI1R+QKzMbIJnxLPW Xh/vhUeLDJjBBp6Iu8a+FwxIbPFgL5zJwjSVA3JGNSck+TBPIk3qf6AM2n5jZNTl2p1z pWSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature:dkim-signature :arc-authentication-results; bh=rQNkK2euIJPwF7BL7Vlmy5MsHJgcq4rywadMFS7vafU=; b=TcHa37AjsbNq9VWsjO4CcJ5z846P3N2+jPD/CKWzsJeNzhXju6mOtGPdtsk5tZHUV6 EY5N/nbBrsmrXnucCqzB5N2vvpEzIstLOJkfSHpUubhFdeMETr1HavZFlToM0ijPJBEL wywravbnHZ+Btzmwu73bfrEZRsA0rQeARcK1wBbLnPsAGmvrfO3taZzPpHWcZGE/mtR4 xurLd1a/dIURY311G8wN+GF3WW9ItrRib6O0HnCVx2fmqW5n5t6Apf7L1SRdlA0z1Qs4 sn3E9EkMs6nRLz7weHGryeeIpn2SUkdnZIDNPa3D0+O/PViNfER+qldLdRY488nrpySZ 6DWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@google.com header.s=20161025 header.b=E+Dr+98I; dkim=fail header.i=@chromium.org header.s=google header.b=TdFwdBC5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s9-v6si17923544pfm.85.2018.07.10.17.53.01; Tue, 10 Jul 2018 17:53:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@google.com header.s=20161025 header.b=E+Dr+98I; dkim=fail header.i=@chromium.org header.s=google header.b=TdFwdBC5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732342AbeGKAxm (ORCPT + 99 others); Tue, 10 Jul 2018 20:53:42 -0400 Received: from mail-yw0-f196.google.com ([209.85.161.196]:35130 "EHLO mail-yw0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732263AbeGKAxl (ORCPT ); Tue, 10 Jul 2018 20:53:41 -0400 Received: by mail-yw0-f196.google.com with SMTP id t18-v6so8556777ywg.2 for ; Tue, 10 Jul 2018 17:52:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=rQNkK2euIJPwF7BL7Vlmy5MsHJgcq4rywadMFS7vafU=; b=E+Dr+98I65HtMIFNGeZG6N4sHVplBSADU38AVk1mTPvVHlzlggtT2afubRI6+q3l+g txVJjgN86/Mog1BGg91CLbJ8FUcponUOLC0kj5JyqPrN+vDoxQpBvFyIYWz6hkaMK3RP rC4BXQRqjktBLMiCtMxhk49gBF7s8gHrwB39zeYQgjDrbreJErXXAH3oWYqOJuNvwyDF 2+i1phKQSZBkrU7qi1ZT+2Xv3i9IS+iKzmFqm85JEs8FUcrpeC3sUX7lucEVKfzhMLii +QPmPksODEHvsOiZN5nxNEIYJBXHeDVWFdvzGrE1WMURmpcouQzN2RT0JqmPuxtpvvOP W9yA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=rQNkK2euIJPwF7BL7Vlmy5MsHJgcq4rywadMFS7vafU=; b=TdFwdBC5n+DU0eSXMnw3DQSFh6h1otiUFQj3EPVqsOQsWFsJY5bE9F7cK5VcOfHswE /OWpeGL1vz0cZDQt7aYo6nXNpzAROfeehgV9r5PF5o5+tHr1TOf974XLrTBoT31+jAxS CB1lRwNZMzhwEqqJKhplTUGTGQzwTIyuM0CVM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=rQNkK2euIJPwF7BL7Vlmy5MsHJgcq4rywadMFS7vafU=; b=TC5G2TNKnvK3J1chRtGfX5rHSo5Wce6s4zRxS5Rnz5P4ZSnbRr59AO2sBhsYuXez4c HfT0Dcy8acq3aPSjgUrq8bp9T4jBtR3nbkXLbL554Kg2MgvCV0mD9qkBR0VCQKrzuEqk 40Z5QdSXSLbkHR7OV6GUgGBVQG4Yvb3IZyuiJhJ+rGfJs29SJwTcZ7Q0COtNBa2ZoTWR 2KpI64dwNZgAO7m4EgqodebZ4Qz1fk/KYIOOY0YDuno7XwznRkPZf4COZgxRwlD8Buz0 CTG54M6bOBLSJqK2y7qr7la7M6IZPD+1RjxXAJkU+2rgkjYPkyLzowt3g8QvAsZagXs1 Hnew== X-Gm-Message-State: APt69E34I4dRr+74GJPFunV+f8K/1xmtpFzESjuHL3uEBNDk/FQKRXUK rGL4ZRpRG3Y7cVB+wdjJIIw6R3Clyc6CEnYOXIAt+Q== X-Received: by 2002:a0d:fa42:: with SMTP id k63-v6mr11218411ywf.53.1531270322619; Tue, 10 Jul 2018 17:52:02 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a25:5f51:0:0:0:0:0 with HTTP; Tue, 10 Jul 2018 17:52:01 -0700 (PDT) In-Reply-To: <20180627035642.8561-2-nicolas.pitre@linaro.org> References: <20180627035642.8561-1-nicolas.pitre@linaro.org> <20180627035642.8561-2-nicolas.pitre@linaro.org> From: Kees Cook Date: Tue, 10 Jul 2018 17:52:01 -0700 X-Google-Sender-Auth: GHFFSOyqngg2t5JsXSoh4_Xa9RU Message-ID: Subject: Re: [PATCH v3 1/3] vt: preserve unicode values corresponding to screen characters To: Nicolas Pitre Cc: Greg Kroah-Hartman , Dave Mielke , Samuel Thibault , Adam Borowski , Alan Cox , LKML , linux-console@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 26, 2018 at 8:56 PM, Nicolas Pitre wrote: > The vt code translates UTF-8 strings into glyph index values and stores > those glyph values directly in the screen buffer. Because there can only > be at most 512 glyphs, it is impossible to represent most unicode > characters, in which case a default glyph (often '?') is displayed > instead. The original unicode value is then lost. > > This patch implements the basic screen buffer handling to preserve unicode > values alongside corresponding display glyphs. It is not activated by > default, meaning that people not relying on that functionality won't get > the implied overhead. > > Signed-off-by: Nicolas Pitre > Tested-by: Dave Mielke > Acked-by: Adam Borowski > --- > drivers/tty/vt/vt.c | 220 +++++++++++++++++++++++++++++++-- > include/linux/console_struct.h | 2 + > 2 files changed, 211 insertions(+), 11 deletions(-) > > diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c > index 1eb1a376a0..7b636638b3 100644 > --- a/drivers/tty/vt/vt.c > +++ b/drivers/tty/vt/vt.c > [...] > +static void vc_uniscr_scroll(struct vc_data *vc, unsigned int t, unsigned int b, > + enum con_scroll dir, unsigned int nr) > +{ > + struct uni_screen *uniscr = get_vc_uniscr(vc); > + > + if (uniscr) { > + unsigned int s, d, rescue, clear; > + char32_t *save[nr]; Can you adjust this to avoid the VLA here? I've almost gotten all VLAs removed from the kernel[1], and this is introducing a new one. :) Thanks! -Kees [1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com > + > + s = clear = t; > + d = t + nr; > + rescue = b - nr; > + if (dir == SM_UP) { > + swap(s, d); > + swap(clear, rescue); > + } > + memcpy(save, uniscr->lines + rescue, nr * sizeof(*save)); > + memmove(uniscr->lines + d, uniscr->lines + s, > + (b - t - nr) * sizeof(*uniscr->lines)); > + memcpy(uniscr->lines + clear, save, nr * sizeof(*save)); > + vc_uniscr_clear_lines(vc, clear, nr); > + } > +} -- Kees Cook Pixel Security