Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp422350pxb; Wed, 3 Mar 2021 06:42:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJy9bKE/8H5uzmmGK3ge+o7j/h9GgwYWweOD3cEKvkOJ4Qtp6J0QY1Saub0ZA2kIfSxLqobm X-Received: by 2002:a50:9dc9:: with SMTP id l9mr25634109edk.377.1614782557770; Wed, 03 Mar 2021 06:42:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614782557; cv=none; d=google.com; s=arc-20160816; b=KtQ2evyqfovbN1hAl14fpO/Usa1oo3Uigb0HTuKkSS7Cq8yO09kFEoXdiGwV+9paHD p1KdMJ++AFNWJ5uWCdDjHKgqBbLzAtXtvpf7DfRnsTCQ8YqRoY6d71Xx0rL5z0UoSeL1 X2nrUxzVJqAEbtDbwzLpLrx54nVxDt2PJAVnx2rExVO4GpMaeagJ5iY7P338AcPBcQbE HEkADyO9FvipUZhznVYQ4uwCCNHRaO7os/iDE8YOppV4EWVIoFzY3xOCyI+MQdenmI66 IK54L61RMqEvIULBxnuF3d3B07ZrzdN9BlJIHI1y0MoMIL6bd/VjFa6ZhuWkuWJceASU vRTg== 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=Sn99AuAdmJYhSU5EhN/AtaYL5/HxAAajXdwaEdhQdNA=; b=a9MpKM1j1TbS5V19C4zy+2lrA/UaKU55vm9+rHQjLmU5p+PGs5Qdk679BOBHa6P3wI hjhHcFNVWHS7a/h9qGHWJiyUCkWGEA7xr9O/XrWy7q954Jyu4Ztl79CyhnjmW1UcNCxZ 8Zf2Wex1bZwEAzMzCmRti5UXnhJtiqwVl5rjDp6B/XORJ3JVCef/rwNtLBeai6xz5gDJ 3eDwCv7z1rq0zuI0py9YEy02pPAW+WLndihjcHfvRwR4+c5E9LIPDcqw4tf/t432ONiX LXaSVttPQUytdnawO/NmYHgVVRF2Xr/065nfrsxePTMkKrO36Nu0ysHzbpl1YGxIkf1v nZOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="c3Z74j/g"; 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 e12si10286526edj.427.2021.03.03.06.41.45; Wed, 03 Mar 2021 06:42:37 -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="c3Z74j/g"; 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 S243481AbhCAWAm (ORCPT + 99 others); Mon, 1 Mar 2021 17:00:42 -0500 Received: from mail.kernel.org ([198.145.29.99]:48862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238412AbhCAR0t (ORCPT ); Mon, 1 Mar 2021 12:26:49 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 726E165085; Mon, 1 Mar 2021 16:50:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614617438; bh=V4odyZTnrW6B0VTMxP9QBr+MIP2S17ro+EWJPZdjFTs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c3Z74j/gxKayyCUMrEb47Tl6ZnpzLjQuzZLpvOQvq5pmPNj200VxXOKuGBP6ANJT7 GBPpFXvWe9Xqg89hPYgcccIhtWWei2aSJ2EAmr4HrhccCPpxdtdGrkSbg6VSjTIpIq Ksvv8hKBRuEEECVLSDDB4yDYMzVsgQcQo3sHJm38= 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.4 074/340] crypto: sun4i-ss - linearize buffers content must be kept Date: Mon, 1 Mar 2021 17:10:18 +0100 Message-Id: <20210301161051.970140521@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161048.294656001@linuxfoundation.org> References: <20210301161048.294656001@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/sunxi-ss/sun4i-ss-cipher.c | 12 ++++-------- drivers/crypto/sunxi-ss/sun4i-ss.h | 2 ++ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c index 7e5e092a23b3c..4145a046274e5 100644 --- a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c @@ -235,8 +235,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 @@ -258,12 +256,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; } @@ -297,13 +295,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 { @@ -315,7 +311,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/sunxi-ss/sun4i-ss.h b/drivers/crypto/sunxi-ss/sun4i-ss.h index 35a27a7145f84..9a2adc130d9aa 100644 --- a/drivers/crypto/sunxi-ss/sun4i-ss.h +++ b/drivers/crypto/sunxi-ss/sun4i-ss.h @@ -138,6 +138,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