From patchwork Mon Apr 16 13:07:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Horia Geanta X-Patchwork-Id: 10342957 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B7BC560365 for ; Mon, 16 Apr 2018 13:07:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A8C0120683 for ; Mon, 16 Apr 2018 13:07:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9C890285E3; Mon, 16 Apr 2018 13:07:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EE3B020683 for ; Mon, 16 Apr 2018 13:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754762AbeDPNHl (ORCPT ); Mon, 16 Apr 2018 09:07:41 -0400 Received: from mail-he1eur01on0067.outbound.protection.outlook.com ([104.47.0.67]:39328 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754192AbeDPNHj (ORCPT ); Mon, 16 Apr 2018 09:07:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=9UY/SDjx3dPII/LD7M1gge3T36wMiwE+InSzYYVzO64=; b=vEkcIrAqq+YDe52Ti11qJl+P0VRF0f13AfdfrHpc9SrSJvJ8QTP+aG8BG3kJHhRCCLypvnK1T2nTMEW8YFVpbPfbZ3YAO3m3ANrHlLeiXcqZ2hiCo8E1jT3YtkF1LKEJvjGBrlJ01fF6Z2cVlCypimLm0i8i57NcRgoA9H6NaTs= Received: from rhuath.am.freescale.net (64.157.242.222) by AM0PR0402MB3475.eurprd04.prod.outlook.com (2603:10a6:208:1b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.675.9; Mon, 16 Apr 2018 13:07:34 +0000 From: =?UTF-8?q?Horia=20Geant=C4=83?= To: Herbert Xu , Fabio Estebam , Martin Townsend Cc: Aymen Sghaier , "David S. Miller" , linux-crypto@vger.kernel.org, Tudor Ambarus Subject: [PATCH RESEND] crypto: caam - strip input zeros from RSA input buffer Date: Mon, 16 Apr 2018 08:07:05 -0500 Message-Id: <20180416130705.28365-1-horia.geanta@nxp.com> X-Mailer: git-send-email 2.8.3 MIME-Version: 1.0 X-Originating-IP: [64.157.242.222] X-ClientProxiedBy: MWHPR1701CA0015.namprd17.prod.outlook.com (2603:10b6:301:14::25) To AM0PR0402MB3475.eurprd04.prod.outlook.com (2603:10a6:208:1b::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(2017052603328)(7153060)(7193020); SRVR:AM0PR0402MB3475; X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3475; 3:p6ikzSaui56CDlCBuuDeA2AwbpHA1nN9gUGG0qYtp0nRNwzoXtMYCMQifyV93wpn1Ce7XaNTwy0TorjsA19EOxS0hAiajBUhtJ4wm7CUP/6vHL3ffoDFf21LeTH9GyFpWvrcaGH8M9EIvIhnk8Wy4y00wkOM2PEhI+HCopZuuWZdQ6aTDmLwtmVxEkGj1AJzU128oBqCTbjbWwHIMDsnVoMsGcpPRGJDgL2jwcSciwNnVlXYcPEvLEdvXfyl7AKF; 25:nbouPMEaupE2awSCwIatpFvclswURDtmDR2VjL5SyaqVb22+XrphSMRrhDuKs8XGkzFA99RvzGdbpPz1Kx+yxhmpdVuHLaHiXQ4IvLibvzDR58MHRSKaO6GuMGiMU4QJwNUnrlrPPTfZw04Ei9x8RJX48s7+ohffbX4Ydq6+j/lbvMy7RukFJflo6y6AGnqUCrGh5M+/DhdsbkQlKfNVyACemtUcsaA0/BGyJGptnG1nZl9tS3qI+TTXFaDNYxItc7WJluRHgWPjhCNzoaXUJ8FAfSaXWVhR7CziAV/x/R6kzihPNHr5eQSIgZWN11HW6B39eHY08OPjHKNtaNc+BA==; 31:Musw6HbnVS3jIdgH0oxyJHlUIgbO1ecnAcU0UAs4ILbie6qjJZoUarZGPCf86ehxnCswx0dVSWbpKYtS0E2ZIUr0Hv2UtNdhVs4L6fiR/7QNMBq6cDwVdw4mfn0f3E+ZztUObgmF8HmcaVV8v66LwjV2m8dMxOKXiFWH/Xat+xcBR9CajhwkCI/BTmidX2cehPo08Wpfco6F89CJ52MP1JghfcEcd28USU1JBfeeHzA= X-MS-TrafficTypeDiagnostic: AM0PR0402MB3475: X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3475; 20:ltq/Ko4uiS9FfP4GvhSnO8PUJlt4qAgPXSzuhQL/2ox9Q8v2yGnUeq5sWJPhB3oPkdOud/VKspa/+6y0Jr5kLv5OlRh7fr0gb1X5tfaoxvjjS+iwQrLhPa1IQ2JSo0dR0l/siKPjQ/QALheNh/vJvoHI1egwLqk6n8FhOnt3QGOxFlXSrXqMQanMzkBVznH8iI1RB//J+iEHGGJLguaSnPvNGuCd6+VC8aN2wnVvQOnANoonNfOPhfw7hXlPr/0ZfThoJZ8uSaV2xHG4Jd8sE8DvewRgyT0p7ba+rU2jXbaHoJBy2g+zmRrPSHkDFRxw9Lx14364kFktuXN5VZV6YY5gmw9JdW+wWHREELPat2K6saVRnXlBpIXKsMJ/T2mrpFHqTdVWY4w+cCCd0+NI0VPHRxaQPfUDI3C8Xq3RuObpH0XzFM08R2Foy1KTgujsp//bQ/5JUnfUtWj2j5aPAsXhiY5tgAnjTvMyiB0bwf92Tyg8vRdfJtZMkCK1Jch4; 4:TmUe0cCVX6HlGm6wQd3WW3DQKiAarYEOO5/Vydeba6jl9JGaS5oj9EXbrcrBpkjCAJCVUqoEA6oWo3HMOrL0M67CIxCY6i7J8Wk1x3MrWabUvKfOnZ171loXcrEU8h0oBDuiYv1cqA3GgF85K9DDwly0T6v1Eg8THud1TdAFrf7uVFluTzVvLb10iQkdpbu9CZ0YkYm4DTHLIAv35A/RlWChh4Cpk5vBG/XRFPlwLFmSiznqhPbXL92dw5ytMQPug1iqN05v8MoiUx0Vi3htv6XXkjUDp1x+K8mWHavEvW00NuRIumMQ2EW4CM5Epk5eoBKV7FckD15iekMxdghXlsDTlV7iQimsSwLPuj1Sp42WNJhGPNxa7ICqvXHvqImtSQfqhWupi9hTOqPSGKUpVIovExyfUCa0wEci piPGoN8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(185117386973197)(85827821059158)(42068640409301); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231232)(944501327)(52105095)(93006095)(93001095)(6055026)(6041310)(20161123562045)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011); SRVR:AM0PR0402MB3475; BCL:0; PCL:0; RULEID:; SRVR:AM0PR0402MB3475; X-Forefront-PRVS: 0644578634 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(346002)(39380400002)(39860400002)(376002)(366004)(199004)(189003)(7736002)(52116002)(54906003)(6346003)(316002)(110136005)(478600001)(23676004)(305945005)(2906002)(26005)(966005)(6666003)(86362001)(2870700001)(59450400001)(6506007)(106356001)(105586002)(386003)(6486002)(25786009)(97736004)(66066001)(47776003)(486006)(6116002)(1076002)(16526019)(3846002)(6306002)(186003)(476003)(36756003)(53936002)(956004)(6512007)(2616005)(50226002)(8936002)(81156014)(68736007)(5660300001)(39060400002)(8676002)(4326008)(81166006)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0402MB3475; H:rhuath.am.freescale.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=horia.geanta@nxp.com; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTBQUjA0MDJNQjM0NzU7MjM6dlRkNFdsRlQwSmVEUkpGbjkrWk5FZDdt?= =?utf-8?B?VE8xT0FxS0lPd1ZBQS9HZmF5d09BRkVWQWNOS3RWaTNadVlLWTdacDI2aUJE?= =?utf-8?B?VVY5TXRLckNTalJTcWV0OXZ1N1Zkc3dWQzBPMUNZT1c4SDhFcWN6dk0yUHdu?= =?utf-8?B?U2ZjVEpWRWNUNFJBWHVkNk1pUWdVR0JzdjFqbnRTSEhxeFV0Tk9MSDJNQWJD?= =?utf-8?B?TlFJNVAxRkNhRlZBMGZMdUpPRGt1b1ZHRWxnODN1R2dtMFdpR2hGcHUxaWlM?= =?utf-8?B?Vk45aWxQYnhjUWFvU0E2L01KZXpwTE9GdGRKU1Npc2J1azV3RGtxeWVjT1RY?= =?utf-8?B?bzhPQmR1clJPTGRpMWgybC9GNmw5WENkamh4b1ZFR3A3MHNoeHVrY0hoM0Qr?= =?utf-8?B?YldzdnFNblQ4bk5YMS9SQnRyVlczdUJIQzhxVU8xVW12TUxQTVZES0lldUd5?= =?utf-8?B?VFFpeUhoQzBQN3BoUlhTblh2UW1sY1o4SGNyWEM5aVI4ZElGaUlRdWpEVE9r?= =?utf-8?B?V1BpY1RNRjdXeGhjQXRrNndqeDJreDNReFVEMDJHME5neVRiYU45SG1vN3Y4?= =?utf-8?B?cnhCQWZISmo0d045N0t0djQxMTZ6RGFHNEtZUWw4WjFuRVp6Um41SkhnVDdk?= =?utf-8?B?emxCdVdWN2lxSWtTV2RnMXYreExJdFNDd3hRMVcxdDZXeUFCdytjbWw1Q1Nn?= =?utf-8?B?cmE0ODZCL1R6dHFaYllSVWJqYXlFOHJ5SjdHQkFmbnZmemZJdWp0MHVzeXZj?= =?utf-8?B?SjVzQ2pWeDA4TFg0RnhZd1pTbEthZis1ZUovZmliTEMxM3Q5NVRXcFFEYzdq?= =?utf-8?B?UFFONFdqQUxnMnJNZE1zUDNjVEpKRmZzZldjZ0hZMm9iY09ldkdQUWpZWDhk?= =?utf-8?B?Vno2OFBYY2htbEE5MElhd1EyZ0lIcVlEZDVQRFQ1UWgyVkVHTlhyN21Pam9L?= =?utf-8?B?dzQzUzRDTG5xb2EzSTIrTndaWFlNdjN2N1d4blQrTkt6d0pFZnE0V05ndWRD?= =?utf-8?B?WDZmQmdHWmdZUUx5SWhwQVNRMC9YK2FmV253bERjQWpKVTYxbUQ3UG5CZXJ4?= =?utf-8?B?UTh6SDRFeExpZWZqa3VOK0wyUFdDQXBRZVBiYmNQZWsrU2ZDUTZzbmt6bWVV?= =?utf-8?B?a0NGNkF5YmwwZzNBbXdHc3MrUU5mTXNyelFvMDV5bjF4cmNOOGN1NWtYQ21M?= =?utf-8?B?QXVsNjNLUkpSV0YrN3d0NEpTcSt4MzBCbFh2Q0MvYVUwNTBxQnIwQ09SV3ox?= =?utf-8?B?UWVpV0dmbDRSL29nQVkydVZFUjMrdWw0S3Z2bC9jZXNSS2tPN2loM1daU3Uw?= =?utf-8?B?V3duSnovQUczNzlKZW9QN1AwQkxXQUMxbHNWdjRWSkw3dlNtdGd0clZDY2tS?= =?utf-8?B?b09SeEUrK1Fnd1pqS21vbGVNWUY5VzY5clkzWFVQU01QK2Q3MnozQ1JtYlh1?= =?utf-8?B?d0lFWXc3Y1B2UFF1eHJWRDNLS1VtNlFzS01BLzlvOXRYdXd3RzBNTUZidytL?= =?utf-8?B?TE41a0VPWmJodFowenhpUDlzTTVZajFvTDVFQ0Z6YTArVlBQajBvN1oxR3pI?= =?utf-8?B?TnNxKzBWazd6NURuMC92VWtVbjdLOGhYWmNOb2ZmT092M2YrVUswQTZMVnZa?= =?utf-8?B?Qmg2YVNxTFpMZjFvN3VPZURRcmUrNkVKZ20ydXBXUkY2enEySlloOEQ3Tmgv?= =?utf-8?Q?Izi99mRa8HYYx2phguGE=3D?= X-Microsoft-Antispam-Message-Info: yQctwe8WgwUmgZMo6iN1ViRPYGAmfJFf3vVD5+xMYg2XlQkHF48/glLz93UnQ4NwPboJG9YylYa3vIwytHl0cxANMhXt1jxM7fSFI44MXgExgVJmW3N/T5QuIOo2OKCfQOSi8Q/2ztrTYMha4dw/cgIEPSujH0NlGWY48RdvFaUOZjmbBYzP7RrwcBsqDwAD X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3475; 6:3EG3HnBWWogvmSEKQBjV8PqjnNrFTjs2g3KClHN8jUet57G2izLdBSxW4KhUDPKHg1SVwDnUmgwyqHF8lIfZEu5LD8v49PLr+skkuSjKHEGZmOSCTs47l3/BLNghTM3zy2l/21aEbLw9hQfTt9FD3v1i5XLO+odX9IkutOjNSaDOLKNHNHmM/nzYmj83uIcYFhNLfFZH1dROJyuELDFgPXJRVQ8COEPaA+Z8NwZqAvW9mQlRDZB+m+PH8cPNM8/12CHXaozIKELEY0rrF1+MZUKAqiDczu2t7WADzfu8AC8fBn8mQcMrIHsZkjrp1e9TNF233UwOvMBtZWRbSmMsypiASd4Dhy9sHMxpJ77BBys1XOiuuLRa634L9TJhHkU2EJnafOlWv5e22WYxWFscl54S8pfrwSumad7Nb5gLXeiIbEv8pl+7y2kt89Qw3ptLdHsX6HiWxCJ3r4xKi/tygA==; 5:s4INfjEKXJPXK+l8Oi0pWIvqJY3qJmIcEVfwOG/20mMWZQDqAmQ7ZOGaUx08KCl6x6jyJ5efpz/EKlwOjl/uzg7D0Wa8mFnF9VeanXQMd7Xthy+P+sjJQpCT8TrKwFufaPp9t9bR+EjuQzpwsC6DQKjdHSkieeFRQtbWMlIblxs=; 24:GoNkoRMpm1iAPvGnLde69wE4Pjn+SD1B4GEWlv9ESZqFWcAfz9Il/82dbDq/I0FcSnawBCc9oZa2P2Si6ZaWQxD6dfDo1H1JQPIeoDZx+lE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3475; 7:oOyEKunu1UtOCARLUsV2BiPVQHBGbdzkJxf8mQTkFfYVKfaNOY9duHzPytXcl5hN+qxOzt17HzNpN0r4NPHLwam24vy5TcIebTwMTugPa+GFHQLmXy2lXR9Q4EeoTGyXktbiFWXi9j9iKb2zoJnoL2Va34QbBdzSRXYItCt4zQKMQTNIaTCy/T5WK2P2bkAwyLDXotq72RDi2zfFOCL6sXodkUJVTKFZ2i9NM7JmBoHUemeySaD1xrc1RAoeBFRw X-MS-Office365-Filtering-Correlation-Id: 86fa326e-3497-495f-6342-08d5a39b0683 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Apr 2018 13:07:34.6544 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 86fa326e-3497-495f-6342-08d5a39b0683 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3475 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Sometimes the provided RSA input buffer provided is not stripped of leading zeros. This could cause its size to be bigger than that of the modulus, making the HW complain: caam_jr 2142000.jr1: 40000789: DECO: desc idx 7: Protocol Size Error - A protocol has seen an error in size. When running RSA, pdb size N < (size of F) when no formatting is used; or pdb size N < (F + 11) when formatting is used. Fix the problem by stripping off the leading zero from input data before feeding it to the CAAM accelerator. Fixes: 8c419778ab57e ("crypto: caam - add support for RSA algorithm") Cc: # 4.8+ Reported-by: Martin Townsend Link: https://lkml.kernel.org/r/CABatt_ytYORYKtApcB4izhNanEKkGFi9XAQMjHi_n-8YWoCRiw@mail.gmail.com Signed-off-by: Horia Geantă Tested-by: Fabio Estevam Reviewed-by: Tudor Ambarus --- (Hopefully this one will reach the mailing list. Sorry for the noise, problems with SMTP.) drivers/crypto/caam/caampkc.c | 54 +++++++++++++++++++++++++++++++++++++++++++ drivers/crypto/caam/caampkc.h | 8 +++++++ 2 files changed, 62 insertions(+) diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c index 7a897209f181..979072b25eaa 100644 --- a/drivers/crypto/caam/caampkc.c +++ b/drivers/crypto/caam/caampkc.c @@ -166,18 +166,71 @@ static void rsa_priv_f3_done(struct device *dev, u32 *desc, u32 err, akcipher_request_complete(req, err); } +static int caam_rsa_count_leading_zeros(struct scatterlist *sgl, + unsigned int nbytes, + unsigned int flags) +{ + struct sg_mapping_iter miter; + int lzeros, ents; + unsigned int len; + unsigned int tbytes = nbytes; + const u8 *buff; + + ents = sg_nents_for_len(sgl, nbytes); + if (ents < 0) + return ents; + + sg_miter_start(&miter, sgl, ents, SG_MITER_FROM_SG | flags); + + lzeros = 0; + len = 0; + while (nbytes > 0) { + while (len && !*buff) { + lzeros++; + len--; + buff++; + } + + if (len && *buff) + break; + + sg_miter_next(&miter); + buff = miter.addr; + len = miter.length; + + nbytes -= lzeros; + lzeros = 0; + } + + miter.consumed = lzeros; + sg_miter_stop(&miter); + nbytes -= lzeros; + + return tbytes - nbytes; +} + static struct rsa_edesc *rsa_edesc_alloc(struct akcipher_request *req, size_t desclen) { struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req); struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm); struct device *dev = ctx->dev; + struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req); struct rsa_edesc *edesc; gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ? GFP_KERNEL : GFP_ATOMIC; + int sg_flags = (flags == GFP_ATOMIC) ? SG_MITER_ATOMIC : 0; int sgc; int sec4_sg_index, sec4_sg_len = 0, sec4_sg_bytes; int src_nents, dst_nents; + int lzeros; + + lzeros = caam_rsa_count_leading_zeros(req->src, req->src_len, sg_flags); + if (lzeros < 0) + return ERR_PTR(lzeros); + + req->src_len -= lzeros; + req->src = scatterwalk_ffwd(req_ctx->src, req->src, lzeros); src_nents = sg_nents_for_len(req->src, req->src_len); dst_nents = sg_nents_for_len(req->dst, req->dst_len); @@ -953,6 +1006,7 @@ static struct akcipher_alg caam_rsa = { .max_size = caam_rsa_max_size, .init = caam_rsa_init_tfm, .exit = caam_rsa_exit_tfm, + .reqsize = sizeof(struct caam_rsa_req_ctx), .base = { .cra_name = "rsa", .cra_driver_name = "rsa-caam", diff --git a/drivers/crypto/caam/caampkc.h b/drivers/crypto/caam/caampkc.h index fd145c46eae1..82645bcf8b27 100644 --- a/drivers/crypto/caam/caampkc.h +++ b/drivers/crypto/caam/caampkc.h @@ -95,6 +95,14 @@ struct caam_rsa_ctx { struct device *dev; }; +/** + * caam_rsa_req_ctx - per request context. + * @src: input scatterlist (stripped of leading zeros) + */ +struct caam_rsa_req_ctx { + struct scatterlist src[2]; +}; + /** * rsa_edesc - s/w-extended rsa descriptor * @src_nents : number of segments in input scatterlist