Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3990325pxb; Tue, 2 Mar 2021 04:04:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJzRzuCxyi28TM/KLqSjF60y8r2L7ctXwpY0E9km5EcrNa+PQZ1adOnhGA3M5C72TC2wEqts X-Received: by 2002:a05:6402:424a:: with SMTP id g10mr20118904edb.236.1614686693301; Tue, 02 Mar 2021 04:04:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614686693; cv=none; d=google.com; s=arc-20160816; b=DX5L+fUBYmZsZNjb6VZ+NeEdwsj3Vtlq6LF/2iwMMd/wEChWnnJgNCE6sMVN4B3B/x iQ98kEJ6dnoFvdc//2ETJ148mEwaVXMpDJkEBQC3cL6PiexFvr9ZIm8lVnRAXMe2DBWi wiP3qeGguW2V60Mt2oWs9WhRDh6C/fgnL/QfW73JCMG+T/jIrOWbp+JQ9y9aDwIAUJpB 859nncKOACUholeb+VkW4PI3casdgBZ7deM0MqViqSe/3fTG4Y4odSeQGaUzo4yJEgip YxxPAJWYN4ZtyREVKfZeQa2RM6zhJI2DBTaL6qgB+iHOViPjF/HXuNhwA9kwUKSWpriT 9r/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=V2lWZkClTBACH6t3XCIZuCQVC0ZzoPHWaAiGbySux+Q=; b=hQdEY15/pbOmafLnkYPwmFF1tu4acdfwuaO+LKN82zpXt6kvXIIj01J549MTpDCRGO tHB2YUdLGs19/QBObTUEcG9rqb64yH+K/M/D8Bm1GNPawOTVuJRMoIUKJEuxnOKLT3UU SLjnjg9WIEjsYtgE5vPaw4VBebp3OH/jKmnHPjP2IWGOY4ub/1jdmQRLUlfeywpYxgUM e08ibdTmeGESsz3iTq9geD19nm+3jwJAMBDEXap6UrGUUObUmYbJBjSq/IpgheWxsneb WZKpdDTg64JS12QZ8Rxfx3Smcu9MDnoXDJzsgN/NIXBVl9tjBInD3UR6TGdxhmzrzR6g GiPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2Xssrpwv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d5si12230113edu.258.2021.03.02.04.04.29; Tue, 02 Mar 2021 04:04:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2Xssrpwv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1442465AbhCBCNn (ORCPT + 99 others); Mon, 1 Mar 2021 21:13:43 -0500 Received: from mail.kernel.org ([198.145.29.99]:52977 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241678AbhCATix (ORCPT ); Mon, 1 Mar 2021 14:38:53 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id EAC106517D; Mon, 1 Mar 2021 17:09:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614618593; bh=nGnFfrInr+dHRWvcs05EDNB0GEfbf8aJ0AIijUhnAu0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2XssrpwvALjy7GWjqjOjz9VtPObnyWTWfmKDjiRrkxMEkE5tR2QYn0h8j08yaaKXV 8+tqs1EtjWpPAfqZG7zrG08Zk9tXzcVsgkuzUImzVLBFS3gx1ykD+hnCTXvuCRH0KA AGMDBWQXTelPoVO3FHSUxhwMf3pr1tHdfEhxhPzQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Corentin Labbe , Herbert Xu , Sasha Levin Subject: [PATCH 5.10 144/663] crypto: sun4i-ss - linearize buffers content must be kept Date: Mon, 1 Mar 2021 17:06:32 +0100 Message-Id: <20210301161148.891094440@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Corentin Labbe [ Upstream commit 583513510a7acd2306787865bcd19ebb2f629d42 ] When running the non-optimized cipher function, SS produce partial random output. This is due to linearize buffers being reseted after each loop. For preserving stack, instead of moving them back to start of function, I move them in sun4i_ss_ctx. Fixes: 8d3bcb9900ca ("crypto: sun4i-ss - reduce stack usage") Signed-off-by: Corentin Labbe Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c | 12 ++++-------- drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h | 2 ++ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c index b72de8939497b..19f1aa577ed4d 100644 --- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c +++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c @@ -233,8 +233,6 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq) while (oleft) { if (ileft) { - char buf[4 * SS_RX_MAX];/* buffer for linearize SG src */ - /* * todo is the number of consecutive 4byte word that we * can read from current SG @@ -256,12 +254,12 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq) */ todo = min(rx_cnt * 4 - ob, ileft); todo = min_t(size_t, todo, mi.length - oi); - memcpy(buf + ob, mi.addr + oi, todo); + memcpy(ss->buf + ob, mi.addr + oi, todo); ileft -= todo; oi += todo; ob += todo; if (!(ob % 4)) { - writesl(ss->base + SS_RXFIFO, buf, + writesl(ss->base + SS_RXFIFO, ss->buf, ob / 4); ob = 0; } @@ -295,13 +293,11 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq) oo = 0; } } else { - char bufo[4 * SS_TX_MAX]; /* buffer for linearize SG dst */ - /* * read obl bytes in bufo, we read at maximum for * emptying the device */ - readsl(ss->base + SS_TXFIFO, bufo, tx_cnt); + readsl(ss->base + SS_TXFIFO, ss->bufo, tx_cnt); obl = tx_cnt * 4; obo = 0; do { @@ -313,7 +309,7 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq) */ todo = min_t(size_t, mo.length - oo, obl - obo); - memcpy(mo.addr + oo, bufo + obo, todo); + memcpy(mo.addr + oo, ss->bufo + obo, todo); oleft -= todo; obo += todo; oo += todo; diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h index 163962f9e2845..02105b39fbfec 100644 --- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h +++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h @@ -148,6 +148,8 @@ struct sun4i_ss_ctx { struct reset_control *reset; struct device *dev; struct resource *res; + char buf[4 * SS_RX_MAX];/* buffer for linearize SG src */ + char bufo[4 * SS_TX_MAX]; /* buffer for linearize SG dst */ spinlock_t slock; /* control the use of the device */ #ifdef CONFIG_CRYPTO_DEV_SUN4I_SS_PRNG u32 seed[SS_SEED_LEN / BITS_PER_LONG]; -- 2.27.0