From patchwork Thu Oct 1 21:32:31 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 7311891 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: X-Original-To: patchwork-linux-crypto@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 160B59F1D5 for ; Thu, 1 Oct 2015 21:47:48 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AA953207A8 for ; Thu, 1 Oct 2015 21:47:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3034E206AB for ; Thu, 1 Oct 2015 21:47:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750789AbbJAVro (ORCPT ); Thu, 1 Oct 2015 17:47:44 -0400 Received: from mail-by2on0056.outbound.protection.outlook.com ([207.46.100.56]:2086 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750767AbbJAVrm (ORCPT ); Thu, 1 Oct 2015 17:47:42 -0400 Received: from DM3PR12CA0018.namprd12.prod.outlook.com (10.164.12.156) by BY2PR1201MB1077.namprd12.prod.outlook.com (10.164.168.9) with Microsoft SMTP Server (TLS) id 15.1.280.20; Thu, 1 Oct 2015 21:32:35 +0000 Received: from BY2NAM03FT018.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e4a::205) by DM3PR12CA0018.outlook.office365.com (2a01:111:e400:599f::28) with Microsoft SMTP Server (TLS) id 15.1.286.20 via Frontend Transport; Thu, 1 Oct 2015 21:32:35 +0000 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; davemloft.net; dkim=none (message not signed) header.d=none; davemloft.net; dmarc=permerror action=none header.from=amd.com; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from atltwp02.amd.com (165.204.84.222) by BY2NAM03FT018.mail.protection.outlook.com (10.152.84.231) with Microsoft SMTP Server id 15.1.286.14 via Frontend Transport; Thu, 1 Oct 2015 21:32:34 +0000 X-WSS-ID: 0NVK969-08-3CT-02 X-M-MSG: Received: from satlvexedge01.amd.com (satlvexedge01.amd.com [10.177.96.28]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by atltwp02.amd.com (Axway MailGate 5.3.1) with ESMTPS id 2B524BD8673; Thu, 1 Oct 2015 17:32:33 -0400 (EDT) Received: from SATLEXDAG03.amd.com (10.181.40.7) by satlvexedge01.amd.com (10.177.96.28) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 1 Oct 2015 16:32:53 -0500 Received: from tlendack-t1.amdoffice.net (10.180.168.240) by satlexdag03.amd.com (10.181.40.7) with Microsoft SMTP Server id 14.3.195.1; Thu, 1 Oct 2015 17:32:33 -0400 Subject: [PATCH v1 1/4] crypto: ccp - Replace BUG_ON with WARN_ON and a return code From: Tom Lendacky To: CC: Herbert Xu , David Miller Date: Thu, 1 Oct 2015 16:32:31 -0500 Message-ID: <20151001213231.4286.90968.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20151001213225.4286.44278.stgit@tlendack-t1.amdoffice.net> References: <20151001213225.4286.44278.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(6009001)(2980300002)(428002)(199003)(189002)(5001860100001)(53416004)(47776003)(83506001)(86362001)(33646002)(5003600100002)(19580405001)(4001540100001)(64706001)(5001830100001)(97736004)(97746001)(19580395003)(46102003)(23676002)(106466001)(4001350100001)(62966003)(101416001)(189998001)(76176999)(5007970100001)(54356999)(77096005)(50986999)(92566002)(87936001)(2351001)(77156002)(103116003)(68736005)(5001920100001)(50466002)(110136002)(2950100001)(229853001)(105586002)(5008740100001)(11100500001)(71626007)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR1201MB1077; H:atltwp02.amd.com; FPR:; SPF:None; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2PR1201MB1077; 2:wi+Z9Zy+I/dEGxB27iikVZu5yKr90AhmbLe3EntkroR9k72ZFPPnvhD7CMgZeAVvhAAXzh2xw9xh4PL22eQkk3PNu4t5KRHMx4Sz8EQ/HG35h6qd1M2j/n1ylm0q+fgbci7/TyZ20/p2WPkiDf9rEYBA/J9hWUyzc4MGGDCwRo0=; 3:I7A2NoMVxCec0R6Zif+lLjB7Pn/xa7oUwIhQzlY7emz04PG3mAnTxM3CiQQnBryR45BJ0nZsnXMermjf7qnzHg4RZjcu1XAUO9cPyHPDsCJaunVG+k4qrIY4lAhZShgSjsvGPoKo1ho9iBFUVEHinFbM+qrKxYOXT7lYvWZLER2gXHGNvaukVFtubc/TSKnkAuMl0DerhBmwbIBOynen5lObhIt78pSmzmEGcFCGw9iYMXC2Jtgxz7Q/STG1a8Uu; 25:8eBl4sTP/BM3SlnNhR+6AC/LVUftIQLIztWqkwHqZ6STyCDn517tFg0Rrc2QIig80exlp4eD5uH1XuUjuzRRE1z+B12XKOShCfnpaKjz+gMlDZ6HKO+o64vxpqJdrgRnLSUb0dXWB95sKVSlw1PpTHXXN2SussOetGv3y5QJtK9b3+PdyRQTCoA1Cl3k1xzzICS6Q/ZXLq6vYH+ObpLT1utMxCAIZvJ3D2OXW6cEvJhzPqGYJaYPcw8hQ53YgbKCsVnn2oHGEwL7Gc14hKkPFg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR1201MB1077; X-Microsoft-Exchange-Diagnostics: 1; BY2PR1201MB1077; 20:CgjolmcL4HZULw4n6R2gId8essLwgRIHENiUH4wlO4r5vPRlOCLm86KIdmeZeyftlvU3OLuij7CJ7zXsK5A/1LcLlKNafHm6Dtk0DjrJMKlJ57ywS4XFXrV9dQKH3RU9Ln1a3s1XnYgSFcUyriSxFA8VoEfRfzDupsIIiibDyFjpJ6qT9sPO8MyaPW+EnTkqQsC/Orjte0vTSHTYR5zg555UnYQlvI51EvN5u9avnBquQcHIJ2/3m0X8er8w8qpEC1g4IGnTjUriI+FFUxwr7xqhTDlgznADr63iAfJ9ePFV0/+UNKGUHDCw2heeAwcEqOG1YE13YJPe6Wx9ol2MPNwOxWwsd4SYl8/7M/ro1RR6hMutcud71PSlF/yP56pLErPdWOXpAHfBHXe0a+q0xvhDst+gp3WFK3H414RS6vrsg1J/684J88PBGCJWPNVujzRroOOmnu2lPe7sVTBUsnE98Gh1YlEEgtkTkRtlQkq5QcvjQdfhYmjGgJNmSX5X; 4:nbgrGxGfY5m/LErveSWX18tZxEawEOnATlNLjpt1lraMxUdw7OkUAdLmyR/YvCy2mJS6Gy4rs6nSi4S5y4ybl/V2oVBhvdBg7/+i0quFigLA+H8GxLNFUPIrmaNE+dMVeDmkBmhPF5zRfqscZWuHAbV3woC5hYgXBn1UA0uw91kStJTY7IbMIl/U26/lbcOaDiIDQiYyZZvqjQcuVoxsjdtn55J9l9LiuUq4wSl/Ll4LKdsnNP1xGS+APH3rm5rYuTNe4wRHm107eOsE8y/oIIUrTekQcbUtXErV+SmIdXrypA4X9zOJdDEiZeLl/QnH0/ft8blqhh2nLb1gJHWlPD0upFEdylY+7oMU4U31uUk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001); SRVR:BY2PR1201MB1077; BCL:0; PCL:0; RULEID:; SRVR:BY2PR1201MB1077; X-Forefront-PRVS: 0716E70AB6 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyMDFNQjEwNzc7MjM6Mk1qVm1xV0tQSkdpdXQ3ZCtGVzh5Z0hZ?= =?utf-8?B?Uks5WU42M1Y0WElaTHhUaW5iUzVJMmFwVUFVN3kzU3dEaUh4dVJJd1h6UVBn?= =?utf-8?B?ZEx2MDdXdXBSK3MrWDh3M1lyTkorV0pPeUtqcE01OERGdXpZRWtheEticnpn?= =?utf-8?B?OVJhMnA5VFg5V3B5ck5meWpLTWJIdEUreFZsWVNjZzZTYitVZU51Sno2dEg4?= =?utf-8?B?dEJidXJHbUNQRVVZVHFaZFh5YWhVWWVXOTJrdWhCMThEWEZBTDc1MTJJTmgx?= =?utf-8?B?R3NXVFBIQjJENitQR280aWpjWmp6alNnWDlGRmQxbWdFNUJMTE9ESHVEYjFJ?= =?utf-8?B?cVR4QTRLQ05mSW5XZDFBNmoxQzJpR0Zsa1A5YUtrVEt0dS9VSXd3K1BrTy9x?= =?utf-8?B?MENkVDNrelR4b0d5ejRQaXIzbk5ReWRodFlpdjBpVXpmTk5XU2oyb2ZheWJq?= =?utf-8?B?ZEdQNGEvRDdITXIvRFdlMVNUR1FTZGpkRDArdHQzdU55dmxydkN2Wi9uOE9r?= =?utf-8?B?LzU0TGMzbVBMd0VUR0hZSW5XTDQ2cmRBQzhPWjNHK0sySlVDSUFldEdzWnp0?= =?utf-8?B?cDZENDdDOUlWby84di9vanl0Z0FDWkxFTmVYTmtKaXE0OHFMZTErd29CSUli?= =?utf-8?B?OTBGVUNpWHhtN3JRV3BCN1BhSU1OalZmbmVyZWZobDdhRmlJWHdjVERaVmtO?= =?utf-8?B?NXZ3SWFkSENXNUJTWWpXZlgvalEzMmY4Nm5nRVBEeXN6Nzk2Y05xYStkbi9I?= =?utf-8?B?OXQ1akJxZVN3eXFrVUo1dmY4cVMvUWlxVkZIdUdPS09keFZGT3Z5M1Q5clJk?= =?utf-8?B?VzQ1UGVOL3d6aEhWK0laMGtTZWx1K3hIL1hZSnhxVGw1SldiZUJXN0JpSms5?= =?utf-8?B?WXNZS01saWpOeW5MQkVJOFFiZmgvWjNFUzFMWTJKMUtxMVRjMFIwaXY1L2Q0?= =?utf-8?B?OXZNRG1NNjArOUVHVFpURHFVOTAyTkN2Y0lBVU5jc0lSRUo2TW5MSFZ1Yi9D?= =?utf-8?B?RGhWSnBkbjhtYlVmby9RU3Q2MnF2VGx4VEFjSjJEaWQvNElLNldUeXBTOWU0?= =?utf-8?B?U0NWTTJFNCs4bDQ1R01lOHg5bHAvMVRqSFNIWFBjczdtL3dkMHhSYTJKdm1Y?= =?utf-8?B?Y1crOVkzcDh4VEFVVzlLZXlRMm9PcERNVkpCcEVOOUFlUS95YVJDdTV3WWNH?= =?utf-8?B?cDJSSHVxQkZIZmFuT1U0K0plcVlWQjBnRDFuK25YVnhaa0MrTzU1eU16SmdD?= =?utf-8?B?bG80T1JPMmRKL0ZwckZjeGc0V0JVNm5UZWR2UUk5OGNQdTIzNDhWYVh6V2pL?= =?utf-8?B?WGFSa3oxWGkxT0pSbG4rcFFTeEd0Y3pNUkQ0WjFJLzBZb2psdGduMTBGY25G?= =?utf-8?B?RmlmcldSdEVocUtoNVluSGpYVVYxL3JzU0dicFkvOFVuQ0Y4azZqTHJ0cm9D?= =?utf-8?B?dGxNUy9Uam5ZNEhSazRtRi9pT001dlA5RzgzaDB1UUovY3VxRTFnSHhTYWdM?= =?utf-8?B?MHVpZHB3SFJKSHZsek9Ja1IwWURHM0tiRzNDdUVDajZ5WDhUVEtXcXg1M1NF?= =?utf-8?B?Y0dBUy9XS2RWU2JDb2xLYjhmbDVtSTJHbGhjandDUmtyeFg3VFBjZHpqM3ow?= =?utf-8?B?Yzh2cm50YVgrZCtHZzdodytQKzVpMWI3TFJhNnllU0ZreFdVR1VXWkFmK1lN?= =?utf-8?B?Y3phTkp3WXpPYkVldERzdmllbFNNZHlBU01WS1QzN3hzUEpWcXB6UTBLZ25M?= =?utf-8?B?aXVmbS93ZlpSWGczRFVtM1hxall2a1E4RDRlQTl0NGpUdUlnTjlOY1BYYjd4?= =?utf-8?B?UW1YWmNDQzd6VGpZakd6d3h2cUc2M0RUTlVISVl2WHJEd3VXQT09?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR1201MB1077; 5:/M9o9kpaNMv37mzcyoBD/uVOYIc7R2Z6AKLBTUmcCxAq751YHNeAuzx1guAPgtYRmLB/Qva8J3CmbW5SKiwKxLrJkvTlWgHaCSAVaEIWRg0VP4bR59Vfzm3olm80D1x8hxwd08b3KVv3Niy3YFDetQ==; 24:OCxdLvqIIOD3TK/SnBZj1fnWWC45/hZaiB0bA+1fy+RAIzWfOdK9Ix3biN2hfC5OaNGptSQ+WDhT+CRtq3U6q0C5WWm8S/xwwDo58rw9UmM=; 20:rm2ExD1luZdbkR7hgnt9oMWpX7ZQ8+J+ZW6qIw5lYK/2K3gskCE7u3GKfRbT/WsyeiUo5vRjcg60nCHe+0eRJQ== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2015 21:32:34.6425 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.222]; Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR1201MB1077 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Replace the usage of BUG_ON with WARN_ON and return an error. Signed-off-by: Tom Lendacky --- drivers/crypto/ccp/ccp-crypto-aes-cmac.c | 20 +++++- drivers/crypto/ccp/ccp-crypto-main.c | 6 +- drivers/crypto/ccp/ccp-crypto-sha.c | 13 ++++ drivers/crypto/ccp/ccp-ops.c | 108 +++++++++++++++++++----------- 4 files changed, 105 insertions(+), 42 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c index ea7e844..d89f20c 100644 --- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c +++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c @@ -118,10 +118,19 @@ static int ccp_do_cmac_update(struct ahash_request *req, unsigned int nbytes, if (rctx->buf_count) { sg_init_one(&rctx->buf_sg, rctx->buf, rctx->buf_count); sg = ccp_crypto_sg_table_add(&rctx->data_sg, &rctx->buf_sg); + if (!sg) { + ret = -EINVAL; + goto e_free; + } } - if (nbytes) + if (nbytes) { sg = ccp_crypto_sg_table_add(&rctx->data_sg, req->src); + if (!sg) { + ret = -EINVAL; + goto e_free; + } + } if (need_pad) { int pad_length = block_size - (len & (block_size - 1)); @@ -132,6 +141,10 @@ static int ccp_do_cmac_update(struct ahash_request *req, unsigned int nbytes, rctx->pad[0] = 0x80; sg_init_one(&rctx->pad_sg, rctx->pad, pad_length); sg = ccp_crypto_sg_table_add(&rctx->data_sg, &rctx->pad_sg); + if (!sg) { + ret = -EINVAL; + goto e_free; + } } if (sg) { sg_mark_end(sg); @@ -163,6 +176,11 @@ static int ccp_do_cmac_update(struct ahash_request *req, unsigned int nbytes, ret = ccp_crypto_enqueue_request(&req->base, &rctx->cmd); return ret; + +e_free: + sg_free_table(&rctx->data_sg); + + return ret; } static int ccp_aes_cmac_init(struct ahash_request *req) diff --git a/drivers/crypto/ccp/ccp-crypto-main.c b/drivers/crypto/ccp/ccp-crypto-main.c index bdec01e..e0380e5 100644 --- a/drivers/crypto/ccp/ccp-crypto-main.c +++ b/drivers/crypto/ccp/ccp-crypto-main.c @@ -305,14 +305,16 @@ struct scatterlist *ccp_crypto_sg_table_add(struct sg_table *table, for (sg = table->sgl; sg; sg = sg_next(sg)) if (!sg_page(sg)) break; - BUG_ON(!sg); + if (WARN_ON(!sg)) + return NULL; for (; sg && sg_add; sg = sg_next(sg), sg_add = sg_next(sg_add)) { sg_set_page(sg, sg_page(sg_add), sg_add->length, sg_add->offset); sg_last = sg; } - BUG_ON(sg_add); + if (WARN_ON(sg_add)) + return NULL; return sg_last; } diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c index 507b34e..d14b3f2 100644 --- a/drivers/crypto/ccp/ccp-crypto-sha.c +++ b/drivers/crypto/ccp/ccp-crypto-sha.c @@ -107,7 +107,15 @@ static int ccp_do_sha_update(struct ahash_request *req, unsigned int nbytes, sg_init_one(&rctx->buf_sg, rctx->buf, rctx->buf_count); sg = ccp_crypto_sg_table_add(&rctx->data_sg, &rctx->buf_sg); + if (!sg) { + ret = -EINVAL; + goto e_free; + } sg = ccp_crypto_sg_table_add(&rctx->data_sg, req->src); + if (!sg) { + ret = -EINVAL; + goto e_free; + } sg_mark_end(sg); sg = rctx->data_sg.sgl; @@ -142,6 +150,11 @@ static int ccp_do_sha_update(struct ahash_request *req, unsigned int nbytes, ret = ccp_crypto_enqueue_request(&req->base, &rctx->cmd); return ret; + +e_free: + sg_free_table(&rctx->data_sg); + + return ret; } static int ccp_sha_init(struct ahash_request *req) diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c index d09c6c4..c6e883b 100644 --- a/drivers/crypto/ccp/ccp-ops.c +++ b/drivers/crypto/ccp/ccp-ops.c @@ -611,15 +611,16 @@ static void ccp_get_dm_area(struct ccp_dm_workarea *wa, unsigned int wa_offset, 1); } -static void ccp_reverse_set_dm_area(struct ccp_dm_workarea *wa, - struct scatterlist *sg, - unsigned int len, unsigned int se_len, - bool sign_extend) +static int ccp_reverse_set_dm_area(struct ccp_dm_workarea *wa, + struct scatterlist *sg, + unsigned int len, unsigned int se_len, + bool sign_extend) { unsigned int nbytes, sg_offset, dm_offset, ksb_len, i; u8 buffer[CCP_REVERSE_BUF_SIZE]; - BUG_ON(se_len > sizeof(buffer)); + if (WARN_ON(se_len > sizeof(buffer))) + return -EINVAL; sg_offset = len; dm_offset = 0; @@ -642,6 +643,8 @@ static void ccp_reverse_set_dm_area(struct ccp_dm_workarea *wa, se_len - ksb_len); } } + + return 0; } static void ccp_reverse_get_dm_area(struct ccp_dm_workarea *wa, @@ -1606,8 +1609,10 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) if (ret) goto e_ksb; - ccp_reverse_set_dm_area(&exp, rsa->exp, rsa->exp_len, CCP_KSB_BYTES, - false); + ret = ccp_reverse_set_dm_area(&exp, rsa->exp, rsa->exp_len, + CCP_KSB_BYTES, false); + if (ret) + goto e_exp; ret = ccp_copy_to_ksb(cmd_q, &exp, op.jobid, op.ksb_key, CCP_PASSTHRU_BYTESWAP_NOOP); if (ret) { @@ -1623,11 +1628,15 @@ static int ccp_run_rsa_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) if (ret) goto e_exp; - ccp_reverse_set_dm_area(&src, rsa->mod, rsa->mod_len, CCP_KSB_BYTES, - false); + ret = ccp_reverse_set_dm_area(&src, rsa->mod, rsa->mod_len, + CCP_KSB_BYTES, false); + if (ret) + goto e_src; src.address += o_len; /* Adjust the address for the copy operation */ - ccp_reverse_set_dm_area(&src, rsa->src, rsa->src_len, CCP_KSB_BYTES, - false); + ret = ccp_reverse_set_dm_area(&src, rsa->src, rsa->src_len, + CCP_KSB_BYTES, false); + if (ret) + goto e_src; src.address -= o_len; /* Reset the address to original value */ /* Prepare the output area for the operation */ @@ -1841,21 +1850,27 @@ static int ccp_run_ecc_mm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) save = src.address; /* Copy the ECC modulus */ - ccp_reverse_set_dm_area(&src, ecc->mod, ecc->mod_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->mod, ecc->mod_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; /* Copy the first operand */ - ccp_reverse_set_dm_area(&src, ecc->u.mm.operand_1, - ecc->u.mm.operand_1_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.mm.operand_1, + ecc->u.mm.operand_1_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; if (ecc->function != CCP_ECC_FUNCTION_MINV_384BIT) { /* Copy the second operand */ - ccp_reverse_set_dm_area(&src, ecc->u.mm.operand_2, - ecc->u.mm.operand_2_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.mm.operand_2, + ecc->u.mm.operand_2_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; } @@ -1960,18 +1975,24 @@ static int ccp_run_ecc_pm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) save = src.address; /* Copy the ECC modulus */ - ccp_reverse_set_dm_area(&src, ecc->mod, ecc->mod_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->mod, ecc->mod_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; /* Copy the first point X and Y coordinate */ - ccp_reverse_set_dm_area(&src, ecc->u.pm.point_1.x, - ecc->u.pm.point_1.x_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.point_1.x, + ecc->u.pm.point_1.x_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; - ccp_reverse_set_dm_area(&src, ecc->u.pm.point_1.y, - ecc->u.pm.point_1.y_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.point_1.y, + ecc->u.pm.point_1.y_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; /* Set the first point Z coordianate to 1 */ @@ -1980,13 +2001,17 @@ static int ccp_run_ecc_pm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) if (ecc->function == CCP_ECC_FUNCTION_PADD_384BIT) { /* Copy the second point X and Y coordinate */ - ccp_reverse_set_dm_area(&src, ecc->u.pm.point_2.x, - ecc->u.pm.point_2.x_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.point_2.x, + ecc->u.pm.point_2.x_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; - ccp_reverse_set_dm_area(&src, ecc->u.pm.point_2.y, - ecc->u.pm.point_2.y_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.point_2.y, + ecc->u.pm.point_2.y_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; /* Set the second point Z coordianate to 1 */ @@ -1994,16 +2019,21 @@ static int ccp_run_ecc_pm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) src.address += CCP_ECC_OPERAND_SIZE; } else { /* Copy the Domain "a" parameter */ - ccp_reverse_set_dm_area(&src, ecc->u.pm.domain_a, - ecc->u.pm.domain_a_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.domain_a, + ecc->u.pm.domain_a_len, + CCP_ECC_OPERAND_SIZE, false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; if (ecc->function == CCP_ECC_FUNCTION_PMUL_384BIT) { /* Copy the scalar value */ - ccp_reverse_set_dm_area(&src, ecc->u.pm.scalar, - ecc->u.pm.scalar_len, - CCP_ECC_OPERAND_SIZE, false); + ret = ccp_reverse_set_dm_area(&src, ecc->u.pm.scalar, + ecc->u.pm.scalar_len, + CCP_ECC_OPERAND_SIZE, + false); + if (ret) + goto e_src; src.address += CCP_ECC_OPERAND_SIZE; } }