Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp11012ybm; Mon, 20 May 2019 10:58:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqwCSv+428+hZPplSeeDtx9+OiUNwGYbSJsnMQaHXFmT/Svv90UGewHzLb4U9zTnHxyL81i4 X-Received: by 2002:a65:60c7:: with SMTP id r7mr74657979pgv.22.1558375116340; Mon, 20 May 2019 10:58:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558375116; cv=none; d=google.com; s=arc-20160816; b=rYSooDy82d3PAyMNYSK45AO1uk7B1v/bJ1/DFQqGgjhHGaQgCgGVJsFLmi8WfcX6H4 PWNz8ayT6XiNcQ9L22+B//e7ArqBdOePUD3B8g35QTEP+YH8t0sM2IwUBJ97R+wtPsPR Oar92V3jxTHcYWdUYiE5oWF5pAvUmG0U1JTnm0eYqkw9uXGlP0UofDAcX37lqwpK8JDq 6gIffFsT2vXVjTpZDft/K7p7s+vg3egayEcGGFsr+c0phGfwmrwMFefivPiAoyQeMojh 2JC9zTx8SLJv6ahbCU/qw/5bnDRS8if6PV8dT48/LdeUQKLOttNbkaRZL1V+0R7h9vi9 +GMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HFiOTadPqxz7CTrDXRcVqVi8RgVgp6287GZkQmc8CBo=; b=MzcH0MEqQtG3ApEIj54Jwqq/F/s6WqM60ldFL4K2rOFAmoBIz1BATsV1NBMXYpj3Mq ikwPQ2rMGXh4kS5hSXR9lH5ufipGg/mubrcYh0FBkhxvGWkaVl6C0pCGDvUbxl917woK F+z/5yswQTj5HCIAPKXBWR7u0M1ECp3DMSWE4E5JV+y861rf8OsV9hHPf4Y0aO6xoV/X UR2vg/WDhyUPMMrhMqo0UTfs+WfwX+ExlXO2cJFpXrAgTJFCrNvkKkWQbo3NnyPFfq0s pWRpfRO/tlb2QyQq7V+uKzJbOPhPN8r/yzc+TnkoKL628DG25f+RsgeikCD8VN5lsDel ca3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hd9zbMUY; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n33si13124001pgl.403.2019.05.20.10.58.21; Mon, 20 May 2019 10:58:36 -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=pass header.i=@kernel.org header.s=default header.b=hd9zbMUY; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388931AbfETMwP (ORCPT + 99 others); Mon, 20 May 2019 08:52:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:60144 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387769AbfETMS4 (ORCPT ); Mon, 20 May 2019 08:18:56 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id BBD1C21019; Mon, 20 May 2019 12:18:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558354735; bh=W6/X+FsS7lgY0ci9ipL3DN72hdu/rw1yHfoWA9Ns1Uk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hd9zbMUYtBD66HNLPonM5N85hDP7a8hQgD8Fq2uYgCEQDZVkJ/PeXpXYO0zY+q6GY SmB9XdDZODG80e02iGCeNCg9WvEIFI4QvrbFqP+Abs7c2kApfdCIC7n2VrRPhSzutz NuB+K4hW4ioi0AZZEWWdFXsNtFAf0AeULxhVf+/0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Biggers , Zhang Zhijie , Herbert Xu Subject: [PATCH 4.14 23/63] crypto: rockchip - update IV buffer to contain the next IV Date: Mon, 20 May 2019 14:14:02 +0200 Message-Id: <20190520115233.577744541@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190520115231.137981521@linuxfoundation.org> References: <20190520115231.137981521@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zhang Zhijie commit f0cfd57b43fec65761ca61d3892b983a71515f23 upstream. The Kernel Crypto API request output the next IV data to IV buffer for CBC implementation. So the last block data of ciphertext should be copid into assigned IV buffer. Reported-by: Eric Biggers Fixes: 433cd2c617bf ("crypto: rockchip - add crypto driver for rk3288") Cc: # v4.5+ Signed-off-by: Zhang Zhijie Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c | 25 +++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) --- a/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c +++ b/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c @@ -250,9 +250,14 @@ static int rk_set_data_start(struct rk_c u8 *src_last_blk = page_address(sg_page(dev->sg_src)) + dev->sg_src->offset + dev->sg_src->length - ivsize; - /* store the iv that need to be updated in chain mode */ - if (ctx->mode & RK_CRYPTO_DEC) + /* Store the iv that need to be updated in chain mode. + * And update the IV buffer to contain the next IV for decryption mode. + */ + if (ctx->mode & RK_CRYPTO_DEC) { memcpy(ctx->iv, src_last_blk, ivsize); + sg_pcopy_to_buffer(dev->first, dev->src_nents, req->info, + ivsize, dev->total - ivsize); + } err = dev->load_data(dev, dev->sg_src, dev->sg_dst); if (!err) @@ -288,13 +293,19 @@ static void rk_iv_copyback(struct rk_cry struct ablkcipher_request *req = ablkcipher_request_cast(dev->async_req); struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); + struct rk_cipher_ctx *ctx = crypto_ablkcipher_ctx(tfm); u32 ivsize = crypto_ablkcipher_ivsize(tfm); - if (ivsize == DES_BLOCK_SIZE) - memcpy_fromio(req->info, dev->reg + RK_CRYPTO_TDES_IV_0, - ivsize); - else if (ivsize == AES_BLOCK_SIZE) - memcpy_fromio(req->info, dev->reg + RK_CRYPTO_AES_IV_0, ivsize); + /* Update the IV buffer to contain the next IV for encryption mode. */ + if (!(ctx->mode & RK_CRYPTO_DEC)) { + if (dev->aligned) { + memcpy(req->info, sg_virt(dev->sg_dst) + + dev->sg_dst->length - ivsize, ivsize); + } else { + memcpy(req->info, dev->addr_vir + + dev->count - ivsize, ivsize); + } + } } static void rk_update_iv(struct rk_crypto_info *dev)