From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFA8AC17476 for ; Tue, 5 Nov 2019 13:29:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9E2B521882 for ; Tue, 5 Nov 2019 13:29:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572960554; bh=4K9k/A2waszkzp8AiDi5Gsl/4yjj2WXFV+AU9THyBNE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=iwiHGtFLfutps68D3u1Pn8uTTO1jglcoEkJ3PdhZZoiM7xrPt0Ep3Y9ESdDYkhaax 18JWPc73lqMbTYMiQaEePZrX6VcwQTGGujJ3s0HgT194MUFZKMwO3n5aSi0PU9TdvC IVrrzkKsQjE5BvLwv+AfdjmS1n2MW6KLoI+8tOq4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389195AbfKEN3O (ORCPT ); Tue, 5 Nov 2019 08:29:14 -0500 Received: from mail.kernel.org ([198.145.29.99]:47168 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389116AbfKEN3N (ORCPT ); Tue, 5 Nov 2019 08:29:13 -0500 Received: from localhost.localdomain (laubervilliers-657-1-83-120.w92-154.abo.wanadoo.fr [92.154.90.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EF8732190F; Tue, 5 Nov 2019 13:29:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572960552; bh=4K9k/A2waszkzp8AiDi5Gsl/4yjj2WXFV+AU9THyBNE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DiUxkf9K2m6Is8KQv8OEt4yvQpUxtXp7wrMC5o0cz2oRPS1G5ldA615iF84ccuuik uFwpDcDSAj5tkrrXGR4p0zvARY6HuyPFgs/1wJ6Yj6pWVn38+n+tQiUPFnfmqpUxpk ZIgAhl6+59X4UkQvJQiKtj7Jr2+Mpz4D8k+PZkMs= From: Ard Biesheuvel To: linux-crypto@vger.kernel.org Cc: Ard Biesheuvel , Herbert Xu , "David S. Miller" , Eric Biggers , linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Horia=20Geant=C4=83?= Subject: [PATCH v3 16/29] crypto: mxs - switch to skcipher API Date: Tue, 5 Nov 2019 14:28:13 +0100 Message-Id: <20191105132826.1838-17-ardb@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191105132826.1838-1-ardb@kernel.org> References: <20191105132826.1838-1-ardb@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Commit 7a7ffe65c8c5 ("crypto: skcipher - Add top-level skcipher interface") dated 20 august 2015 introduced the new skcipher API which is supposed to replace both blkcipher and ablkcipher. While all consumers of the API have been converted long ago, some producers of the ablkcipher remain, forcing us to keep the ablkcipher support routines alive, along with the matching code to expose [a]blkciphers via the skcipher API. So switch this driver to the skcipher API, allowing us to finally drop the blkcipher code in the near future. Tested-by: Horia Geantă Signed-off-by: Ard Biesheuvel --- drivers/crypto/mxs-dcp.c | 140 +++++++++----------- 1 file changed, 65 insertions(+), 75 deletions(-) diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c index bf8d2197bc11..f438b425c655 100644 --- a/drivers/crypto/mxs-dcp.c +++ b/drivers/crypto/mxs-dcp.c @@ -211,11 +211,11 @@ static int mxs_dcp_start_dma(struct dcp_async_ctx *actx) * Encryption (AES128) */ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, - struct ablkcipher_request *req, int init) + struct skcipher_request *req, int init) { struct dcp *sdcp = global_sdcp; struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; - struct dcp_aes_req_ctx *rctx = ablkcipher_request_ctx(req); + struct dcp_aes_req_ctx *rctx = skcipher_request_ctx(req); int ret; dma_addr_t key_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_key, @@ -274,9 +274,9 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) { struct dcp *sdcp = global_sdcp; - struct ablkcipher_request *req = ablkcipher_request_cast(arq); + struct skcipher_request *req = skcipher_request_cast(arq); struct dcp_async_ctx *actx = crypto_tfm_ctx(arq->tfm); - struct dcp_aes_req_ctx *rctx = ablkcipher_request_ctx(req); + struct dcp_aes_req_ctx *rctx = skcipher_request_ctx(req); struct scatterlist *dst = req->dst; struct scatterlist *src = req->src; @@ -305,7 +305,7 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) if (!rctx->ecb) { /* Copy the CBC IV just past the key. */ - memcpy(key + AES_KEYSIZE_128, req->info, AES_KEYSIZE_128); + memcpy(key + AES_KEYSIZE_128, req->iv, AES_KEYSIZE_128); /* CBC needs the INIT set. */ init = 1; } else { @@ -316,10 +316,10 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) src_buf = sg_virt(src); len = sg_dma_len(src); tlen += len; - limit_hit = tlen > req->nbytes; + limit_hit = tlen > req->cryptlen; if (limit_hit) - len = req->nbytes - (tlen - len); + len = req->cryptlen - (tlen - len); do { if (actx->fill + len > out_off) @@ -375,10 +375,10 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq) /* Copy the IV for CBC for chaining */ if (!rctx->ecb) { if (rctx->enc) - memcpy(req->info, out_buf+(last_out_len-AES_BLOCK_SIZE), + memcpy(req->iv, out_buf+(last_out_len-AES_BLOCK_SIZE), AES_BLOCK_SIZE); else - memcpy(req->info, in_buf+(last_out_len-AES_BLOCK_SIZE), + memcpy(req->iv, in_buf+(last_out_len-AES_BLOCK_SIZE), AES_BLOCK_SIZE); } @@ -422,17 +422,17 @@ static int dcp_chan_thread_aes(void *data) return 0; } -static int mxs_dcp_block_fallback(struct ablkcipher_request *req, int enc) +static int mxs_dcp_block_fallback(struct skcipher_request *req, int enc) { - struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); - struct dcp_async_ctx *ctx = crypto_ablkcipher_ctx(tfm); + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + struct dcp_async_ctx *ctx = crypto_skcipher_ctx(tfm); SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, ctx->fallback); int ret; skcipher_request_set_sync_tfm(subreq, ctx->fallback); skcipher_request_set_callback(subreq, req->base.flags, NULL, NULL); skcipher_request_set_crypt(subreq, req->src, req->dst, - req->nbytes, req->info); + req->cryptlen, req->iv); if (enc) ret = crypto_skcipher_encrypt(subreq); @@ -444,12 +444,12 @@ static int mxs_dcp_block_fallback(struct ablkcipher_request *req, int enc) return ret; } -static int mxs_dcp_aes_enqueue(struct ablkcipher_request *req, int enc, int ecb) +static int mxs_dcp_aes_enqueue(struct skcipher_request *req, int enc, int ecb) { struct dcp *sdcp = global_sdcp; struct crypto_async_request *arq = &req->base; struct dcp_async_ctx *actx = crypto_tfm_ctx(arq->tfm); - struct dcp_aes_req_ctx *rctx = ablkcipher_request_ctx(req); + struct dcp_aes_req_ctx *rctx = skcipher_request_ctx(req); int ret; if (unlikely(actx->key_len != AES_KEYSIZE_128)) @@ -468,30 +468,30 @@ static int mxs_dcp_aes_enqueue(struct ablkcipher_request *req, int enc, int ecb) return ret; } -static int mxs_dcp_aes_ecb_decrypt(struct ablkcipher_request *req) +static int mxs_dcp_aes_ecb_decrypt(struct skcipher_request *req) { return mxs_dcp_aes_enqueue(req, 0, 1); } -static int mxs_dcp_aes_ecb_encrypt(struct ablkcipher_request *req) +static int mxs_dcp_aes_ecb_encrypt(struct skcipher_request *req) { return mxs_dcp_aes_enqueue(req, 1, 1); } -static int mxs_dcp_aes_cbc_decrypt(struct ablkcipher_request *req) +static int mxs_dcp_aes_cbc_decrypt(struct skcipher_request *req) { return mxs_dcp_aes_enqueue(req, 0, 0); } -static int mxs_dcp_aes_cbc_encrypt(struct ablkcipher_request *req) +static int mxs_dcp_aes_cbc_encrypt(struct skcipher_request *req) { return mxs_dcp_aes_enqueue(req, 1, 0); } -static int mxs_dcp_aes_setkey(struct crypto_ablkcipher *tfm, const u8 *key, +static int mxs_dcp_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, unsigned int len) { - struct dcp_async_ctx *actx = crypto_ablkcipher_ctx(tfm); + struct dcp_async_ctx *actx = crypto_skcipher_ctx(tfm); unsigned int ret; /* @@ -525,10 +525,10 @@ static int mxs_dcp_aes_setkey(struct crypto_ablkcipher *tfm, const u8 *key, return ret; } -static int mxs_dcp_aes_fallback_init(struct crypto_tfm *tfm) +static int mxs_dcp_aes_fallback_init_tfm(struct crypto_skcipher *tfm) { - const char *name = crypto_tfm_alg_name(tfm); - struct dcp_async_ctx *actx = crypto_tfm_ctx(tfm); + const char *name = crypto_tfm_alg_name(crypto_skcipher_tfm(tfm)); + struct dcp_async_ctx *actx = crypto_skcipher_ctx(tfm); struct crypto_sync_skcipher *blk; blk = crypto_alloc_sync_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); @@ -536,13 +536,13 @@ static int mxs_dcp_aes_fallback_init(struct crypto_tfm *tfm) return PTR_ERR(blk); actx->fallback = blk; - tfm->crt_ablkcipher.reqsize = sizeof(struct dcp_aes_req_ctx); + crypto_skcipher_set_reqsize(tfm, sizeof(struct dcp_aes_req_ctx)); return 0; } -static void mxs_dcp_aes_fallback_exit(struct crypto_tfm *tfm) +static void mxs_dcp_aes_fallback_exit_tfm(struct crypto_skcipher *tfm) { - struct dcp_async_ctx *actx = crypto_tfm_ctx(tfm); + struct dcp_async_ctx *actx = crypto_skcipher_ctx(tfm); crypto_free_sync_skcipher(actx->fallback); } @@ -854,54 +854,44 @@ static void dcp_sha_cra_exit(struct crypto_tfm *tfm) } /* AES 128 ECB and AES 128 CBC */ -static struct crypto_alg dcp_aes_algs[] = { +static struct skcipher_alg dcp_aes_algs[] = { { - .cra_name = "ecb(aes)", - .cra_driver_name = "ecb-aes-dcp", - .cra_priority = 400, - .cra_alignmask = 15, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | - CRYPTO_ALG_ASYNC | + .base.cra_name = "ecb(aes)", + .base.cra_driver_name = "ecb-aes-dcp", + .base.cra_priority = 400, + .base.cra_alignmask = 15, + .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .cra_init = mxs_dcp_aes_fallback_init, - .cra_exit = mxs_dcp_aes_fallback_exit, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct dcp_async_ctx), - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_u = { - .ablkcipher = { - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = mxs_dcp_aes_setkey, - .encrypt = mxs_dcp_aes_ecb_encrypt, - .decrypt = mxs_dcp_aes_ecb_decrypt - }, - }, + .base.cra_blocksize = AES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct dcp_async_ctx), + .base.cra_module = THIS_MODULE, + + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .setkey = mxs_dcp_aes_setkey, + .encrypt = mxs_dcp_aes_ecb_encrypt, + .decrypt = mxs_dcp_aes_ecb_decrypt, + .init = mxs_dcp_aes_fallback_init_tfm, + .exit = mxs_dcp_aes_fallback_exit_tfm, }, { - .cra_name = "cbc(aes)", - .cra_driver_name = "cbc-aes-dcp", - .cra_priority = 400, - .cra_alignmask = 15, - .cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | - CRYPTO_ALG_ASYNC | + .base.cra_name = "cbc(aes)", + .base.cra_driver_name = "cbc-aes-dcp", + .base.cra_priority = 400, + .base.cra_alignmask = 15, + .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .cra_init = mxs_dcp_aes_fallback_init, - .cra_exit = mxs_dcp_aes_fallback_exit, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct dcp_async_ctx), - .cra_type = &crypto_ablkcipher_type, - .cra_module = THIS_MODULE, - .cra_u = { - .ablkcipher = { - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = mxs_dcp_aes_setkey, - .encrypt = mxs_dcp_aes_cbc_encrypt, - .decrypt = mxs_dcp_aes_cbc_decrypt, - .ivsize = AES_BLOCK_SIZE, - }, - }, + .base.cra_blocksize = AES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct dcp_async_ctx), + .base.cra_module = THIS_MODULE, + + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .setkey = mxs_dcp_aes_setkey, + .encrypt = mxs_dcp_aes_cbc_encrypt, + .decrypt = mxs_dcp_aes_cbc_decrypt, + .ivsize = AES_BLOCK_SIZE, + .init = mxs_dcp_aes_fallback_init_tfm, + .exit = mxs_dcp_aes_fallback_exit_tfm, }, }; @@ -1104,8 +1094,8 @@ static int mxs_dcp_probe(struct platform_device *pdev) sdcp->caps = readl(sdcp->base + MXS_DCP_CAPABILITY1); if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) { - ret = crypto_register_algs(dcp_aes_algs, - ARRAY_SIZE(dcp_aes_algs)); + ret = crypto_register_skciphers(dcp_aes_algs, + ARRAY_SIZE(dcp_aes_algs)); if (ret) { /* Failed to register algorithm. */ dev_err(dev, "Failed to register AES crypto!\n"); @@ -1139,7 +1129,7 @@ static int mxs_dcp_probe(struct platform_device *pdev) err_unregister_aes: if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) - crypto_unregister_algs(dcp_aes_algs, ARRAY_SIZE(dcp_aes_algs)); + crypto_unregister_skciphers(dcp_aes_algs, ARRAY_SIZE(dcp_aes_algs)); err_destroy_aes_thread: kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); @@ -1164,7 +1154,7 @@ static int mxs_dcp_remove(struct platform_device *pdev) crypto_unregister_ahash(&dcp_sha1_alg); if (sdcp->caps & MXS_DCP_CAPABILITY1_AES128) - crypto_unregister_algs(dcp_aes_algs, ARRAY_SIZE(dcp_aes_algs)); + crypto_unregister_skciphers(dcp_aes_algs, ARRAY_SIZE(dcp_aes_algs)); kthread_stop(sdcp->thread[DCP_CHAN_HASH_SHA]); kthread_stop(sdcp->thread[DCP_CHAN_CRYPTO]); -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BE31C17460 for ; Tue, 5 Nov 2019 13:34:15 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 64A162190F for ; Tue, 5 Nov 2019 13:34:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="g8S30Bjh"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="DiUxkf9K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 64A162190F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YcHBvZQUz/X9HTxdmgcBkS3eDtIjG3/a/qYe3mCdU+c=; b=g8S30Bjh1IFasC oGAvtxX7x3Ml655xXDOu9T8EDF5azQfVRRlDIJkoPnAHNy+bkVn4/j4Sy84U8M+x9CuOkRNfcbt80 dkWx1y8Ss0I9hc7nYdsPqjxweMU7snXQZA813xqlJqxToKGeu25C+6Thb/GeH8bmhqXlltqqrE24W DgpE9O3OTp0/M+j+7X3Ba5VILkflUlA9W0OyAVYr28qwylBdydyrHZOHE8l5IbWb1dvkDh/5waQ9E wtjmnnSG4tmhozbKgtBX3rzoCajDi35dJlLxjH6lTIT9iYIUIwKDdo4wK7wOxxMjNr9nMx9wZwMa+ Q5fqwklY3wVbSRclIXow==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iRyyL-0005uF-KA; Tue, 05 Nov 2019 13:34:13 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iRytU-0000cQ-RY for linux-arm-kernel@lists.infradead.org; Tue, 05 Nov 2019 13:29:17 +0000 Received: from localhost.localdomain (laubervilliers-657-1-83-120.w92-154.abo.wanadoo.fr [92.154.90.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EF8732190F; Tue, 5 Nov 2019 13:29:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572960552; bh=4K9k/A2waszkzp8AiDi5Gsl/4yjj2WXFV+AU9THyBNE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DiUxkf9K2m6Is8KQv8OEt4yvQpUxtXp7wrMC5o0cz2oRPS1G5ldA615iF84ccuuik uFwpDcDSAj5tkrrXGR4p0zvARY6HuyPFgs/1wJ6Yj6pWVn38+n+tQiUPFnfmqpUxpk ZIgAhl6+59X4UkQvJQiKtj7Jr2+Mpz4D8k+PZkMs= From: Ard Biesheuvel To: linux-crypto@vger.kernel.org Subject: [PATCH v3 16/29] crypto: mxs - switch to skcipher API Date: Tue, 5 Nov 2019 14:28:13 +0100 Message-Id: <20191105132826.1838-17-ardb@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191105132826.1838-1-ardb@kernel.org> References: <20191105132826.1838-1-ardb@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191105_052914_278786_9CA95DD0 X-CRM114-Status: GOOD ( 17.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Herbert Xu , =?UTF-8?q?Horia=20Geant=C4=83?= , Eric Biggers , Ard Biesheuvel , "David S. Miller" , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Q29tbWl0IDdhN2ZmZTY1YzhjNSAoImNyeXB0bzogc2tjaXBoZXIgLSBBZGQgdG9wLWxldmVsIHNr Y2lwaGVyIGludGVyZmFjZSIpCmRhdGVkIDIwIGF1Z3VzdCAyMDE1IGludHJvZHVjZWQgdGhlIG5l dyBza2NpcGhlciBBUEkgd2hpY2ggaXMgc3VwcG9zZWQgdG8KcmVwbGFjZSBib3RoIGJsa2NpcGhl ciBhbmQgYWJsa2NpcGhlci4gV2hpbGUgYWxsIGNvbnN1bWVycyBvZiB0aGUgQVBJIGhhdmUKYmVl biBjb252ZXJ0ZWQgbG9uZyBhZ28sIHNvbWUgcHJvZHVjZXJzIG9mIHRoZSBhYmxrY2lwaGVyIHJl bWFpbiwgZm9yY2luZwp1cyB0byBrZWVwIHRoZSBhYmxrY2lwaGVyIHN1cHBvcnQgcm91dGluZXMg YWxpdmUsIGFsb25nIHdpdGggdGhlIG1hdGNoaW5nCmNvZGUgdG8gZXhwb3NlIFthXWJsa2NpcGhl cnMgdmlhIHRoZSBza2NpcGhlciBBUEkuCgpTbyBzd2l0Y2ggdGhpcyBkcml2ZXIgdG8gdGhlIHNr Y2lwaGVyIEFQSSwgYWxsb3dpbmcgdXMgdG8gZmluYWxseSBkcm9wIHRoZQpibGtjaXBoZXIgY29k ZSBpbiB0aGUgbmVhciBmdXR1cmUuCgpUZXN0ZWQtYnk6IEhvcmlhIEdlYW50xIMgPGhvcmlhLmdl YW50YUBueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwu b3JnPgotLS0KIGRyaXZlcnMvY3J5cHRvL214cy1kY3AuYyB8IDE0MCArKysrKysrKystLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDc1IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL214cy1kY3AuYyBiL2RyaXZlcnMvY3J5cHRvL214 cy1kY3AuYwppbmRleCBiZjhkMjE5N2JjMTEuLmY0MzhiNDI1YzY1NSAxMDA2NDQKLS0tIGEvZHJp dmVycy9jcnlwdG8vbXhzLWRjcC5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL214cy1kY3AuYwpAQCAt MjExLDExICsyMTEsMTEgQEAgc3RhdGljIGludCBteHNfZGNwX3N0YXJ0X2RtYShzdHJ1Y3QgZGNw X2FzeW5jX2N0eCAqYWN0eCkKICAqIEVuY3J5cHRpb24gKEFFUzEyOCkKICAqLwogc3RhdGljIGlu dCBteHNfZGNwX3J1bl9hZXMoc3RydWN0IGRjcF9hc3luY19jdHggKmFjdHgsCi0JCQkgICBzdHJ1 Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGludCBpbml0KQorCQkJICAgc3RydWN0IHNrY2lw aGVyX3JlcXVlc3QgKnJlcSwgaW50IGluaXQpCiB7CiAJc3RydWN0IGRjcCAqc2RjcCA9IGdsb2Jh bF9zZGNwOwogCXN0cnVjdCBkY3BfZG1hX2Rlc2MgKmRlc2MgPSAmc2RjcC0+Y29oLT5kZXNjW2Fj dHgtPmNoYW5dOwotCXN0cnVjdCBkY3BfYWVzX3JlcV9jdHggKnJjdHggPSBhYmxrY2lwaGVyX3Jl cXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGRjcF9hZXNfcmVxX2N0eCAqcmN0eCA9IHNrY2lwaGVy X3JlcXVlc3RfY3R4KHJlcSk7CiAJaW50IHJldDsKIAogCWRtYV9hZGRyX3Qga2V5X3BoeXMgPSBk bWFfbWFwX3NpbmdsZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+YWVzX2tleSwKQEAgLTI3NCw5ICsy NzQsOSBAQCBzdGF0aWMgaW50IG14c19kY3BfYWVzX2Jsb2NrX2NyeXB0KHN0cnVjdCBjcnlwdG9f YXN5bmNfcmVxdWVzdCAqYXJxKQogewogCXN0cnVjdCBkY3AgKnNkY3AgPSBnbG9iYWxfc2RjcDsK IAotCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9j YXN0KGFycSk7CisJc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IHNrY2lwaGVyX3JlcXVl c3RfY2FzdChhcnEpOwogCXN0cnVjdCBkY3BfYXN5bmNfY3R4ICphY3R4ID0gY3J5cHRvX3RmbV9j dHgoYXJxLT50Zm0pOwotCXN0cnVjdCBkY3BfYWVzX3JlcV9jdHggKnJjdHggPSBhYmxrY2lwaGVy X3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGRjcF9hZXNfcmVxX2N0eCAqcmN0eCA9IHNrY2lw aGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCA9IHJlcS0+ ZHN0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjID0gcmVxLT5zcmM7CkBAIC0zMDUsNyArMzA1 LDcgQEAgc3RhdGljIGludCBteHNfZGNwX2Flc19ibG9ja19jcnlwdChzdHJ1Y3QgY3J5cHRvX2Fz eW5jX3JlcXVlc3QgKmFycSkKIAogCWlmICghcmN0eC0+ZWNiKSB7CiAJCS8qIENvcHkgdGhlIENC QyBJViBqdXN0IHBhc3QgdGhlIGtleS4gKi8KLQkJbWVtY3B5KGtleSArIEFFU19LRVlTSVpFXzEy OCwgcmVxLT5pbmZvLCBBRVNfS0VZU0laRV8xMjgpOworCQltZW1jcHkoa2V5ICsgQUVTX0tFWVNJ WkVfMTI4LCByZXEtPml2LCBBRVNfS0VZU0laRV8xMjgpOwogCQkvKiBDQkMgbmVlZHMgdGhlIElO SVQgc2V0LiAqLwogCQlpbml0ID0gMTsKIAl9IGVsc2UgewpAQCAtMzE2LDEwICszMTYsMTAgQEAg c3RhdGljIGludCBteHNfZGNwX2Flc19ibG9ja19jcnlwdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3Jl cXVlc3QgKmFycSkKIAkJc3JjX2J1ZiA9IHNnX3ZpcnQoc3JjKTsKIAkJbGVuID0gc2dfZG1hX2xl bihzcmMpOwogCQl0bGVuICs9IGxlbjsKLQkJbGltaXRfaGl0ID0gdGxlbiA+IHJlcS0+bmJ5dGVz OworCQlsaW1pdF9oaXQgPSB0bGVuID4gcmVxLT5jcnlwdGxlbjsKIAogCQlpZiAobGltaXRfaGl0 KQotCQkJbGVuID0gcmVxLT5uYnl0ZXMgLSAodGxlbiAtIGxlbik7CisJCQlsZW4gPSByZXEtPmNy eXB0bGVuIC0gKHRsZW4gLSBsZW4pOwogCiAJCWRvIHsKIAkJCWlmIChhY3R4LT5maWxsICsgbGVu ID4gb3V0X29mZikKQEAgLTM3NSwxMCArMzc1LDEwIEBAIHN0YXRpYyBpbnQgbXhzX2RjcF9hZXNf YmxvY2tfY3J5cHQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcnEpCiAJLyogQ29weSB0 aGUgSVYgZm9yIENCQyBmb3IgY2hhaW5pbmcgKi8KIAlpZiAoIXJjdHgtPmVjYikgewogCQlpZiAo cmN0eC0+ZW5jKQotCQkJbWVtY3B5KHJlcS0+aW5mbywgb3V0X2J1ZisobGFzdF9vdXRfbGVuLUFF U19CTE9DS19TSVpFKSwKKwkJCW1lbWNweShyZXEtPml2LCBvdXRfYnVmKyhsYXN0X291dF9sZW4t QUVTX0JMT0NLX1NJWkUpLAogCQkJCUFFU19CTE9DS19TSVpFKTsKIAkJZWxzZQotCQkJbWVtY3B5 KHJlcS0+aW5mbywgaW5fYnVmKyhsYXN0X291dF9sZW4tQUVTX0JMT0NLX1NJWkUpLAorCQkJbWVt Y3B5KHJlcS0+aXYsIGluX2J1ZisobGFzdF9vdXRfbGVuLUFFU19CTE9DS19TSVpFKSwKIAkJCQlB RVNfQkxPQ0tfU0laRSk7CiAJfQogCkBAIC00MjIsMTcgKzQyMiwxNyBAQCBzdGF0aWMgaW50IGRj cF9jaGFuX3RocmVhZF9hZXModm9pZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBteHNfZGNwX2Jsb2NrX2ZhbGxiYWNrKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSwg aW50IGVuYykKK3N0YXRpYyBpbnQgbXhzX2RjcF9ibG9ja19mYWxsYmFjayhzdHJ1Y3Qgc2tjaXBo ZXJfcmVxdWVzdCAqcmVxLCBpbnQgZW5jKQogewotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAq dGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGRjcF9hc3luY19j dHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fc2tj aXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgZGNwX2Fz eW5jX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOwogCVNZTkNfU0tDSVBIRVJf UkVRVUVTVF9PTl9TVEFDSyhzdWJyZXEsIGN0eC0+ZmFsbGJhY2spOwogCWludCByZXQ7CiAKIAlz a2NpcGhlcl9yZXF1ZXN0X3NldF9zeW5jX3RmbShzdWJyZXEsIGN0eC0+ZmFsbGJhY2spOwogCXNr Y2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHN1YnJlcSwgcmVxLT5iYXNlLmZsYWdzLCBOVUxM LCBOVUxMKTsKIAlza2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChzdWJyZXEsIHJlcS0+c3JjLCBy ZXEtPmRzdCwKLQkJCQkgICByZXEtPm5ieXRlcywgcmVxLT5pbmZvKTsKKwkJCQkgICByZXEtPmNy eXB0bGVuLCByZXEtPml2KTsKIAogCWlmIChlbmMpCiAJCXJldCA9IGNyeXB0b19za2NpcGhlcl9l bmNyeXB0KHN1YnJlcSk7CkBAIC00NDQsMTIgKzQ0NCwxMiBAQCBzdGF0aWMgaW50IG14c19kY3Bf YmxvY2tfZmFsbGJhY2soc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLCBpbnQgZW5jKQog CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXhzX2RjcF9hZXNfZW5xdWV1ZShzdHJ1Y3Qg YWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGludCBlbmMsIGludCBlY2IpCitzdGF0aWMgaW50IG14 c19kY3BfYWVzX2VucXVldWUoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgaW50IGVuYywg aW50IGVjYikKIHsKIAlzdHJ1Y3QgZGNwICpzZGNwID0gZ2xvYmFsX3NkY3A7CiAJc3RydWN0IGNy eXB0b19hc3luY19yZXF1ZXN0ICphcnEgPSAmcmVxLT5iYXNlOwogCXN0cnVjdCBkY3BfYXN5bmNf Y3R4ICphY3R4ID0gY3J5cHRvX3RmbV9jdHgoYXJxLT50Zm0pOwotCXN0cnVjdCBkY3BfYWVzX3Jl cV9jdHggKnJjdHggPSBhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGRjcF9h ZXNfcmVxX2N0eCAqcmN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJaW50IHJldDsK IAogCWlmICh1bmxpa2VseShhY3R4LT5rZXlfbGVuICE9IEFFU19LRVlTSVpFXzEyOCkpCkBAIC00 NjgsMzAgKzQ2OCwzMCBAQCBzdGF0aWMgaW50IG14c19kY3BfYWVzX2VucXVldWUoc3RydWN0IGFi bGtjaXBoZXJfcmVxdWVzdCAqcmVxLCBpbnQgZW5jLCBpbnQgZWNiKQogCXJldHVybiByZXQ7CiB9 CiAKLXN0YXRpYyBpbnQgbXhzX2RjcF9hZXNfZWNiX2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJf cmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBteHNfZGNwX2Flc19lY2JfZGVjcnlwdChzdHJ1Y3Qg c2tjaXBoZXJfcmVxdWVzdCAqcmVxKQogewogCXJldHVybiBteHNfZGNwX2Flc19lbnF1ZXVlKHJl cSwgMCwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgbXhzX2RjcF9hZXNfZWNiX2VuY3J5cHQoc3RydWN0 IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBteHNfZGNwX2Flc19lY2JfZW5j cnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQogewogCXJldHVybiBteHNfZGNwX2Fl c19lbnF1ZXVlKHJlcSwgMSwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgbXhzX2RjcF9hZXNfY2JjX2Rl Y3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBteHNfZGNw X2Flc19jYmNfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQogewogCXJldHVy biBteHNfZGNwX2Flc19lbnF1ZXVlKHJlcSwgMCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgbXhzX2Rj cF9hZXNfY2JjX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQorc3RhdGlj IGludCBteHNfZGNwX2Flc19jYmNfZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVx KQogewogCXJldHVybiBteHNfZGNwX2Flc19lbnF1ZXVlKHJlcSwgMSwgMCk7CiB9CiAKLXN0YXRp YyBpbnQgbXhzX2RjcF9hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtLCBj b25zdCB1OCAqa2V5LAorc3RhdGljIGludCBteHNfZGNwX2Flc19zZXRrZXkoc3RydWN0IGNyeXB0 b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJICAgICAgdW5zaWduZWQgaW50IGxl bikKIHsKLQlzdHJ1Y3QgZGNwX2FzeW5jX2N0eCAqYWN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0 eCh0Zm0pOworCXN0cnVjdCBkY3BfYXN5bmNfY3R4ICphY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0 eCh0Zm0pOwogCXVuc2lnbmVkIGludCByZXQ7CiAKIAkvKgpAQCAtNTI1LDEwICs1MjUsMTAgQEAg c3RhdGljIGludCBteHNfZGNwX2Flc19zZXRrZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0 Zm0sIGNvbnN0IHU4ICprZXksCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBteHNfZGNw X2Flc19mYWxsYmFja19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IG14 c19kY3BfYWVzX2ZhbGxiYWNrX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSkK IHsKLQljb25zdCBjaGFyICpuYW1lID0gY3J5cHRvX3RmbV9hbGdfbmFtZSh0Zm0pOwotCXN0cnVj dCBkY3BfYXN5bmNfY3R4ICphY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwljb25zdCBjaGFy ICpuYW1lID0gY3J5cHRvX3RmbV9hbGdfbmFtZShjcnlwdG9fc2tjaXBoZXJfdGZtKHRmbSkpOwor CXN0cnVjdCBkY3BfYXN5bmNfY3R4ICphY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOwog CXN0cnVjdCBjcnlwdG9fc3luY19za2NpcGhlciAqYmxrOwogCiAJYmxrID0gY3J5cHRvX2FsbG9j X3N5bmNfc2tjaXBoZXIobmFtZSwgMCwgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLKTsKQEAgLTUz NiwxMyArNTM2LDEzIEBAIHN0YXRpYyBpbnQgbXhzX2RjcF9hZXNfZmFsbGJhY2tfaW5pdChzdHJ1 Y3QgY3J5cHRvX3RmbSAqdGZtKQogCQlyZXR1cm4gUFRSX0VSUihibGspOwogCiAJYWN0eC0+ZmFs bGJhY2sgPSBibGs7Ci0JdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVj dCBkY3BfYWVzX3JlcV9jdHgpOworCWNyeXB0b19za2NpcGhlcl9zZXRfcmVxc2l6ZSh0Zm0sIHNp emVvZihzdHJ1Y3QgZGNwX2Flc19yZXFfY3R4KSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2 b2lkIG14c19kY3BfYWVzX2ZhbGxiYWNrX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0 YXRpYyB2b2lkIG14c19kY3BfYWVzX2ZhbGxiYWNrX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fc2tj aXBoZXIgKnRmbSkKIHsKLQlzdHJ1Y3QgZGNwX2FzeW5jX2N0eCAqYWN0eCA9IGNyeXB0b190Zm1f Y3R4KHRmbSk7CisJc3RydWN0IGRjcF9hc3luY19jdHggKmFjdHggPSBjcnlwdG9fc2tjaXBoZXJf Y3R4KHRmbSk7CiAKIAljcnlwdG9fZnJlZV9zeW5jX3NrY2lwaGVyKGFjdHgtPmZhbGxiYWNrKTsK IH0KQEAgLTg1NCw1NCArODU0LDQ0IEBAIHN0YXRpYyB2b2lkIGRjcF9zaGFfY3JhX2V4aXQoc3Ry dWN0IGNyeXB0b190Zm0gKnRmbSkKIH0KIAogLyogQUVTIDEyOCBFQ0IgYW5kIEFFUyAxMjggQ0JD ICovCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGNwX2Flc19hbGdzW10gPSB7CitzdGF0aWMg c3RydWN0IHNrY2lwaGVyX2FsZyBkY3BfYWVzX2FsZ3NbXSA9IHsKIAl7Ci0JCS5jcmFfbmFtZQkJ PSAiZWNiKGFlcykiLAotCQkuY3JhX2RyaXZlcl9uYW1lCT0gImVjYi1hZXMtZGNwIiwKLQkJLmNy YV9wcmlvcml0eQkJPSA0MDAsCi0JCS5jcmFfYWxpZ25tYXNrCQk9IDE1LAotCQkuY3JhX2ZsYWdz CQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwKLQkJCQkJICBDUllQVE9fQUxHX0FTWU5D IHwKKwkJLmJhc2UuY3JhX25hbWUJCT0gImVjYihhZXMpIiwKKwkJLmJhc2UuY3JhX2RyaXZlcl9u YW1lCT0gImVjYi1hZXMtZGNwIiwKKwkJLmJhc2UuY3JhX3ByaW9yaXR5CT0gNDAwLAorCQkuYmFz ZS5jcmFfYWxpZ25tYXNrCT0gMTUsCisJCS5iYXNlLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX0FT WU5DIHwKIAkJCQkJICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCi0JCS5jcmFfaW5pdAkJPSBt eHNfZGNwX2Flc19mYWxsYmFja19pbml0LAotCQkuY3JhX2V4aXQJCT0gbXhzX2RjcF9hZXNfZmFs bGJhY2tfZXhpdCwKLQkJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCi0JCS5jcmFf Y3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGRjcF9hc3luY19jdHgpLAotCQkuY3JhX3R5cGUJCT0g JmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCi0JCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAot CQkuY3JhX3UJPSB7Ci0JCQkuYWJsa2NpcGhlciA9IHsKLQkJCQkubWluX2tleXNpemUJPSBBRVNf TUlOX0tFWV9TSVpFLAotCQkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCi0JCQkJ LnNldGtleQkJPSBteHNfZGNwX2Flc19zZXRrZXksCi0JCQkJLmVuY3J5cHQJPSBteHNfZGNwX2Fl c19lY2JfZW5jcnlwdCwKLQkJCQkuZGVjcnlwdAk9IG14c19kY3BfYWVzX2VjYl9kZWNyeXB0Ci0J CQl9LAotCQl9LAorCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gQUVTX0JMT0NLX1NJWkUsCisJCS5i YXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBkY3BfYXN5bmNfY3R4KSwKKwkJLmJhc2Uu Y3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCisJCS5taW5fa2V5c2l6ZQkJPSBBRVNfTUlOX0tF WV9TSVpFLAorCQkubWF4X2tleXNpemUJCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJLnNldGtleQkJ CT0gbXhzX2RjcF9hZXNfc2V0a2V5LAorCQkuZW5jcnlwdAkJPSBteHNfZGNwX2Flc19lY2JfZW5j cnlwdCwKKwkJLmRlY3J5cHQJCT0gbXhzX2RjcF9hZXNfZWNiX2RlY3J5cHQsCisJCS5pbml0CQkJ PSBteHNfZGNwX2Flc19mYWxsYmFja19pbml0X3RmbSwKKwkJLmV4aXQJCQk9IG14c19kY3BfYWVz X2ZhbGxiYWNrX2V4aXRfdGZtLAogCX0sIHsKLQkJLmNyYV9uYW1lCQk9ICJjYmMoYWVzKSIsCi0J CS5jcmFfZHJpdmVyX25hbWUJPSAiY2JjLWFlcy1kY3AiLAotCQkuY3JhX3ByaW9yaXR5CQk9IDQw MCwKLQkJLmNyYV9hbGlnbm1hc2sJCT0gMTUsCi0JCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19U WVBFX0FCTEtDSVBIRVIgfAotCQkJCQkgIENSWVBUT19BTEdfQVNZTkMgfAorCQkuYmFzZS5jcmFf bmFtZQkJPSAiY2JjKGFlcykiLAorCQkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiY2JjLWFlcy1k Y3AiLAorCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSA0MDAsCisJCS5iYXNlLmNyYV9hbGlnbm1hc2sJ PSAxNSwKKwkJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfQVNZTkMgfAogCQkJCQkgIENS WVBUT19BTEdfTkVFRF9GQUxMQkFDSywKLQkJLmNyYV9pbml0CQk9IG14c19kY3BfYWVzX2ZhbGxi YWNrX2luaXQsCi0JCS5jcmFfZXhpdAkJPSBteHNfZGNwX2Flc19mYWxsYmFja19leGl0LAotCQku Y3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKLQkJLmNyYV9jdHhzaXplCQk9IHNpemVv ZihzdHJ1Y3QgZGNwX2FzeW5jX2N0eCksCi0JCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBo ZXJfdHlwZSwKLQkJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0JCS5jcmFfdSA9IHsKLQkJ CS5hYmxrY2lwaGVyID0gewotCQkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCi0J CQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKLQkJCQkuc2V0a2V5CQk9IG14c19k Y3BfYWVzX3NldGtleSwKLQkJCQkuZW5jcnlwdAk9IG14c19kY3BfYWVzX2NiY19lbmNyeXB0LAot CQkJCS5kZWNyeXB0CT0gbXhzX2RjcF9hZXNfY2JjX2RlY3J5cHQsCi0JCQkJLml2c2l6ZQkJPSBB RVNfQkxPQ0tfU0laRSwKLQkJCX0sCi0JCX0sCisJCS5iYXNlLmNyYV9ibG9ja3NpemUJPSBBRVNf QkxPQ0tfU0laRSwKKwkJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGRjcF9hc3lu Y19jdHgpLAorCQkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisKKwkJLm1pbl9rZXlz aXplCQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCS5tYXhfa2V5c2l6ZQkJPSBBRVNfTUFYX0tFWV9T SVpFLAorCQkuc2V0a2V5CQkJPSBteHNfZGNwX2Flc19zZXRrZXksCisJCS5lbmNyeXB0CQk9IG14 c19kY3BfYWVzX2NiY19lbmNyeXB0LAorCQkuZGVjcnlwdAkJPSBteHNfZGNwX2Flc19jYmNfZGVj cnlwdCwKKwkJLml2c2l6ZQkJCT0gQUVTX0JMT0NLX1NJWkUsCisJCS5pbml0CQkJPSBteHNfZGNw X2Flc19mYWxsYmFja19pbml0X3RmbSwKKwkJLmV4aXQJCQk9IG14c19kY3BfYWVzX2ZhbGxiYWNr X2V4aXRfdGZtLAogCX0sCiB9OwogCkBAIC0xMTA0LDggKzEwOTQsOCBAQCBzdGF0aWMgaW50IG14 c19kY3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzZGNwLT5jYXBzID0g cmVhZGwoc2RjcC0+YmFzZSArIE1YU19EQ1BfQ0FQQUJJTElUWTEpOwogCiAJaWYgKHNkY3AtPmNh cHMgJiBNWFNfRENQX0NBUEFCSUxJVFkxX0FFUzEyOCkgewotCQlyZXQgPSBjcnlwdG9fcmVnaXN0 ZXJfYWxncyhkY3BfYWVzX2FsZ3MsCi0JCQkJCSAgIEFSUkFZX1NJWkUoZGNwX2Flc19hbGdzKSk7 CisJCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9za2NpcGhlcnMoZGNwX2Flc19hbGdzLAorCQkJCQkJ QVJSQVlfU0laRShkY3BfYWVzX2FsZ3MpKTsKIAkJaWYgKHJldCkgewogCQkJLyogRmFpbGVkIHRv IHJlZ2lzdGVyIGFsZ29yaXRobS4gKi8KIAkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lz dGVyIEFFUyBjcnlwdG8hXG4iKTsKQEAgLTExMzksNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgbXhz X2RjcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCiBlcnJfdW5yZWdpc3Rl cl9hZXM6CiAJaWYgKHNkY3AtPmNhcHMgJiBNWFNfRENQX0NBUEFCSUxJVFkxX0FFUzEyOCkKLQkJ Y3J5cHRvX3VucmVnaXN0ZXJfYWxncyhkY3BfYWVzX2FsZ3MsIEFSUkFZX1NJWkUoZGNwX2Flc19h bGdzKSk7CisJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhkY3BfYWVzX2FsZ3MsIEFSUkFZ X1NJWkUoZGNwX2Flc19hbGdzKSk7CiAKIGVycl9kZXN0cm95X2Flc190aHJlYWQ6CiAJa3RocmVh ZF9zdG9wKHNkY3AtPnRocmVhZFtEQ1BfQ0hBTl9DUllQVE9dKTsKQEAgLTExNjQsNyArMTE1NCw3 IEBAIHN0YXRpYyBpbnQgbXhzX2RjcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAkJY3J5cHRvX3VucmVnaXN0ZXJfYWhhc2goJmRjcF9zaGExX2FsZyk7CiAKIAlpZiAoc2Rj cC0+Y2FwcyAmIE1YU19EQ1BfQ0FQQUJJTElUWTFfQUVTMTI4KQotCQljcnlwdG9fdW5yZWdpc3Rl cl9hbGdzKGRjcF9hZXNfYWxncywgQVJSQVlfU0laRShkY3BfYWVzX2FsZ3MpKTsKKwkJY3J5cHRv X3VucmVnaXN0ZXJfc2tjaXBoZXJzKGRjcF9hZXNfYWxncywgQVJSQVlfU0laRShkY3BfYWVzX2Fs Z3MpKTsKIAogCWt0aHJlYWRfc3RvcChzZGNwLT50aHJlYWRbRENQX0NIQU5fSEFTSF9TSEFdKTsK IAlrdGhyZWFkX3N0b3Aoc2RjcC0+dGhyZWFkW0RDUF9DSEFOX0NSWVBUT10pOwotLSAKMi4yMC4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=