Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2826140pxv; Mon, 12 Jul 2021 02:54:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyiljRBXhh8NgZbJgADfBYLgCaOrQmWT7/jeCbxjspRwZc+NeQWDYgzEfDIzJWTKCejA8M+ X-Received: by 2002:a05:6e02:d41:: with SMTP id h1mr7317266ilj.191.1626083656427; Mon, 12 Jul 2021 02:54:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626083656; cv=none; d=google.com; s=arc-20160816; b=PsCBzzeHdFk35Dn6l5v5aBl3JTTZZT7CF29kv3Np4xTQ1pWKtx0UljoUGpzxoofDpa +bENPWJNx8ahLlB7S9z45l+jYoNL39Kjavk7uJjigWZ6a+8c494MrW+rIAx69Te+lI6E FYH18X+rxnWUm+Y6YklZmCeioXAH9HlmmsILr6nS7x9bhF7BxKZJ0JLIJht1zqSNk2cU HzlmFo+hxbmwoBINw0R1UA1tGGMHd2RWdsI4nBMJ3DdN7Qr4pk/avLpBELhh5GGcKd7y HpKVBeIS7EafzvDttp4cr+c+1MRxiSJhzPmloHD8a6lfRLYOZBZPl5xsUgEjTZgEnYgC 5Q9A== 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=Eubl0YiFPIA/M1L5qOIG9Xc5YYQmTk0B64BQnFH7JsQ=; b=OyNYjG77w9NLmlDhztJIMdI+QrYqZYnX6krdFSqzANTfrb6eG/yj0Z4JDqPyuVGvAH +TXy/j52SmRbbua0t5q8yr00mq/komFD/3Ye357KTNQJ/Ygg5oSu9iiAlUP0yj229vC8 rOLCp3gMHaZrOfJzAA4JGNXL/0HCmiMSTKScR5sPUsyHgBmsRma/Zqt9PVpstzHU3h6p 6fvkYVohJJH1eBDqNw8qIafwZ8yGqg1yQxKcDAou+j2+AneNN83FKNZLK9e9Qbx2Z+RL 7DvCsXweY/I+KD8q0wCzyYrW1eM5U9bWwVfOSl02s7TP+UKEjf6XH2HZg9eglz70Cf03 5TEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=md8uNG7p; 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 d21si440137jam.9.2021.07.12.02.54.05; Mon, 12 Jul 2021 02:54:16 -0700 (PDT) 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=md8uNG7p; 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 S241112AbhGLGyl (ORCPT + 99 others); Mon, 12 Jul 2021 02:54:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:34338 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238113AbhGLGjz (ORCPT ); Mon, 12 Jul 2021 02:39:55 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9AB10611C1; Mon, 12 Jul 2021 06:36:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626071775; bh=8lpbkFkp2uAXf6kGjU5dT/KWl7qDzireS2yA1s9yq8s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=md8uNG7pHmLvO7vGs4yOoxHX93N+Q4EZaxGB8shTSk3F4S6FNssgFiPIDJx70vMoa qYfjBrozoMJCYqm/uhA1ilFoONTgigIvK50NeT7bycVySaTXEdFVFrcBhpaYhr5nrD p3gPmmiIceKYMOzhbcJ0vBONyBmItF0Z+FzwgWPI= 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 215/593] crypto: ixp4xx - update IV after requests Date: Mon, 12 Jul 2021 08:06:15 +0200 Message-Id: <20210712060906.574307514@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@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 e8acf011f2e7e21a7e2fae47cbaa06598e533d40 ] Crypto selftests fail on ixp4xx since it do not update IV after skcipher requests. Fixes: 81bef0150074 ("crypto: ixp4xx - Hardware crypto support for IXP4xx CPUs") Signed-off-by: Corentin Labbe Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/ixp4xx_crypto.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c index cbb1fda299a8..5e474a7a1912 100644 --- a/drivers/crypto/ixp4xx_crypto.c +++ b/drivers/crypto/ixp4xx_crypto.c @@ -149,6 +149,8 @@ struct crypt_ctl { struct ablk_ctx { struct buffer_desc *src; struct buffer_desc *dst; + u8 iv[MAX_IVLEN]; + bool encrypt; }; struct aead_ctx { @@ -381,6 +383,20 @@ static void one_packet(dma_addr_t phys) case CTL_FLAG_PERFORM_ABLK: { struct skcipher_request *req = crypt->data.ablk_req; struct ablk_ctx *req_ctx = skcipher_request_ctx(req); + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + unsigned int ivsize = crypto_skcipher_ivsize(tfm); + unsigned int offset; + + if (ivsize > 0) { + offset = req->cryptlen - ivsize; + if (req_ctx->encrypt) { + scatterwalk_map_and_copy(req->iv, req->dst, + offset, ivsize, 0); + } else { + memcpy(req->iv, req_ctx->iv, ivsize); + memzero_explicit(req_ctx->iv, ivsize); + } + } if (req_ctx->dst) { free_buf_chain(dev, req_ctx->dst, crypt->dst_buf); @@ -876,6 +892,7 @@ static int ablk_perform(struct skcipher_request *req, int encrypt) struct ablk_ctx *req_ctx = skcipher_request_ctx(req); struct buffer_desc src_hook; struct device *dev = &pdev->dev; + unsigned int offset; gfp_t flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC; @@ -885,6 +902,7 @@ static int ablk_perform(struct skcipher_request *req, int encrypt) return -EAGAIN; dir = encrypt ? &ctx->encrypt : &ctx->decrypt; + req_ctx->encrypt = encrypt; crypt = get_crypt_desc(); if (!crypt) @@ -900,6 +918,10 @@ static int ablk_perform(struct skcipher_request *req, int encrypt) BUG_ON(ivsize && !req->iv); memcpy(crypt->iv, req->iv, ivsize); + if (ivsize > 0 && !encrypt) { + offset = req->cryptlen - ivsize; + scatterwalk_map_and_copy(req_ctx->iv, req->src, offset, ivsize, 0); + } if (req->src != req->dst) { struct buffer_desc dst_hook; crypt->mode |= NPE_OP_NOT_IN_PLACE; -- 2.30.2