From patchwork Thu Oct 3 13:39:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 175085 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp335133ill; Thu, 3 Oct 2019 06:39:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqx65FcK4pf+60gBmYHBvDGnfz4JiGS0+ZJuofw5IIGvobCAwEbpdi9kC0mEqfAuC3L8O6OT X-Received: by 2002:a50:ac0d:: with SMTP id v13mr9431517edc.189.1570109969202; Thu, 03 Oct 2019 06:39:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570109969; cv=none; d=google.com; s=arc-20160816; b=Cu8S+Rv52/q1GafbpFb6Ntbnrf/f1oGmiI9yRkJferD3S+ykTIz5wEWAGirIFCuDD3 zPlXr9JJEip2mwSFN+Nq27DwlWTU+80g+eiC5OPEew44p/FGlmscQt8okXG1Q35KEw8o 3WDzwksGzS6ZIRDDqNLreC9m/jfZOX/5ZsDh7aPU5cQ5InHlfI62hUO5VwICd9l5Fevb SdrI9PAKrF036VExeByVl75DtxQPY4FZe+O4TVf6aypeq5RVwRuIrWk/8R/yi7r0SjRv cAU17+MWXDp249VICPC5GlVe/FFHC5GWW/cG9U4CH7fd6GElO/kXlIqvY1Egw8FZIg4l L4lA== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=PuAzE/Cx1lnwjKknlmPHdUVNf7zejQRyE3iWQZiZpxI=; b=NRflJGh1nGGQEpMn+WEKf1plD6k07o18llvQDQ+fSQNQscKRo6iuAXef8Mn08/3XCV dGoqJN4KkQ2FKfhdLNEIWmnF4thf4taW32tz5/y+WiEmku0iKc6Mr5H6hOlA4q5dWbZQ UbwTW0EuRqRNhsek5fSlhKCbEQx3+YD5ZmsXz1S9xUz4rEC6oZrTlblZctcofzrFhqIO m4wYTPy11AedDw2TeG1E8Mav7tQ63LSTzHgbtB/7A3lIsWm0wnjS8Nv2XpcS+Pl61yiD BJIxZQ7Fn2KHleKIaoWKv95tX0aC+o1m+W2x/4wuFHUaB/ablYhWxCQVTJm+zsevPqeF 78Eg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xkn7RH5R; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j14si1374202edt.298.2019.10.03.06.39.28; Thu, 03 Oct 2019 06:39:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-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=@linaro.org header.s=google header.b=xkn7RH5R; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730134AbfJCNj2 (ORCPT + 3 others); Thu, 3 Oct 2019 09:39:28 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:44296 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729094AbfJCNj1 (ORCPT ); Thu, 3 Oct 2019 09:39:27 -0400 Received: by mail-wr1-f66.google.com with SMTP id z9so2889905wrl.11 for ; Thu, 03 Oct 2019 06:39:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=PuAzE/Cx1lnwjKknlmPHdUVNf7zejQRyE3iWQZiZpxI=; b=xkn7RH5R38BKEcxPfu88NZjwl3QSJopXSwj6IcyOIiHLV4ye80eDbmL5zmlyYfPD4P bWW0D1gyh6hW9gd/rMRWTBQDsodH6KOEKEbHkz82lGlYVKmh+eLXysYcCwKHfSSncbfV S5YtgYdrUN4KLUGqo8vd7Ha8UlZRjr81nwgGc50zwPV14NcC/bt4xOM2l7vvB790AG59 dOOdNhpN67xe5a1291xQjfq5LmfTmErVekA63HCcFXd4G9i8I/NPa+J18KN5lz8u86gb iSnyS07bk3pT4UFEp7G0hM5xQoMXlbgFCcrY0TUkiJIycMCEUDXKa3O21bVyisvzeatT GT4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=PuAzE/Cx1lnwjKknlmPHdUVNf7zejQRyE3iWQZiZpxI=; b=K4fq0gDFYeEu7XnECuJv84pc9DETR9MT+GHpqw5IDMRRFXb1oBO1v4M8eUA33kqwm8 Hm55l4nsCBSIG3w/VT8PN1RuTcXiJkPF+wi2lRMcmJiPWrPpYFZk7jk2UflNB4iJxc4B JOiNskjvnqFyJYHGAds+/wnj5fgJQPoRrksUSIfoQTKJSqTQJpYsxR6HY5GFBo0h1C+M BVRqzDDDQAgN7xLZysxXtddMjOWI/FfRm0IKhqWzW87ANbDdm+UicJQtYUV+wo+txynL oQYX3XBMGomswfqeh90UtSnf7Qi7BVsgmIu1wkzE1DY1+dfYAlX5H1LcrMbUzxmhflgP oWzw== X-Gm-Message-State: APjAAAW8izaPcuREuimR3kPVg+sW8Yk4TTbgU8OkmxvS8uyK5+3628qZ 0p9xOl8UmkCzvFFhUO5WG6zpXUbEORtBcVBi X-Received: by 2002:adf:db4d:: with SMTP id f13mr7501486wrj.371.1570109964467; Thu, 03 Oct 2019 06:39:24 -0700 (PDT) Received: from sudo.home ([2a01:cb1d:112:6f00:9527:da56:7d2e:43f3]) by smtp.gmail.com with ESMTPSA id a204sm3379927wmh.21.2019.10.03.06.39.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 03 Oct 2019 06:39:23 -0700 (PDT) From: Ard Biesheuvel To: linux-crypto@vger.kernel.org Cc: herbert@gondor.apana.org.au, Ard Biesheuvel , Gert Robben , Jelle de Jong Subject: [PATCH] crypto: geode-aes - switch to skcipher for cbc(aes) fallback Date: Thu, 3 Oct 2019 15:39:21 +0200 Message-Id: <20191003133921.29344-1-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Commit 79c65d179a40e145 ("crypto: cbc - Convert to skcipher") updated the generic CBC template wrapper from a blkcipher to a skcipher algo, to get away from the deprecated blkcipher interface. However, as a side effect, drivers that instantiate CBC transforms using the blkcipher as a fallback no longer work, since skciphers can wrap blkciphers but not the other way around. This broke the geode-aes driver. So let's fix it by moving to the sync skcipher interface when allocating the fallback. Cc: Gert Robben Cc: Jelle de Jong Signed-off-by: Ard Biesheuvel --- Gert, Jelle, If you can, please try this patch and report back to the list if it solves the Geode issue for you. -- Ard. drivers/crypto/geode-aes.c | 45 +++++++++----------- drivers/crypto/geode-aes.h | 2 +- 2 files changed, 22 insertions(+), 25 deletions(-) -- 2.20.1 diff --git a/drivers/crypto/geode-aes.c b/drivers/crypto/geode-aes.c index d81a1297cb9e..b6c47bbc2c49 100644 --- a/drivers/crypto/geode-aes.c +++ b/drivers/crypto/geode-aes.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -166,13 +167,15 @@ static int geode_setkey_blk(struct crypto_tfm *tfm, const u8 *key, /* * The requested key size is not supported by HW, do a fallback */ - op->fallback.blk->base.crt_flags &= ~CRYPTO_TFM_REQ_MASK; - op->fallback.blk->base.crt_flags |= (tfm->crt_flags & CRYPTO_TFM_REQ_MASK); + crypto_sync_skcipher_clear_flags(op->fallback.blk, CRYPTO_TFM_REQ_MASK); + crypto_sync_skcipher_set_flags(op->fallback.blk, + tfm->crt_flags & CRYPTO_TFM_REQ_MASK); - ret = crypto_blkcipher_setkey(op->fallback.blk, key, len); + ret = crypto_sync_skcipher_setkey(op->fallback.blk, key, len); if (ret) { tfm->crt_flags &= ~CRYPTO_TFM_RES_MASK; - tfm->crt_flags |= (op->fallback.blk->base.crt_flags & CRYPTO_TFM_RES_MASK); + tfm->crt_flags |= crypto_sync_skcipher_get_flags(op->fallback.blk) & + CRYPTO_TFM_RES_MASK; } return ret; } @@ -181,33 +184,28 @@ static int fallback_blk_dec(struct blkcipher_desc *desc, struct scatterlist *dst, struct scatterlist *src, unsigned int nbytes) { - unsigned int ret; - struct crypto_blkcipher *tfm; struct geode_aes_op *op = crypto_blkcipher_ctx(desc->tfm); + SYNC_SKCIPHER_REQUEST_ON_STACK(req, op->fallback.blk); - tfm = desc->tfm; - desc->tfm = op->fallback.blk; - - ret = crypto_blkcipher_decrypt_iv(desc, dst, src, nbytes); + skcipher_request_set_sync_tfm(req, op->fallback.blk); + skcipher_request_set_callback(req, 0, NULL, NULL); + skcipher_request_set_crypt(req, dst, src, nbytes, desc->info); - desc->tfm = tfm; - return ret; + return crypto_skcipher_decrypt(req); } + static int fallback_blk_enc(struct blkcipher_desc *desc, struct scatterlist *dst, struct scatterlist *src, unsigned int nbytes) { - unsigned int ret; - struct crypto_blkcipher *tfm; struct geode_aes_op *op = crypto_blkcipher_ctx(desc->tfm); + SYNC_SKCIPHER_REQUEST_ON_STACK(req, op->fallback.blk); - tfm = desc->tfm; - desc->tfm = op->fallback.blk; - - ret = crypto_blkcipher_encrypt_iv(desc, dst, src, nbytes); + skcipher_request_set_sync_tfm(req, op->fallback.blk); + skcipher_request_set_callback(req, 0, NULL, NULL); + skcipher_request_set_crypt(req, dst, src, nbytes, desc->info); - desc->tfm = tfm; - return ret; + return crypto_skcipher_encrypt(req); } static void @@ -366,9 +364,8 @@ static int fallback_init_blk(struct crypto_tfm *tfm) const char *name = crypto_tfm_alg_name(tfm); struct geode_aes_op *op = crypto_tfm_ctx(tfm); - op->fallback.blk = crypto_alloc_blkcipher(name, 0, - CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK); - + op->fallback.blk = crypto_alloc_sync_skcipher(name, 0, + CRYPTO_ALG_NEED_FALLBACK); if (IS_ERR(op->fallback.blk)) { printk(KERN_ERR "Error allocating fallback algo %s\n", name); return PTR_ERR(op->fallback.blk); @@ -381,7 +378,7 @@ static void fallback_exit_blk(struct crypto_tfm *tfm) { struct geode_aes_op *op = crypto_tfm_ctx(tfm); - crypto_free_blkcipher(op->fallback.blk); + crypto_free_sync_skcipher(op->fallback.blk); op->fallback.blk = NULL; } diff --git a/drivers/crypto/geode-aes.h b/drivers/crypto/geode-aes.h index 5c6e131a8f9d..f8a86898ac22 100644 --- a/drivers/crypto/geode-aes.h +++ b/drivers/crypto/geode-aes.h @@ -60,7 +60,7 @@ struct geode_aes_op { u8 *iv; union { - struct crypto_blkcipher *blk; + struct crypto_sync_skcipher *blk; struct crypto_cipher *cip; } fallback; u32 keylen;