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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 799F3C11F64 for ; Thu, 1 Jul 2021 19:59:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5639D61410 for ; Thu, 1 Jul 2021 19:59:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230014AbhGAUBg convert rfc822-to-8bit (ORCPT ); Thu, 1 Jul 2021 16:01:36 -0400 Received: from lithops.sigma-star.at ([195.201.40.130]:50588 "EHLO lithops.sigma-star.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229894AbhGAUBg (ORCPT ); Thu, 1 Jul 2021 16:01:36 -0400 Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 3B9176108476; Thu, 1 Jul 2021 21:59:04 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Szag2gsOxhr4; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 6B18F6083273; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id J1fDMrE6PDep; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from lithops.sigma-star.at (lithops.sigma-star.at [195.201.40.130]) by lithops.sigma-star.at (Postfix) with ESMTP id 366E3610846D; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Date: Thu, 1 Jul 2021 21:59:03 +0200 (CEST) From: Richard Weinberger To: Sean Anderson Cc: Linux Crypto Mailing List , Herbert Xu , davem , horia geanta , aymen sghaier , linux-arm-kernel , Marek Vasut , david Message-ID: <1382866497.13280.1625169542979.JavaMail.zimbra@nod.at> In-Reply-To: <20210701185638.3437487-3-sean.anderson@seco.com> References: <20210701185638.3437487-1-sean.anderson@seco.com> <20210701185638.3437487-3-sean.anderson@seco.com> Subject: Re: [PATCH v2 2/2] crypto: mxs_dcp: Use sg_mapping_iter to copy data MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT X-Originating-IP: [195.201.40.130] X-Mailer: Zimbra 8.8.12_GA_3807 (ZimbraWebClient - FF78 (Linux)/8.8.12_GA_3809) Thread-Topic: crypto: mxs_dcp: Use sg_mapping_iter to copy data Thread-Index: aSs59U4orgMqgMDdkjos50LXYOppwA== Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org ----- Ursprüngliche Mail ----- > Von: "Sean Anderson" > An: "Linux Crypto Mailing List" , "Herbert Xu" , "davem" > > CC: "horia geanta" , "aymen sghaier" , "richard" , > "linux-arm-kernel" , "Marek Vasut" , "Sean Anderson" > > Gesendet: Donnerstag, 1. Juli 2021 20:56:38 > Betreff: [PATCH v2 2/2] crypto: mxs_dcp: Use sg_mapping_iter to copy data > This uses the sg_miter_*() functions to copy data, instead of doing it > ourselves. Using sg_copy_buffer() would be better, but this way we don't > have to keep traversing the beginning of the scatterlist every time we > do another copy. Huh? This does not match the code. You use sg_pcopy_from_buffer() which is just a wrapper around sg_copy_buffer(). Did you forget to update the commit message? :-) > In addition to reducing code size, this fixes the following oops > resulting from failing to kmap the page: > > [ 68.896381] Unable to handle kernel NULL pointer dereference at virtual > address 00000ab8 > [ 68.904539] pgd = 3561adb3 > [ 68.907475] [00000ab8] *pgd=00000000 > [ 68.911153] Internal error: Oops: 805 [#1] ARM > [ 68.915618] Modules linked in: cfg80211 rfkill des_generic libdes arc4 > libarc4 cbc ecb algif_skcipher sha256_generic libsha256 sha1_generic hmac > aes_generic libaes cmac sha512_generic md5 md4 algif_hash af_alg i2c_imx > i2c_core ci_hdrc_imx ci_hdrc mxs_dcp ulpi roles udc_core imx_sdma usbmisc_imx > usb_common firmware_class virt_dma phy_mxs_usb nf_tables nfnetlink ip_tables > x_tables ipv6 autofs4 > [ 68.950741] CPU: 0 PID: 139 Comm: mxs_dcp_chan/ae Not tainted 5.10.34 #296 > [ 68.958501] Hardware name: Freescale i.MX6 Ultralite (Device Tree) > [ 68.964710] PC is at memcpy+0xa8/0x330 > [ 68.968479] LR is at 0xd7b2bc9d > [ 68.971638] pc : [] lr : [] psr: 000f0013 > [ 68.977920] sp : c2cbbee4 ip : 00000010 fp : 00000010 > [ 68.983159] r10: 00000000 r9 : c3283a40 r8 : 1a5a6f08 > [ 68.988402] r7 : 4bfe0ecc r6 : 76d8a220 r5 : c32f9050 r4 : 00000001 > [ 68.994945] r3 : 00000ab8 r2 : fffffff0 r1 : c32f9050 r0 : 00000ab8 > [ 69.001492] Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none > [ 69.008646] Control: 10c53c7d Table: 83664059 DAC: 00000051 > [ 69.014414] Process mxs_dcp_chan/ae (pid: 139, stack limit = 0x667b57ab) > [ 69.021133] Stack: (0xc2cbbee4 to 0xc2cbc000) > [ 69.025519] bee0: c32f9050 c3235408 00000010 00000010 00000ab8 > 00000001 bf10406c > [ 69.033720] bf00: 00000000 00000000 00000010 00000000 c32355d0 832fb080 > 00000000 c13de2fc > [ 69.041921] bf20: c3628010 00000010 c33d5780 00000ab8 bf1067e8 00000002 > c21e5010 c2cba000 > [ 69.050125] bf40: c32f8040 00000000 bf106a40 c32f9040 c3283a80 00000001 > bf105240 c3234040 > [ 69.058327] bf60: ffffe000 c3204100 c2c69800 c2cba000 00000000 bf103b84 > 00000000 c2eddc54 > [ 69.066530] bf80: c3204144 c0140d1c c2cba000 c2c69800 c0140be8 00000000 > 00000000 00000000 > [ 69.074730] bfa0: 00000000 00000000 00000000 c0100114 00000000 00000000 > 00000000 00000000 > [ 69.082932] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 > [ 69.091131] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 > 00000000 00000000 > [ 69.099364] [] (memcpy) from [] > (dcp_chan_thread_aes+0x4e8/0x840 [mxs_dcp]) > [ 69.108117] [] (dcp_chan_thread_aes [mxs_dcp]) from [] > (kthread+0x134/0x160) > [ 69.116941] [] (kthread) from [] > (ret_from_fork+0x14/0x20) > [ 69.124178] Exception stack(0xc2cbbfb0 to 0xc2cbbff8) > [ 69.129250] bfa0: 00000000 00000000 > 00000000 00000000 > [ 69.137450] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 > [ 69.145648] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 > [ 69.152289] Code: e320f000 e4803004 e4804004 e4805004 (e4806004) > > Signed-off-by: Sean Anderson > --- > > Changes in v2: > - Fix warning when taking the minimum of a u32 and a size_t > - Use sg_pcopy_from_buffer to properly deal with partial reads. > > drivers/crypto/mxs-dcp.c | 36 +++++++++--------------------------- > 1 file changed, 9 insertions(+), 27 deletions(-) > > diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c > index f397cc5bf102..d19e5ffb5104 100644 > --- a/drivers/crypto/mxs-dcp.c > +++ b/drivers/crypto/mxs-dcp.c > @@ -300,21 +300,20 @@ static int mxs_dcp_aes_block_crypt(struct > crypto_async_request *arq) > > struct scatterlist *dst = req->dst; > struct scatterlist *src = req->src; > - const int nents = sg_nents(req->src); > + int dst_nents = sg_nents(dst); > > const int out_off = DCP_BUF_SZ; > uint8_t *in_buf = sdcp->coh->aes_in_buf; > uint8_t *out_buf = sdcp->coh->aes_out_buf; > > - uint8_t *out_tmp, *src_buf, *dst_buf = NULL; > uint32_t dst_off = 0; > + uint8_t *src_buf = NULL; > uint32_t last_out_len = 0; > > uint8_t *key = sdcp->coh->aes_key; > > int ret = 0; > - int split = 0; > - unsigned int i, len, clen, rem = 0, tlen = 0; > + unsigned int i, len, clen, tlen = 0; > int init = 0; > bool limit_hit = false; > > @@ -332,7 +331,7 @@ static int mxs_dcp_aes_block_crypt(struct > crypto_async_request *arq) > memset(key + AES_KEYSIZE_128, 0, AES_KEYSIZE_128); > } > > - for_each_sg(req->src, src, nents, i) { > + for_each_sg(req->src, src, sg_nents(src), i) { > src_buf = sg_virt(src); > len = sg_dma_len(src); > tlen += len; > @@ -357,34 +356,17 @@ static int mxs_dcp_aes_block_crypt(struct > crypto_async_request *arq) > * submit the buffer. > */ > if (actx->fill == out_off || sg_is_last(src) || > - limit_hit) { > + limit_hit) { > ret = mxs_dcp_run_aes(actx, req, init); > if (ret) > return ret; > init = 0; > > - out_tmp = out_buf; > + sg_pcopy_from_buffer(dst, dst_nents, out_buf, > + actx->fill, dst_off); > + dst_off += actx->fill; > last_out_len = actx->fill; > - while (dst && actx->fill) { > - if (!split) { > - dst_buf = sg_virt(dst); > - dst_off = 0; > - } > - rem = min(sg_dma_len(dst) - dst_off, > - actx->fill); > - > - memcpy(dst_buf + dst_off, out_tmp, rem); > - out_tmp += rem; > - dst_off += rem; > - actx->fill -= rem; > - > - if (dst_off == sg_dma_len(dst)) { > - dst = sg_next(dst); > - split = 0; > - } else { > - split = 1; > - } > - } > + actx->fill = 0; > } > } while (len); > > -- > 2.25.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=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 86C60C11F64 for ; Thu, 1 Jul 2021 20:01:06 +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 51CDF61410 for ; Thu, 1 Jul 2021 20:01:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 51CDF61410 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=nod.at Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Subject:References: In-Reply-To:Message-ID:Cc:To:From:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=aM7L8ru6EeBDSDDkP7Zye70QnwtcntAVIDCXXEdBiug=; b=APS2VunVkFX4Dk9Z4fmFuhTGgi moRZYQnh0ZqdMH/dsfVHkKKMwLvYlqcAjyjOJ11e5rpOUW6xs0CBOX9n7K3nLtx3HXcTFX2Bxlz2L nRD81cFxgQ+rT+oFj9SxI9dbGVK49Zd4dkQ6BaKtj5Bm4F5uf6tXDfXUcCg9jtWzvikD8KnVqDWVd E//VAXQiwCD86gwpmnvjwq380lmOwydPXKuWttEgmT/yGw6zEZ5UagE6a3WMMtrgNhFP/xc9jW46E HZOWKFdLMyxRuKL38zxboNES+omo928WB2GNfnqJnAi/44+SNL0q9NYDnSukucDxJ+q6KT+xWoECQ xnZ0q52A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lz2q6-000wxs-08; Thu, 01 Jul 2021 19:59:10 +0000 Received: from lithops.sigma-star.at ([195.201.40.130]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lz2q1-000wwo-J5 for linux-arm-kernel@lists.infradead.org; Thu, 01 Jul 2021 19:59:07 +0000 Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 3B9176108476; Thu, 1 Jul 2021 21:59:04 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Szag2gsOxhr4; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 6B18F6083273; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id J1fDMrE6PDep; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Received: from lithops.sigma-star.at (lithops.sigma-star.at [195.201.40.130]) by lithops.sigma-star.at (Postfix) with ESMTP id 366E3610846D; Thu, 1 Jul 2021 21:59:03 +0200 (CEST) Date: Thu, 1 Jul 2021 21:59:03 +0200 (CEST) From: Richard Weinberger To: Sean Anderson Cc: Linux Crypto Mailing List , Herbert Xu , davem , horia geanta , aymen sghaier , linux-arm-kernel , Marek Vasut , david Message-ID: <1382866497.13280.1625169542979.JavaMail.zimbra@nod.at> In-Reply-To: <20210701185638.3437487-3-sean.anderson@seco.com> References: <20210701185638.3437487-1-sean.anderson@seco.com> <20210701185638.3437487-3-sean.anderson@seco.com> Subject: Re: [PATCH v2 2/2] crypto: mxs_dcp: Use sg_mapping_iter to copy data MIME-Version: 1.0 X-Originating-IP: [195.201.40.130] X-Mailer: Zimbra 8.8.12_GA_3807 (ZimbraWebClient - FF78 (Linux)/8.8.12_GA_3809) Thread-Topic: crypto: mxs_dcp: Use sg_mapping_iter to copy data Thread-Index: aSs59U4orgMqgMDdkjos50LXYOppwA== X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210701_125906_000024_96A31E2C X-CRM114-Status: GOOD ( 21.12 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org LS0tLS0gVXJzcHLDvG5nbGljaGUgTWFpbCAtLS0tLQo+IFZvbjogIlNlYW4gQW5kZXJzb24iIDxz ZWFuLmFuZGVyc29uQHNlY28uY29tPgo+IEFuOiAiTGludXggQ3J5cHRvIE1haWxpbmcgTGlzdCIg PGxpbnV4LWNyeXB0b0B2Z2VyLmtlcm5lbC5vcmc+LCAiSGVyYmVydCBYdSIgPGhlcmJlcnRAZ29u ZG9yLmFwYW5hLm9yZy5hdT4sICJkYXZlbSIKPiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KPiBDQzog ImhvcmlhIGdlYW50YSIgPGhvcmlhLmdlYW50YUBueHAuY29tPiwgImF5bWVuIHNnaGFpZXIiIDxh eW1lbi5zZ2hhaWVyQG54cC5jb20+LCAicmljaGFyZCIgPHJpY2hhcmRAbm9kLmF0PiwKPiAibGlu dXgtYXJtLWtlcm5lbCIgPGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZz4sICJN YXJlayBWYXN1dCIgPG1hcmV4QGRlbnguZGU+LCAiU2VhbiBBbmRlcnNvbiIKPiA8c2Vhbi5hbmRl cnNvbkBzZWNvLmNvbT4KPiBHZXNlbmRldDogRG9ubmVyc3RhZywgMS4gSnVsaSAyMDIxIDIwOjU2 OjM4Cj4gQmV0cmVmZjogW1BBVENIIHYyIDIvMl0gY3J5cHRvOiBteHNfZGNwOiBVc2Ugc2dfbWFw cGluZ19pdGVyIHRvIGNvcHkgZGF0YQoKPiBUaGlzIHVzZXMgdGhlIHNnX21pdGVyXyooKSBmdW5j dGlvbnMgdG8gY29weSBkYXRhLCBpbnN0ZWFkIG9mIGRvaW5nIGl0Cj4gb3Vyc2VsdmVzLiBVc2lu ZyBzZ19jb3B5X2J1ZmZlcigpIHdvdWxkIGJlIGJldHRlciwgYnV0IHRoaXMgd2F5IHdlIGRvbid0 Cj4gaGF2ZSB0byBrZWVwIHRyYXZlcnNpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2NhdHRlcmxp c3QgZXZlcnkgdGltZSB3ZQo+IGRvIGFub3RoZXIgY29weS4KCkh1aD8gVGhpcyBkb2VzIG5vdCBt YXRjaCB0aGUgY29kZS4KWW91IHVzZSBzZ19wY29weV9mcm9tX2J1ZmZlcigpIHdoaWNoIGlzIGp1 c3QgYSB3cmFwcGVyIGFyb3VuZCBzZ19jb3B5X2J1ZmZlcigpLgoKRGlkIHlvdSBmb3JnZXQgdG8g dXBkYXRlIHRoZSBjb21taXQgbWVzc2FnZT8gOi0pCgo+IEluIGFkZGl0aW9uIHRvIHJlZHVjaW5n IGNvZGUgc2l6ZSwgdGhpcyBmaXhlcyB0aGUgZm9sbG93aW5nIG9vcHMKPiByZXN1bHRpbmcgZnJv bSBmYWlsaW5nIHRvIGttYXAgdGhlIHBhZ2U6Cj4gCj4gWyAgIDY4Ljg5NjM4MV0gVW5hYmxlIHRv IGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IHZpcnR1YWwKPiBhZGRy ZXNzIDAwMDAwYWI4Cj4gWyAgIDY4LjkwNDUzOV0gcGdkID0gMzU2MWFkYjMKPiBbICAgNjguOTA3 NDc1XSBbMDAwMDBhYjhdICpwZ2Q9MDAwMDAwMDAKPiBbICAgNjguOTExMTUzXSBJbnRlcm5hbCBl cnJvcjogT29wczogODA1IFsjMV0gQVJNCj4gWyAgIDY4LjkxNTYxOF0gTW9kdWxlcyBsaW5rZWQg aW46IGNmZzgwMjExIHJma2lsbCBkZXNfZ2VuZXJpYyBsaWJkZXMgYXJjNAo+IGxpYmFyYzQgY2Jj IGVjYiBhbGdpZl9za2NpcGhlciBzaGEyNTZfZ2VuZXJpYyBsaWJzaGEyNTYgc2hhMV9nZW5lcmlj IGhtYWMKPiBhZXNfZ2VuZXJpYyBsaWJhZXMgY21hYyBzaGE1MTJfZ2VuZXJpYyBtZDUgbWQ0IGFs Z2lmX2hhc2ggYWZfYWxnIGkyY19pbXgKPiBpMmNfY29yZSBjaV9oZHJjX2lteCBjaV9oZHJjIG14 c19kY3AgdWxwaSByb2xlcyB1ZGNfY29yZSBpbXhfc2RtYSB1c2JtaXNjX2lteAo+IHVzYl9jb21t b24gZmlybXdhcmVfY2xhc3MgdmlydF9kbWEgcGh5X214c191c2IgbmZfdGFibGVzIG5mbmV0bGlu ayBpcF90YWJsZXMKPiB4X3RhYmxlcyBpcHY2IGF1dG9mczQKPiBbICAgNjguOTUwNzQxXSBDUFU6 IDAgUElEOiAxMzkgQ29tbTogbXhzX2RjcF9jaGFuL2FlIE5vdCB0YWludGVkIDUuMTAuMzQgIzI5 Ngo+IFsgICA2OC45NTg1MDFdIEhhcmR3YXJlIG5hbWU6IEZyZWVzY2FsZSBpLk1YNiBVbHRyYWxp dGUgKERldmljZSBUcmVlKQo+IFsgICA2OC45NjQ3MTBdIFBDIGlzIGF0IG1lbWNweSsweGE4LzB4 MzMwCj4gWyAgIDY4Ljk2ODQ3OV0gTFIgaXMgYXQgMHhkN2IyYmM5ZAo+IFsgICA2OC45NzE2Mzhd IHBjIDogWzxjMDUzZTdjOD5dICAgIGxyIDogWzxkN2IyYmM5ZD5dICAgIHBzcjogMDAwZjAwMTMK PiBbICAgNjguOTc3OTIwXSBzcCA6IGMyY2JiZWU0ICBpcCA6IDAwMDAwMDEwICBmcCA6IDAwMDAw MDEwCj4gWyAgIDY4Ljk4MzE1OV0gcjEwOiAwMDAwMDAwMCAgcjkgOiBjMzI4M2E0MCAgcjggOiAx YTVhNmYwOAo+IFsgICA2OC45ODg0MDJdIHI3IDogNGJmZTBlY2MgIHI2IDogNzZkOGEyMjAgIHI1 IDogYzMyZjkwNTAgIHI0IDogMDAwMDAwMDEKPiBbICAgNjguOTk0OTQ1XSByMyA6IDAwMDAwYWI4 ICByMiA6IGZmZmZmZmYwICByMSA6IGMzMmY5MDUwICByMCA6IDAwMDAwYWI4Cj4gWyAgIDY5LjAw MTQ5Ml0gRmxhZ3M6IG56Y3YgIElSUXMgb24gIEZJUXMgb24gIE1vZGUgU1ZDXzMyICBJU0EgQVJN ICBTZWdtZW50IG5vbmUKPiBbICAgNjkuMDA4NjQ2XSBDb250cm9sOiAxMGM1M2M3ZCAgVGFibGU6 IDgzNjY0MDU5ICBEQUM6IDAwMDAwMDUxCj4gWyAgIDY5LjAxNDQxNF0gUHJvY2VzcyBteHNfZGNw X2NoYW4vYWUgKHBpZDogMTM5LCBzdGFjayBsaW1pdCA9IDB4NjY3YjU3YWIpCj4gWyAgIDY5LjAy MTEzM10gU3RhY2s6ICgweGMyY2JiZWU0IHRvIDB4YzJjYmMwMDApCj4gWyAgIDY5LjAyNTUxOV0g YmVlMDogICAgICAgICAgYzMyZjkwNTAgYzMyMzU0MDggMDAwMDAwMTAgMDAwMDAwMTAgMDAwMDBh YjgKPiAwMDAwMDAwMSBiZjEwNDA2Ywo+IFsgICA2OS4wMzM3MjBdIGJmMDA6IDAwMDAwMDAwIDAw MDAwMDAwIDAwMDAwMDEwIDAwMDAwMDAwIGMzMjM1NWQwIDgzMmZiMDgwCj4gMDAwMDAwMDAgYzEz ZGUyZmMKPiBbICAgNjkuMDQxOTIxXSBiZjIwOiBjMzYyODAxMCAwMDAwMDAxMCBjMzNkNTc4MCAw MDAwMGFiOCBiZjEwNjdlOCAwMDAwMDAwMgo+IGMyMWU1MDEwIGMyY2JhMDAwCj4gWyAgIDY5LjA1 MDEyNV0gYmY0MDogYzMyZjgwNDAgMDAwMDAwMDAgYmYxMDZhNDAgYzMyZjkwNDAgYzMyODNhODAg MDAwMDAwMDEKPiBiZjEwNTI0MCBjMzIzNDA0MAo+IFsgICA2OS4wNTgzMjddIGJmNjA6IGZmZmZl MDAwIGMzMjA0MTAwIGMyYzY5ODAwIGMyY2JhMDAwIDAwMDAwMDAwIGJmMTAzYjg0Cj4gMDAwMDAw MDAgYzJlZGRjNTQKPiBbICAgNjkuMDY2NTMwXSBiZjgwOiBjMzIwNDE0NCBjMDE0MGQxYyBjMmNi YTAwMCBjMmM2OTgwMCBjMDE0MGJlOCAwMDAwMDAwMAo+IDAwMDAwMDAwIDAwMDAwMDAwCj4gWyAg IDY5LjA3NDczMF0gYmZhMDogMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgYzAxMDAxMTQgMDAw MDAwMDAgMDAwMDAwMDAKPiAwMDAwMDAwMCAwMDAwMDAwMAo+IFsgICA2OS4wODI5MzJdIGJmYzA6 IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwCj4g MDAwMDAwMDAgMDAwMDAwMDAKPiBbICAgNjkuMDkxMTMxXSBiZmUwOiAwMDAwMDAwMCAwMDAwMDAw MCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAxMyAwMDAwMDAwMAo+IDAwMDAwMDAwIDAwMDAwMDAw Cj4gWyAgIDY5LjA5OTM2NF0gWzxjMDUzZTdjOD5dIChtZW1jcHkpIGZyb20gWzxiZjEwNDA2Yz5d Cj4gKGRjcF9jaGFuX3RocmVhZF9hZXMrMHg0ZTgvMHg4NDAgW214c19kY3BdKQo+IFsgICA2OS4x MDgxMTddIFs8YmYxMDQwNmM+XSAoZGNwX2NoYW5fdGhyZWFkX2FlcyBbbXhzX2RjcF0pIGZyb20g WzxjMDE0MGQxYz5dCj4gKGt0aHJlYWQrMHgxMzQvMHgxNjApCj4gWyAgIDY5LjExNjk0MV0gWzxj MDE0MGQxYz5dIChrdGhyZWFkKSBmcm9tIFs8YzAxMDAxMTQ+XQo+IChyZXRfZnJvbV9mb3JrKzB4 MTQvMHgyMCkKPiBbICAgNjkuMTI0MTc4XSBFeGNlcHRpb24gc3RhY2soMHhjMmNiYmZiMCB0byAw eGMyY2JiZmY4KQo+IFsgICA2OS4xMjkyNTBdIGJmYTA6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAwMDAwMDAwIDAwMDAwMDAwCj4gMDAwMDAwMDAgMDAwMDAwMDAKPiBbICAg NjkuMTM3NDUwXSBiZmMwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAw MDAwMCAwMDAwMDAwMAo+IDAwMDAwMDAwIDAwMDAwMDAwCj4gWyAgIDY5LjE0NTY0OF0gYmZlMDog MDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMTMgMDAwMDAwMDAKPiBb ICAgNjkuMTUyMjg5XSBDb2RlOiBlMzIwZjAwMCBlNDgwMzAwNCBlNDgwNDAwNCBlNDgwNTAwNCAo ZTQ4MDYwMDQpCj4gCj4gU2lnbmVkLW9mZi1ieTogU2VhbiBBbmRlcnNvbiA8c2Vhbi5hbmRlcnNv bkBzZWNvLmNvbT4KPiAtLS0KPiAKPiBDaGFuZ2VzIGluIHYyOgo+IC0gRml4IHdhcm5pbmcgd2hl biB0YWtpbmcgdGhlIG1pbmltdW0gb2YgYSB1MzIgYW5kIGEgc2l6ZV90Cj4gLSBVc2Ugc2dfcGNv cHlfZnJvbV9idWZmZXIgdG8gcHJvcGVybHkgZGVhbCB3aXRoIHBhcnRpYWwgcmVhZHMuCj4gCj4g ZHJpdmVycy9jcnlwdG8vbXhzLWRjcC5jIHwgMzYgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL214cy1kY3AuYyBiL2RyaXZlcnMv Y3J5cHRvL214cy1kY3AuYwo+IGluZGV4IGYzOTdjYzViZjEwMi4uZDE5ZTVmZmI1MTA0IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL214cy1kY3AuYwo+ICsrKyBiL2RyaXZlcnMvY3J5cHRv L214cy1kY3AuYwo+IEBAIC0zMDAsMjEgKzMwMCwyMCBAQCBzdGF0aWMgaW50IG14c19kY3BfYWVz X2Jsb2NrX2NyeXB0KHN0cnVjdAo+IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcnEpCj4gCj4gCXN0 cnVjdCBzY2F0dGVybGlzdCAqZHN0ID0gcmVxLT5kc3Q7Cj4gCXN0cnVjdCBzY2F0dGVybGlzdCAq c3JjID0gcmVxLT5zcmM7Cj4gLQljb25zdCBpbnQgbmVudHMgPSBzZ19uZW50cyhyZXEtPnNyYyk7 Cj4gKwlpbnQgZHN0X25lbnRzID0gc2dfbmVudHMoZHN0KTsKPiAKPiAJY29uc3QgaW50IG91dF9v ZmYgPSBEQ1BfQlVGX1NaOwo+IAl1aW50OF90ICppbl9idWYgPSBzZGNwLT5jb2gtPmFlc19pbl9i dWY7Cj4gCXVpbnQ4X3QgKm91dF9idWYgPSBzZGNwLT5jb2gtPmFlc19vdXRfYnVmOwo+IAo+IC0J dWludDhfdCAqb3V0X3RtcCwgKnNyY19idWYsICpkc3RfYnVmID0gTlVMTDsKPiAJdWludDMyX3Qg ZHN0X29mZiA9IDA7Cj4gKwl1aW50OF90ICpzcmNfYnVmID0gTlVMTDsKPiAJdWludDMyX3QgbGFz dF9vdXRfbGVuID0gMDsKPiAKPiAJdWludDhfdCAqa2V5ID0gc2RjcC0+Y29oLT5hZXNfa2V5Owo+ IAo+IAlpbnQgcmV0ID0gMDsKPiAtCWludCBzcGxpdCA9IDA7Cj4gLQl1bnNpZ25lZCBpbnQgaSwg bGVuLCBjbGVuLCByZW0gPSAwLCB0bGVuID0gMDsKPiArCXVuc2lnbmVkIGludCBpLCBsZW4sIGNs ZW4sIHRsZW4gPSAwOwo+IAlpbnQgaW5pdCA9IDA7Cj4gCWJvb2wgbGltaXRfaGl0ID0gZmFsc2U7 Cj4gCj4gQEAgLTMzMiw3ICszMzEsNyBAQCBzdGF0aWMgaW50IG14c19kY3BfYWVzX2Jsb2NrX2Ny eXB0KHN0cnVjdAo+IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcnEpCj4gCQltZW1zZXQoa2V5ICsg QUVTX0tFWVNJWkVfMTI4LCAwLCBBRVNfS0VZU0laRV8xMjgpOwo+IAl9Cj4gCj4gLQlmb3JfZWFj aF9zZyhyZXEtPnNyYywgc3JjLCBuZW50cywgaSkgewo+ICsJZm9yX2VhY2hfc2cocmVxLT5zcmMs IHNyYywgc2dfbmVudHMoc3JjKSwgaSkgewo+IAkJc3JjX2J1ZiA9IHNnX3ZpcnQoc3JjKTsKPiAJ CWxlbiA9IHNnX2RtYV9sZW4oc3JjKTsKPiAJCXRsZW4gKz0gbGVuOwo+IEBAIC0zNTcsMzQgKzM1 NiwxNyBAQCBzdGF0aWMgaW50IG14c19kY3BfYWVzX2Jsb2NrX2NyeXB0KHN0cnVjdAo+IGNyeXB0 b19hc3luY19yZXF1ZXN0ICphcnEpCj4gCQkJICogc3VibWl0IHRoZSBidWZmZXIuCj4gCQkJICov Cj4gCQkJaWYgKGFjdHgtPmZpbGwgPT0gb3V0X29mZiB8fCBzZ19pc19sYXN0KHNyYykgfHwKPiAt CQkJCWxpbWl0X2hpdCkgewo+ICsJCQkgICAgbGltaXRfaGl0KSB7Cj4gCQkJCXJldCA9IG14c19k Y3BfcnVuX2FlcyhhY3R4LCByZXEsIGluaXQpOwo+IAkJCQlpZiAocmV0KQo+IAkJCQkJcmV0dXJu IHJldDsKPiAJCQkJaW5pdCA9IDA7Cj4gCj4gLQkJCQlvdXRfdG1wID0gb3V0X2J1ZjsKPiArCQkJ CXNnX3Bjb3B5X2Zyb21fYnVmZmVyKGRzdCwgZHN0X25lbnRzLCBvdXRfYnVmLAo+ICsJCQkJCQkg ICAgIGFjdHgtPmZpbGwsIGRzdF9vZmYpOwo+ICsJCQkJZHN0X29mZiArPSBhY3R4LT5maWxsOwo+ IAkJCQlsYXN0X291dF9sZW4gPSBhY3R4LT5maWxsOwo+IC0JCQkJd2hpbGUgKGRzdCAmJiBhY3R4 LT5maWxsKSB7Cj4gLQkJCQkJaWYgKCFzcGxpdCkgewo+IC0JCQkJCQlkc3RfYnVmID0gc2dfdmly dChkc3QpOwo+IC0JCQkJCQlkc3Rfb2ZmID0gMDsKPiAtCQkJCQl9Cj4gLQkJCQkJcmVtID0gbWlu KHNnX2RtYV9sZW4oZHN0KSAtIGRzdF9vZmYsCj4gLQkJCQkJCSAgYWN0eC0+ZmlsbCk7Cj4gLQo+ IC0JCQkJCW1lbWNweShkc3RfYnVmICsgZHN0X29mZiwgb3V0X3RtcCwgcmVtKTsKPiAtCQkJCQlv dXRfdG1wICs9IHJlbTsKPiAtCQkJCQlkc3Rfb2ZmICs9IHJlbTsKPiAtCQkJCQlhY3R4LT5maWxs IC09IHJlbTsKPiAtCj4gLQkJCQkJaWYgKGRzdF9vZmYgPT0gc2dfZG1hX2xlbihkc3QpKSB7Cj4g LQkJCQkJCWRzdCA9IHNnX25leHQoZHN0KTsKPiAtCQkJCQkJc3BsaXQgPSAwOwo+IC0JCQkJCX0g ZWxzZSB7Cj4gLQkJCQkJCXNwbGl0ID0gMTsKPiAtCQkJCQl9Cj4gLQkJCQl9Cj4gKwkJCQlhY3R4 LT5maWxsID0gMDsKPiAJCQl9Cj4gCQl9IHdoaWxlIChsZW4pOwo+IAo+IC0tCj4gMi4yNS4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==