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 445E2C11F64 for ; Thu, 1 Jul 2021 19:59:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1C2D361406 for ; Thu, 1 Jul 2021 19:59:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230139AbhGAUBp convert rfc822-to-8bit (ORCPT ); Thu, 1 Jul 2021 16:01:45 -0400 Received: from lithops.sigma-star.at ([195.201.40.130]:50622 "EHLO lithops.sigma-star.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229894AbhGAUBo (ORCPT ); Thu, 1 Jul 2021 16:01:44 -0400 Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 1942460A59C3; Thu, 1 Jul 2021 21:59:13 +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 FoQFlT8xppKX; Thu, 1 Jul 2021 21:59:12 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 805066108478; Thu, 1 Jul 2021 21:59:12 +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 f_EY7arTg1CS; Thu, 1 Jul 2021 21:59:12 +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 633BC610846D; Thu, 1 Jul 2021 21:59:12 +0200 (CEST) Date: Thu, 1 Jul 2021 21:59:12 +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 Message-ID: <668688914.13281.1625169552349.JavaMail.zimbra@nod.at> In-Reply-To: <20210701185638.3437487-2-sean.anderson@seco.com> References: <20210701185638.3437487-1-sean.anderson@seco.com> <20210701185638.3437487-2-sean.anderson@seco.com> Subject: Re: [PATCH v2 1/2] crypto: mxs-dcp: Check for DMA mapping errors 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: Check for DMA mapping errors Thread-Index: Frt7LHYmwPo69SYeE5SlEF4En5NW4w== 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:37 > Betreff: [PATCH v2 1/2] crypto: mxs-dcp: Check for DMA mapping errors > After calling dma_map_single(), we must also call dma_mapping_error(). > This fixes the following warning when compiling with CONFIG_DMA_API_DEBUG: > > [ 311.241478] WARNING: CPU: 0 PID: 428 at kernel/dma/debug.c:1027 > check_unmap+0x79c/0x96c > [ 311.249547] DMA-API: mxs-dcp 2280000.crypto: device driver failed to check > map error[device address=0x00000000860cb080] [size=32 bytes] [mapped as single] > > Signed-off-by: Sean Anderson > --- > > (no changes since v1) > > drivers/crypto/mxs-dcp.c | 45 +++++++++++++++++++++++++++++++--------- > 1 file changed, 35 insertions(+), 10 deletions(-) > > diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c > index d6a7784d2988..f397cc5bf102 100644 > --- a/drivers/crypto/mxs-dcp.c > +++ b/drivers/crypto/mxs-dcp.c > @@ -170,15 +170,19 @@ static struct dcp *global_sdcp; > > static int mxs_dcp_start_dma(struct dcp_async_ctx *actx) > { > + int dma_err; > struct dcp *sdcp = global_sdcp; > const int chan = actx->chan; > uint32_t stat; > unsigned long ret; > struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; > - > dma_addr_t desc_phys = dma_map_single(sdcp->dev, desc, sizeof(*desc), > DMA_TO_DEVICE); > > + dma_err = dma_mapping_error(sdcp->dev, desc_phys); > + if (dma_err) > + return dma_err; > + Minor nit, you don't need to propagate the return code from dma_mapping_error(). It just returns 0 for success and -ENOMEM on failure. So treating it as boolean function is fine, IMHO and keeps the code simpler. But it is a matter of taste. :-) > reinit_completion(&sdcp->completion[chan]); > > /* Clear status register. */ > @@ -216,18 +220,29 @@ static int mxs_dcp_start_dma(struct dcp_async_ctx *actx) > static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, > struct skcipher_request *req, int init) > { > + dma_addr_t key_phys, src_phys, dst_phys; > struct dcp *sdcp = global_sdcp; > struct dcp_dma_desc *desc = &sdcp->coh->desc[actx->chan]; > 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, > - 2 * AES_KEYSIZE_128, > - DMA_TO_DEVICE); > - dma_addr_t src_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_in_buf, > - DCP_BUF_SZ, DMA_TO_DEVICE); > - dma_addr_t dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, > - DCP_BUF_SZ, DMA_FROM_DEVICE); > + key_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_key, > + 2 * AES_KEYSIZE_128, DMA_TO_DEVICE); > + ret = dma_mapping_error(sdcp->dev, key_phys); > + if (ret) > + return ret; > + > + src_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_in_buf, > + DCP_BUF_SZ, DMA_TO_DEVICE); > + ret = dma_mapping_error(sdcp->dev, src_phys); > + if (ret) > + goto err_src; > + > + dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf, > + DCP_BUF_SZ, DMA_FROM_DEVICE); > + ret = dma_mapping_error(sdcp->dev, dst_phys); > + if (ret) > + goto err_dst; > > if (actx->fill % AES_BLOCK_SIZE) { > dev_err(sdcp->dev, "Invalid block size!\n"); > @@ -265,10 +280,12 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx, > ret = mxs_dcp_start_dma(actx); > > aes_done_run: > + dma_unmap_single(sdcp->dev, dst_phys, DCP_BUF_SZ, DMA_FROM_DEVICE); > +err_dst: > + dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); > +err_src: > dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128, > DMA_TO_DEVICE); > - dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE); > - dma_unmap_single(sdcp->dev, dst_phys, DCP_BUF_SZ, DMA_FROM_DEVICE); > > return ret; > } > @@ -557,6 +574,10 @@ static int mxs_dcp_run_sha(struct ahash_request *req) > dma_addr_t buf_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_in_buf, > DCP_BUF_SZ, DMA_TO_DEVICE); > > + ret = dma_mapping_error(sdcp->dev, buf_phys); > + if (ret) > + return ret; > + > /* Fill in the DMA descriptor. */ > desc->control0 = MXS_DCP_CONTROL0_DECR_SEMAPHORE | > MXS_DCP_CONTROL0_INTERRUPT | > @@ -589,6 +610,10 @@ static int mxs_dcp_run_sha(struct ahash_request *req) > if (rctx->fini) { > digest_phys = dma_map_single(sdcp->dev, sdcp->coh->sha_out_buf, > DCP_SHA_PAY_SZ, DMA_FROM_DEVICE); > + ret = dma_mapping_error(sdcp->dev, digest_phys); > + if (ret) > + goto done_run; > + > desc->control0 |= MXS_DCP_CONTROL0_HASH_TERM; > desc->payload = digest_phys; > } Reviewed-by: Richard Weinberger Thanks, //richard 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 898BDC11F67 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 518886138C for ; Thu, 1 Jul 2021 20:01:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 518886138C 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=WUYC74sznAk+hkOVCqCPjTufZFbfTpU//ujkmP5rKVU=; b=HQiHRtEHaAApK3t4WS3IBpaExm QtBGIZyoMKVpnaebJX/XGKOkKpoP6i9mIpb+1BghRSY/ZEUyJfo+PinzzeZ1LzzR9E6XEyAzXmGzr NOGSRthxBkN/cyjM9z+fXQUqfDicHRW0sA03gyrsNzKAXdkbpf3fcYdV+3t1hR4T+B4TaBD4euwFg X5mwGTWsHNnfHAWKffJwwrQwdguk38CKpqCUy5hWbKkxocQO5QfYDwcx0/VVLtRZdR4xA4jMmZ+vw p6pVHLSzXpp7nWs44T/2neF9KzFUU5gc32kSC0E5aX0njOpCf34q7CTelB/B/rJkqFPDXQ4h5HAcS vbQADWZA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lz2qG-000x08-9h; Thu, 01 Jul 2021 19:59:20 +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 1lz2qA-000wyp-AO for linux-arm-kernel@lists.infradead.org; Thu, 01 Jul 2021 19:59:16 +0000 Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 1942460A59C3; Thu, 1 Jul 2021 21:59:13 +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 FoQFlT8xppKX; Thu, 1 Jul 2021 21:59:12 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 805066108478; Thu, 1 Jul 2021 21:59:12 +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 f_EY7arTg1CS; Thu, 1 Jul 2021 21:59:12 +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 633BC610846D; Thu, 1 Jul 2021 21:59:12 +0200 (CEST) Date: Thu, 1 Jul 2021 21:59:12 +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 Message-ID: <668688914.13281.1625169552349.JavaMail.zimbra@nod.at> In-Reply-To: <20210701185638.3437487-2-sean.anderson@seco.com> References: <20210701185638.3437487-1-sean.anderson@seco.com> <20210701185638.3437487-2-sean.anderson@seco.com> Subject: Re: [PATCH v2 1/2] crypto: mxs-dcp: Check for DMA mapping errors 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: Check for DMA mapping errors Thread-Index: Frt7LHYmwPo69SYeE5SlEF4En5NW4w== X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210701_125914_720898_E904AF22 X-CRM114-Status: GOOD ( 15.56 ) 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 OjM3Cj4gQmV0cmVmZjogW1BBVENIIHYyIDEvMl0gY3J5cHRvOiBteHMtZGNwOiBDaGVjayBmb3Ig RE1BIG1hcHBpbmcgZXJyb3JzCgo+IEFmdGVyIGNhbGxpbmcgZG1hX21hcF9zaW5nbGUoKSwgd2Ug bXVzdCBhbHNvIGNhbGwgZG1hX21hcHBpbmdfZXJyb3IoKS4KPiBUaGlzIGZpeGVzIHRoZSBmb2xs b3dpbmcgd2FybmluZyB3aGVuIGNvbXBpbGluZyB3aXRoIENPTkZJR19ETUFfQVBJX0RFQlVHOgo+ IAo+IFsgIDMxMS4yNDE0NzhdIFdBUk5JTkc6IENQVTogMCBQSUQ6IDQyOCBhdCBrZXJuZWwvZG1h L2RlYnVnLmM6MTAyNwo+IGNoZWNrX3VubWFwKzB4NzljLzB4OTZjCj4gWyAgMzExLjI0OTU0N10g RE1BLUFQSTogbXhzLWRjcCAyMjgwMDAwLmNyeXB0bzogZGV2aWNlIGRyaXZlciBmYWlsZWQgdG8g Y2hlY2sKPiBtYXAgZXJyb3JbZGV2aWNlIGFkZHJlc3M9MHgwMDAwMDAwMDg2MGNiMDgwXSBbc2l6 ZT0zMiBieXRlc10gW21hcHBlZCBhcyBzaW5nbGVdCj4gCj4gU2lnbmVkLW9mZi1ieTogU2VhbiBB bmRlcnNvbiA8c2Vhbi5hbmRlcnNvbkBzZWNvLmNvbT4KPiAtLS0KPiAKPiAobm8gY2hhbmdlcyBz aW5jZSB2MSkKPiAKPiBkcml2ZXJzL2NyeXB0by9teHMtZGNwLmMgfCA0NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCj4gMSBmaWxlIGNoYW5nZWQsIDM1IGluc2VydGlv bnMoKyksIDEwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9t eHMtZGNwLmMgYi9kcml2ZXJzL2NyeXB0by9teHMtZGNwLmMKPiBpbmRleCBkNmE3Nzg0ZDI5ODgu LmYzOTdjYzViZjEwMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2NyeXB0by9teHMtZGNwLmMKPiAr KysgYi9kcml2ZXJzL2NyeXB0by9teHMtZGNwLmMKPiBAQCAtMTcwLDE1ICsxNzAsMTkgQEAgc3Rh dGljIHN0cnVjdCBkY3AgKmdsb2JhbF9zZGNwOwo+IAo+IHN0YXRpYyBpbnQgbXhzX2RjcF9zdGFy dF9kbWEoc3RydWN0IGRjcF9hc3luY19jdHggKmFjdHgpCj4gewo+ICsJaW50IGRtYV9lcnI7Cj4g CXN0cnVjdCBkY3AgKnNkY3AgPSBnbG9iYWxfc2RjcDsKPiAJY29uc3QgaW50IGNoYW4gPSBhY3R4 LT5jaGFuOwo+IAl1aW50MzJfdCBzdGF0Owo+IAl1bnNpZ25lZCBsb25nIHJldDsKPiAJc3RydWN0 IGRjcF9kbWFfZGVzYyAqZGVzYyA9ICZzZGNwLT5jb2gtPmRlc2NbYWN0eC0+Y2hhbl07Cj4gLQo+ IAlkbWFfYWRkcl90IGRlc2NfcGh5cyA9IGRtYV9tYXBfc2luZ2xlKHNkY3AtPmRldiwgZGVzYywg c2l6ZW9mKCpkZXNjKSwKPiAJCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwo+IAo+ICsJZG1hX2Vy ciA9IGRtYV9tYXBwaW5nX2Vycm9yKHNkY3AtPmRldiwgZGVzY19waHlzKTsKPiArCWlmIChkbWFf ZXJyKQo+ICsJCXJldHVybiBkbWFfZXJyOwo+ICsKCk1pbm9yIG5pdCwgeW91IGRvbid0IG5lZWQg dG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gY29kZSBmcm9tIGRtYV9tYXBwaW5nX2Vycm9yKCkuCkl0 IGp1c3QgcmV0dXJucyAwIGZvciBzdWNjZXNzIGFuZCAtRU5PTUVNIG9uIGZhaWx1cmUuClNvIHRy ZWF0aW5nIGl0IGFzIGJvb2xlYW4gZnVuY3Rpb24gaXMgZmluZSwgSU1ITyBhbmQga2VlcHMgdGhl IGNvZGUgc2ltcGxlci4KQnV0IGl0IGlzIGEgbWF0dGVyIG9mIHRhc3RlLiA6LSkKCj4gCXJlaW5p dF9jb21wbGV0aW9uKCZzZGNwLT5jb21wbGV0aW9uW2NoYW5dKTsKPiAKPiAJLyogQ2xlYXIgc3Rh dHVzIHJlZ2lzdGVyLiAqLwo+IEBAIC0yMTYsMTggKzIyMCwyOSBAQCBzdGF0aWMgaW50IG14c19k Y3Bfc3RhcnRfZG1hKHN0cnVjdCBkY3BfYXN5bmNfY3R4ICphY3R4KQo+IHN0YXRpYyBpbnQgbXhz X2RjcF9ydW5fYWVzKHN0cnVjdCBkY3BfYXN5bmNfY3R4ICphY3R4LAo+IAkJCSAgIHN0cnVjdCBz a2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGludCBpbml0KQo+IHsKPiArCWRtYV9hZGRyX3Qga2V5X3Bo eXMsIHNyY19waHlzLCBkc3RfcGh5czsKPiAJc3RydWN0IGRjcCAqc2RjcCA9IGdsb2JhbF9zZGNw Owo+IAlzdHJ1Y3QgZGNwX2RtYV9kZXNjICpkZXNjID0gJnNkY3AtPmNvaC0+ZGVzY1thY3R4LT5j aGFuXTsKPiAJc3RydWN0IGRjcF9hZXNfcmVxX2N0eCAqcmN0eCA9IHNrY2lwaGVyX3JlcXVlc3Rf Y3R4KHJlcSk7Cj4gCWludCByZXQ7Cj4gCj4gLQlkbWFfYWRkcl90IGtleV9waHlzID0gZG1hX21h cF9zaW5nbGUoc2RjcC0+ZGV2LCBzZGNwLT5jb2gtPmFlc19rZXksCj4gLQkJCQkJICAgICAyICog QUVTX0tFWVNJWkVfMTI4LAo+IC0JCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7Cj4gLQlkbWFfYWRk cl90IHNyY19waHlzID0gZG1hX21hcF9zaW5nbGUoc2RjcC0+ZGV2LCBzZGNwLT5jb2gtPmFlc19p bl9idWYsCj4gLQkJCQkJICAgICBEQ1BfQlVGX1NaLCBETUFfVE9fREVWSUNFKTsKPiAtCWRtYV9h ZGRyX3QgZHN0X3BoeXMgPSBkbWFfbWFwX3NpbmdsZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+YWVz X291dF9idWYsCj4gLQkJCQkJICAgICBEQ1BfQlVGX1NaLCBETUFfRlJPTV9ERVZJQ0UpOwo+ICsJ a2V5X3BoeXMgPSBkbWFfbWFwX3NpbmdsZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+YWVzX2tleSwK PiArCQkJCSAgMiAqIEFFU19LRVlTSVpFXzEyOCwgRE1BX1RPX0RFVklDRSk7Cj4gKwlyZXQgPSBk bWFfbWFwcGluZ19lcnJvcihzZGNwLT5kZXYsIGtleV9waHlzKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwlzcmNfcGh5cyA9IGRtYV9tYXBfc2luZ2xlKHNkY3AtPmRldiwg c2RjcC0+Y29oLT5hZXNfaW5fYnVmLAo+ICsJCQkJICBEQ1BfQlVGX1NaLCBETUFfVE9fREVWSUNF KTsKPiArCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKHNkY3AtPmRldiwgc3JjX3BoeXMpOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGVycl9zcmM7Cj4gKwo+ICsJZHN0X3BoeXMgPSBkbWFfbWFwX3Np bmdsZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+YWVzX291dF9idWYsCj4gKwkJCQkgIERDUF9CVUZf U1osIERNQV9GUk9NX0RFVklDRSk7Cj4gKwlyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihzZGNwLT5k ZXYsIGRzdF9waHlzKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZHN0Owo+IAo+IAlpZiAo YWN0eC0+ZmlsbCAlIEFFU19CTE9DS19TSVpFKSB7Cj4gCQlkZXZfZXJyKHNkY3AtPmRldiwgIklu dmFsaWQgYmxvY2sgc2l6ZSFcbiIpOwo+IEBAIC0yNjUsMTAgKzI4MCwxMiBAQCBzdGF0aWMgaW50 IG14c19kY3BfcnVuX2FlcyhzdHJ1Y3QgZGNwX2FzeW5jX2N0eCAqYWN0eCwKPiAJcmV0ID0gbXhz X2RjcF9zdGFydF9kbWEoYWN0eCk7Cj4gCj4gYWVzX2RvbmVfcnVuOgo+ICsJZG1hX3VubWFwX3Np bmdsZShzZGNwLT5kZXYsIGRzdF9waHlzLCBEQ1BfQlVGX1NaLCBETUFfRlJPTV9ERVZJQ0UpOwo+ ICtlcnJfZHN0Ogo+ICsJZG1hX3VubWFwX3NpbmdsZShzZGNwLT5kZXYsIHNyY19waHlzLCBEQ1Bf QlVGX1NaLCBETUFfVE9fREVWSUNFKTsKPiArZXJyX3NyYzoKPiAJZG1hX3VubWFwX3NpbmdsZShz ZGNwLT5kZXYsIGtleV9waHlzLCAyICogQUVTX0tFWVNJWkVfMTI4LAo+IAkJCSBETUFfVE9fREVW SUNFKTsKPiAtCWRtYV91bm1hcF9zaW5nbGUoc2RjcC0+ZGV2LCBzcmNfcGh5cywgRENQX0JVRl9T WiwgRE1BX1RPX0RFVklDRSk7Cj4gLQlkbWFfdW5tYXBfc2luZ2xlKHNkY3AtPmRldiwgZHN0X3Bo eXMsIERDUF9CVUZfU1osIERNQV9GUk9NX0RFVklDRSk7Cj4gCj4gCXJldHVybiByZXQ7Cj4gfQo+ IEBAIC01NTcsNiArNTc0LDEwIEBAIHN0YXRpYyBpbnQgbXhzX2RjcF9ydW5fc2hhKHN0cnVjdCBh aGFzaF9yZXF1ZXN0ICpyZXEpCj4gCWRtYV9hZGRyX3QgYnVmX3BoeXMgPSBkbWFfbWFwX3Npbmds ZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+c2hhX2luX2J1ZiwKPiAJCQkJCSAgICAgRENQX0JVRl9T WiwgRE1BX1RPX0RFVklDRSk7Cj4gCj4gKwlyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihzZGNwLT5k ZXYsIGJ1Zl9waHlzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gCS8qIEZp bGwgaW4gdGhlIERNQSBkZXNjcmlwdG9yLiAqLwo+IAlkZXNjLT5jb250cm9sMCA9IE1YU19EQ1Bf Q09OVFJPTDBfREVDUl9TRU1BUEhPUkUgfAo+IAkJICAgIE1YU19EQ1BfQ09OVFJPTDBfSU5URVJS VVBUIHwKPiBAQCAtNTg5LDYgKzYxMCwxMCBAQCBzdGF0aWMgaW50IG14c19kY3BfcnVuX3NoYShz dHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQo+IAlpZiAocmN0eC0+ZmluaSkgewo+IAkJZGlnZXN0 X3BoeXMgPSBkbWFfbWFwX3NpbmdsZShzZGNwLT5kZXYsIHNkY3AtPmNvaC0+c2hhX291dF9idWYs Cj4gCQkJCQkgICAgIERDUF9TSEFfUEFZX1NaLCBETUFfRlJPTV9ERVZJQ0UpOwo+ICsJCXJldCA9 IGRtYV9tYXBwaW5nX2Vycm9yKHNkY3AtPmRldiwgZGlnZXN0X3BoeXMpOwo+ICsJCWlmIChyZXQp Cj4gKwkJCWdvdG8gZG9uZV9ydW47Cj4gKwo+IAkJZGVzYy0+Y29udHJvbDAgfD0gTVhTX0RDUF9D T05UUk9MMF9IQVNIX1RFUk07Cj4gCQlkZXNjLT5wYXlsb2FkID0gZGlnZXN0X3BoeXM7Cj4gCX0K ClJldmlld2VkLWJ5OiBSaWNoYXJkIFdlaW5iZXJnZXIgPHJpY2hhcmRAbm9kLmF0PgoKVGhhbmtz LAovL3JpY2hhcmQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK