Received: by 2002:a89:28c:0:b0:1ef:fe5e:92fe with SMTP id j12csp42859lqh; Sun, 17 Mar 2024 20:30:38 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCX+4eNvLMgBXG/cBZ4BTcjjAXYgysEh/NkGL/SQ6ezeSVa4e+fIsv1zrSm1A0KUDPDMJtIMUG+RxgEbVhx9Dau+eiZXrHCnP3lrSf7viQ== X-Google-Smtp-Source: AGHT+IF0J4zP8T2uSqhAE5uaz7WzdjGHcl2shQK4CGGM+cqTM5cJRIEiWJ0eNzdkEhvsizyCPJQv X-Received: by 2002:a25:c7d4:0:b0:dbd:1dfd:8b8 with SMTP id w203-20020a25c7d4000000b00dbd1dfd08b8mr9141800ybe.24.1710732638349; Sun, 17 Mar 2024 20:30:38 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710732638; cv=pass; d=google.com; s=arc-20160816; b=gJFJ+HhD3LzsotFh7QGCDAMj+nkOttYiotAdxOch3mrdhTNSK4Btljiook9tcatWZy wcNb/+4w41O1YPthpx7L8z4qTWD7iA92MqTW68B31PHWa8BMz0KQYBK+6Q7L5YI4RB+T 5eHBIviPvPuCIVq1eoAqhN5mr4gejWiv4MGpRf1MFoWDCMwFTYk0GWZE490u3NrElLOm eEQBoesCR2wsgMhxQiCNibVYDhq16XLyKE41n9m0AHqDpMEHBljfSWl+2SMBCHue0FmK RboqTA44p6Y0QvkcDyTNQErzfPX42wJ1f0qonxhSBFZ2lxDyNM1FsJRkDhNjnPYoj3Kj zCrQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id; bh=2LTBb+IC4gBZjPC8WfJcuRjqx1z7iOZ5G9Zdg0YXMls=; fh=ozG6nYezMH9wNU50exXu67aTk3vobqphtQqOMFP2yb0=; b=S7ginUDAqJryDXPN+q0chq52iqQnpAlBTaEJHXO8HwCKSYIJv40f9wCuqt0HjtgAiR CctuCDY+CF31dgls1b8KGSnEMimTvj+UZ7CAbeNAG/tZuMvrs83qL8j8gOaxZX0Xx/+l oOoU323HaDZahMk+Kbje+L9TVtIhffnaUKSMmnpY2X4DRse3eoV3eD4ClYVIXOZbUcl5 CHyvwfDw0FuBI5xty3OipeF0YBlj2o7EfXq2xUhwiJdz2jUoO3rEaXig9wRPW4q5Df7N wFWNr/umVVAH6qsxCYFkuamP8r/wWNhBOGVvYsGmbDbQ3CU/quO6nId+oWZecfU4swBM x0Mw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-105682-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-105682-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id hf3-20020a0562140e8300b0068f45fc3e67si8049390qvb.16.2024.03.17.20.30.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Mar 2024 20:30:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-105682-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-105682-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-105682-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 16DFA1C21375 for ; Mon, 18 Mar 2024 03:30:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B40141EB4B; Mon, 18 Mar 2024 03:30:30 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 689D9208A4; Mon, 18 Mar 2024 03:30:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710732630; cv=none; b=rdwgFdKavxg1/9+VglQ3dwaBCMX/HYy5tJ0xh3ftNpicIHtYeRMzuT9TE8vNAr4/ttPhdNcpzU6L67oRSmzFLcm52YcRlDmofn1SvR42OtpSvmcwM77uegNOKuVmUP6dZUyXCMDhhp/COpjP3s8mlovEYE147yr8uNIhpKgh7Ok= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710732630; c=relaxed/simple; bh=EMgNM80bPZ4CDOuBL+T0inL+ZN+YgA6L9AcGFFdTTR4=; h=Message-ID:Date:MIME-Version:Subject:From:To:CC:References: In-Reply-To:Content-Type; b=pX6t/s/v0G9ygE+wq9U28zjVlHb1GMYhmFstdL4JBYjmx9bAAaKfJZkPrzVBvk0LDJPtIFgr6+4w20R5NNOqWK2dZZp+lhR/xCnIAwMCH4yEe268WqjGDiMzJ+G6dIQFRoI8zSjve6fX/yJ39NfYQ+RjZSE9rFm4OKzXZA+wq1o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Tyg1H2ZSjz1FMlh; Mon, 18 Mar 2024 11:13:55 +0800 (CST) Received: from dggpemd100002.china.huawei.com (unknown [7.185.36.164]) by mail.maildlp.com (Postfix) with ESMTPS id 23FF1140381; Mon, 18 Mar 2024 11:14:16 +0800 (CST) Received: from [10.67.110.48] (10.67.110.48) by dggpemd100002.china.huawei.com (7.185.36.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.28; Mon, 18 Mar 2024 11:14:15 +0800 Message-ID: <07a3c30d-5a81-4b99-8090-38753b650432@huawei.com> Date: Mon, 18 Mar 2024 11:14:13 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH stable 5.10] serial: sc16is7xx: convert from _raw_ to _noinc_ regmap functions for FIFO Content-Language: en-US From: Gong Ruiqi To: Greg Kroah-Hartman , Jiri Slaby , Hugo Villeneuve CC: Jon Ringle , , , Wang Weiyang , References: <20240318025259.1412353-1-gongruiqi1@huawei.com> In-Reply-To: <20240318025259.1412353-1-gongruiqi1@huawei.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To dggpemd100002.china.huawei.com (7.185.36.164) Oops. + Cc stable@vger.kernel.org On 2024/03/18 10:52, GONG, Ruiqi wrote: > From: Hugo Villeneuve > > commit dbf4ab821804df071c8b566d9813083125e6d97b upstream. > > The SC16IS7XX IC supports a burst mode to access the FIFOs where the > initial register address is sent ($00), followed by all the FIFO data > without having to resend the register address each time. In this mode, the > IC doesn't increment the register address for each R/W byte. > > The regmap_raw_read() and regmap_raw_write() are functions which can > perform IO over multiple registers. They are currently used to read/write > from/to the FIFO, and although they operate correctly in this burst mode on > the SPI bus, they would corrupt the regmap cache if it was not disabled > manually. The reason is that when the R/W size is more than 1 byte, these > functions assume that the register address is incremented and handle the > cache accordingly. > > Convert FIFO R/W functions to use the regmap _noinc_ versions in order to > remove the manual cache control which was a workaround when using the > _raw_ versions. FIFO registers are properly declared as volatile so > cache will not be used/updated for FIFO accesses. > > Fixes: dfeae619d781 ("serial: sc16is7xx") > Cc: > Signed-off-by: Hugo Villeneuve > Link: https://lore.kernel.org/r/20231211171353.2901416-6-hugo@hugovil.com > Signed-off-by: Greg Kroah-Hartman > Cc: Hugo Villeneuve > Signed-off-by: GONG, Ruiqi > --- > > The mainline commit dbf4ab821804 ("serial: sc16is7xx: convert from _raw_ > to _noinc_ regmap functions for FIFO") by Hugo has been assigned to be > CVE-2023-52488, but for stable branches lower than 6.1 there's no > official backport. > > I made up this backport patch for 5.10, and its correctness has been > confirmed in previous communication with Hugo. Let's publicize it and > merge it into upstream. > > drivers/tty/serial/sc16is7xx.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c > index 31e0c5c3ddea..29f05db0d49b 100644 > --- a/drivers/tty/serial/sc16is7xx.c > +++ b/drivers/tty/serial/sc16is7xx.c > @@ -376,9 +376,7 @@ static void sc16is7xx_fifo_read(struct uart_port *port, unsigned int rxlen) > const u8 line = sc16is7xx_line(port); > u8 addr = (SC16IS7XX_RHR_REG << SC16IS7XX_REG_SHIFT) | line; > > - regcache_cache_bypass(s->regmap, true); > - regmap_raw_read(s->regmap, addr, s->buf, rxlen); > - regcache_cache_bypass(s->regmap, false); > + regmap_noinc_read(s->regmap, addr, s->buf, rxlen); > } > > static void sc16is7xx_fifo_write(struct uart_port *port, u8 to_send) > @@ -394,9 +392,7 @@ static void sc16is7xx_fifo_write(struct uart_port *port, u8 to_send) > if (unlikely(!to_send)) > return; > > - regcache_cache_bypass(s->regmap, true); > - regmap_raw_write(s->regmap, addr, s->buf, to_send); > - regcache_cache_bypass(s->regmap, false); > + regmap_noinc_write(s->regmap, addr, s->buf, to_send); > } > > static void sc16is7xx_port_update(struct uart_port *port, u8 reg, > @@ -489,6 +485,11 @@ static bool sc16is7xx_regmap_precious(struct device *dev, unsigned int reg) > return false; > } > > +static bool sc16is7xx_regmap_noinc(struct device *dev, unsigned int reg) > +{ > + return reg == SC16IS7XX_RHR_REG; > +} > + > static int sc16is7xx_set_baud(struct uart_port *port, int baud) > { > struct sc16is7xx_port *s = dev_get_drvdata(port->dev); > @@ -1439,6 +1440,8 @@ static struct regmap_config regcfg = { > .cache_type = REGCACHE_RBTREE, > .volatile_reg = sc16is7xx_regmap_volatile, > .precious_reg = sc16is7xx_regmap_precious, > + .writeable_noinc_reg = sc16is7xx_regmap_noinc, > + .readable_noinc_reg = sc16is7xx_regmap_noinc, > }; > > #ifdef CONFIG_SERIAL_SC16IS7XX_SPI