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=-23.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 51514C433B4 for ; Fri, 7 May 2021 07:00:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 126C7613D6 for ; Fri, 7 May 2021 07:00:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235034AbhEGHBm (ORCPT ); Fri, 7 May 2021 03:01:42 -0400 Received: from linux.microsoft.com ([13.77.154.182]:44780 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231355AbhEGHBi (ORCPT ); Fri, 7 May 2021 03:01:38 -0400 Received: from minint-m3g9p8n.europe.corp.microsoft.com (unknown [49.207.195.141]) by linux.microsoft.com (Postfix) with ESMTPSA id 5829E20B7178; Fri, 7 May 2021 00:00:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5829E20B7178 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1620370839; bh=juupss22foYcpZymKqUksNf88DXt4O8bI54oKjTR0n0=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=SgEaDOIrDrLcHRtsDBjt4RVrhDZ/e6wH8+LXCy+JMPTK09FJu+/eZTYb0SroIGaZ/ mqolOktnY9YRGlcjr43R4EiHJ4v6ccX2vLFYFFfVSEVHGC/HCzYO3oOulTeqWhFNB6 fcORXmQkpKr5jdIF7e0SKX6IQbtgoSKnwP6CPNh0= Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Subject: Re: [PATCH] optee: Disable shm cache when booting the crash kernel From: Allen Pais In-Reply-To: <20210507035816.426585-1-tyhicks@linux.microsoft.com> Date: Fri, 7 May 2021 12:30:33 +0530 Cc: jens.wiklander@linaro.org, zajec5@gmail.com, Allen Pais , bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org Content-Transfer-Encoding: quoted-printable Message-Id: <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210507035816.426585-1-tyhicks@linux.microsoft.com> To: Tyler Hicks X-Mailer: Apple Mail (2.3654.60.0.2.21) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On 07-May-2021, at 9:28 AM, Tyler Hicks = wrote: >=20 > The .shutdown hook is not called after a kernel crash when a kdump > kernel is pre-loaded. A kexec into the kdump kernel takes place as > quickly as possible without allowing drivers to clean up. >=20 > That means that the OP-TEE shared memory cache, which was initialized = by > the kernel that crashed, is still in place when the kdump kernel is > booted. As the kdump kernel is shutdown, the .shutdown hook is called, > which calls optee_disable_shm_cache(), and OP-TEE's > OPTEE_SMC_DISABLE_SHM_CACHE API returns virtual addresses that are not > mapped for the kdump kernel since the cache was set up by the previous > kernel. Trying to dereference the tee_shm pointer or otherwise = translate > the address results in a fault that cannot be handled: >=20 > Unable to handle kernel paging request at virtual address = ffff4317b9c09744 > Mem abort info: > ESR =3D 0x96000004 > EC =3D 0x25: DABT (current EL), IL =3D 32 bits > SET =3D 0, FnV =3D 0 > EA =3D 0, S1PTW =3D 0 > Data abort info: > ISV =3D 0, ISS =3D 0x00000004 > CM =3D 0, WnR =3D 0 > swapper pgtable: 4k pages, 48-bit VAs, pgdp=3D0000000970b1e000 > [ffff4317b9c09744] pgd=3D0000000000000000, p4d=3D0000000000000000 > Internal error: Oops: 96000004 [#1] SMP > Modules linked in: bnxt_en pcie_iproc_platform pcie_iproc diagbe(O) > CPU: 4 PID: 1 Comm: systemd-shutdow Tainted: G O = 5.10.19.8 #1 > Hardware name: Redacted (DT) > pstate: 60400005 (nZCv daif +PAN -UAO -TCO BTYPE=3D--) > pc : tee_shm_free (/usr/src/kernel/drivers/tee/tee_shm.c:363) > lr : optee_disable_shm_cache = (/usr/src/kernel/drivers/tee/optee/call.c:441) > sp : ffff80001005bb70 > x29: ffff80001005bb70 x28: ffff608e74648e00 > x27: ffff80001005bb98 x26: dead000000000100 > x25: ffff80001005bbb8 x24: aaaaaaaaaaaaaaaa > x23: ffff608e74cf8818 x22: ffff608e738be600 > x21: ffff80001005bbc8 x20: ffff608e738be638 > x19: ffff4317b9c09700 x18: ffffffffffffffff > x17: 0000000000000041 x16: ffffba61b5171764 > x15: 0000000000000004 x14: 0000000000000fff > x13: ffffba61b5c9dfc8 x12: 0000000000000003 > x11: 0000000000000000 x10: 0000000000000000 > x9 : ffffba61b5413824 x8 : 00000000ffff4317 > x7 : 0000000000000000 x6 : 0000000000000000 > x5 : 0000000000000000 x4 : 0000000000000000 > x3 : 0000000000000000 x2 : ffff4317b9c09700 > x1 : 00000000ffff4317 x0 : ffff4317b9c09700 > Call trace: > tee_shm_free (/usr/src/kernel/drivers/tee/tee_shm.c:363) > optee_disable_shm_cache (/usr/src/kernel/drivers/tee/optee/call.c:441) > optee_shutdown (/usr/src/kernel/drivers/tee/optee/core.c:636) > platform_drv_shutdown (/usr/src/kernel/drivers/base/platform.c:800) > device_shutdown (/usr/src/kernel/include/linux/device.h:758 = /usr/src/kernel/drivers/base/core.c:4078) > kernel_restart (/usr/src/kernel/kernel/reboot.c:221 = /usr/src/kernel/kernel/reboot.c:248) > __arm64_sys_reboot (/usr/src/kernel/kernel/reboot.c:349 = /usr/src/kernel/kernel/reboot.c:312 /usr/src/kernel/kernel/reboot.c:312) > do_el0_svc (/usr/src/kernel/arch/arm64/kernel/syscall.c:56 = /usr/src/kernel/arch/arm64/kernel/syscall.c:158 = /usr/src/kernel/arch/arm64/kernel/syscall.c:197) > el0_svc (/usr/src/kernel/arch/arm64/kernel/entry-common.c:368) > el0_sync_handler = (/usr/src/kernel/arch/arm64/kernel/entry-common.c:428) > el0_sync (/usr/src/kernel/arch/arm64/kernel/entry.S:671) > Code: aa0003f3 b5000060 12800003 14000002 (b9404663) >=20 > When booting the kdump kernel, drain the shared memory cache while = being > careful to not translate the addresses returned from > OPTEE_SMC_DISABLE_SHM_CACHE. Once the invalid cache objects are = drained > and the cache is disabled, proceed with re-enabling the cache so that = we > aren't dealing with invalid addresses while shutting down the kdump > kernel. >=20 > Signed-off-by: Tyler Hicks > --- >=20 > This patch fixes a crash introduced by "optee: fix tee out of memory > failure seen during kexec reboot"[1]. However, I don't think that the > original two patch series[2] plus this patch is the full solution to > properly handling OP-TEE shared memory across kexec. >=20 > While testing this fix, I did about 10 kexec reboots and then = triggered > a kernel crash by writing 'c' to /proc/sysrq-trigger. The kdump kernel > became unresponsive during boot while steadily streaming the following > errors to the serial console: >=20 > arm-smmu 64000000.mmu: Blocked unknown Stream ID 0x2000; boot with = "arm-smmu.disable_bypass=3D0" to allow, but this may have security = implications > arm-smmu 64000000.mmu: GFSR 0x00000002, GFSYNR0 0x00000002, = GFSYNR1 0x00002000, GFSYNR2 0x00000000 >=20 > I suspect that this is related to the problems of OP-TEE shared memory > handling across kexec. My current hunch is that while we've disabled = the > shared memory cache with this patch, we haven't unregistered all of = the > addresses that the previous kernel (which crashed) had registered with > OP-TEE and that perhaps OP-TEE OS is still trying to make use those > addresses? >=20 > I'm still pretty early in investigating that assumption and > I'm learning about OP-TEE as I go but I wanted to get this initial > fix-of-the-fix out so that it was clear that the v2 of the series[2] = is > not complete. >=20 > [1] = https://lore.kernel.org/lkml/20210225090610.242623-2-allen.lkml@gmail.com/= > [2] = https://lore.kernel.org/lkml/20210225090610.242623-1-allen.lkml@gmail.com/= #t >=20 > drivers/tee/optee/call.c | 11 ++++++++++- > drivers/tee/optee/core.c | 13 +++++++++++-- > drivers/tee/optee/optee_private.h | 2 +- > 3 files changed, 22 insertions(+), 4 deletions(-) >=20 > diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c > index 6132cc8d014c..799e84bec63d 100644 > --- a/drivers/tee/optee/call.c > +++ b/drivers/tee/optee/call.c > @@ -417,8 +417,10 @@ void optee_enable_shm_cache(struct optee *optee) > * optee_disable_shm_cache() - Disables caching of some shared memory = allocation > * in OP-TEE > * @optee: main service struct > + * @is_mapped: true if the cached shared memory addresses were = mapped by this > + * kernel, are safe to dereference, and should be freed > */ > -void optee_disable_shm_cache(struct optee *optee) > +void optee_disable_shm_cache(struct optee *optee, bool is_mapped) > { > struct optee_call_waiter w; >=20 > @@ -437,6 +439,13 @@ void optee_disable_shm_cache(struct optee *optee) > if (res.result.status =3D=3D OPTEE_SMC_RETURN_OK) { > struct tee_shm *shm; >=20 Thanks Tyler. =46rom what I understand from my email exchange with Jens, I don=E2=80=99= t Think we want to touch optee_disable_shm_cache(), I could be wrong too, @Jens, comments? > + /* > + * Shared memory references that were not mapped = by > + * this kernel must be ignored to prevent a = crash. > + */ > + if (!is_mapped) > + continue; > + > shm =3D reg_pair_to_ptr(res.result.shm_upper32, > res.result.shm_lower32); > tee_shm_free(shm); > diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c > index 69d1f698907c..9985c671bd1f 100644 > --- a/drivers/tee/optee/core.c > +++ b/drivers/tee/optee/core.c > @@ -6,6 +6,7 @@ > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt >=20 > #include > +#include > #include > #include > #include > @@ -588,7 +589,7 @@ static int optee_remove(struct platform_device = *pdev) > * reference counters and also avoid wild pointers in secure = world > * into the old shared memory range. > */ > - optee_disable_shm_cache(optee); > + optee_disable_shm_cache(optee, true); >=20 > /* > * The two devices have to be unregistered before we can free = the > @@ -618,7 +619,7 @@ static int optee_remove(struct platform_device = *pdev) > */ > static void optee_shutdown(struct platform_device *pdev) > { > - optee_disable_shm_cache(platform_get_drvdata(pdev)); > + optee_disable_shm_cache(platform_get_drvdata(pdev), true); > } >=20 > static int optee_probe(struct platform_device *pdev) > @@ -705,6 +706,14 @@ static int optee_probe(struct platform_device = *pdev) > optee->memremaped_shm =3D memremaped_shm; > optee->pool =3D pool; >=20 > + /* > + * The kexec into the crash kernel did not call our .shutdown = hook. The > + * shm cache objects registered with OP-TEE are not valid for = the crash > + * kernel. > + */ > + if (is_kdump_kernel()) > + optee_disable_shm_cache(optee, false); > + Am glad this solves the kdump crash that we have been seeing. - Allen > optee_enable_shm_cache(optee); >=20 > if (optee->sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) > diff --git a/drivers/tee/optee/optee_private.h = b/drivers/tee/optee/optee_private.h > index e25b216a14ef..16d8c82213e7 100644 > --- a/drivers/tee/optee/optee_private.h > +++ b/drivers/tee/optee/optee_private.h > @@ -158,7 +158,7 @@ int optee_invoke_func(struct tee_context *ctx, = struct tee_ioctl_invoke_arg *arg, > int optee_cancel_req(struct tee_context *ctx, u32 cancel_id, u32 = session); >=20 > void optee_enable_shm_cache(struct optee *optee); > -void optee_disable_shm_cache(struct optee *optee); > +void optee_disable_shm_cache(struct optee *optee, bool is_mapped); >=20 > int optee_shm_register(struct tee_context *ctx, struct tee_shm *shm, > struct page **pages, size_t num_pages, > --=20 > 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.4 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,URIBL_BLOCKED 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 F199CC433B4 for ; Fri, 7 May 2021 07:03:20 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 440DB601FD for ; Fri, 7 May 2021 07:03:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 440DB601FD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.microsoft.com 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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:References:Message-Id:Cc:Date:In-Reply-To:From: Subject:Mime-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xQbwojuDWhGd9cWhMKj1nk7SPO6iRChapC6a5XZn4zI=; b=RwbbihYIccaCEQ1UhuuNrhU/4 u1ooCviWBaE4hzSjqsS+knePc7Pw8Th5yf4tT9eWJaqgvQ0S6MGEHQWgEqRAOgNxpr80CiccZEUdQ m8cUrUXsmtu3Y60O+w7ATPHof6lKao1sP6FgBbI2b9hg6llkF0N0j4fCIH4BIxJVSseBDPIyP0gQa nzEesv4FUztog5kzGKHX+hTMeFo+FpeihPGQVLU+8JiN6PlKv47j8mpo/ymP/3qPCqpo2D0affRoz 5uYrUCdhrw5eWYDBaHsFRKi0eDnni2DNKBPDLrStAS8x4RXrhZG+7EY2PfIuRDWalkdEYWVV+cJNw PaJoRSaFw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leuU8-006KOt-1v; Fri, 07 May 2021 07:01:16 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1leuTg-006KJG-GX for linux-arm-kernel@desiato.infradead.org; Fri, 07 May 2021 07:00:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=To:References:Message-Id: Content-Transfer-Encoding:Cc:Date:In-Reply-To:From:Subject:Mime-Version: Content-Type:Sender:Reply-To:Content-ID:Content-Description; bh=juupss22foYcpZymKqUksNf88DXt4O8bI54oKjTR0n0=; b=T2Piwxxw/olGy37Oc9GuMwzikV W6aKdmpcUdlyzGYZt4R5fm2ev7Tm0upC/3ps4yG3xVzGRVKl3d783h+UlL6V25AtLnirRAuGI9E9J Tjf1TOM8IKFEQOOIyEvBCSRY1niruwCYDRmqsfxMJh2r49oJPqpfv3e8E68dS5ORZjz4BlxDtn3nK 2QW43u0sVZKvCY0JMy3AzEXjJC7P+AKKmxKaHzLvT8YfYazqwus8Nxb6lnIhLp+sPgsG1FWQkMcvM hGzYIm6Nr7NaypQHHa0ojP+bAhl1PbdDrMWo67b/JwKwA8jfdIMTUT3ifduK/49yueqlWxWZjifnK 4LIAf2SQ==; Received: from linux.microsoft.com ([13.77.154.182]) by bombadil.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leuTd-006dWf-59 for linux-arm-kernel@lists.infradead.org; Fri, 07 May 2021 07:00:47 +0000 Received: from minint-m3g9p8n.europe.corp.microsoft.com (unknown [49.207.195.141]) by linux.microsoft.com (Postfix) with ESMTPSA id 5829E20B7178; Fri, 7 May 2021 00:00:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5829E20B7178 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1620370839; bh=juupss22foYcpZymKqUksNf88DXt4O8bI54oKjTR0n0=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=SgEaDOIrDrLcHRtsDBjt4RVrhDZ/e6wH8+LXCy+JMPTK09FJu+/eZTYb0SroIGaZ/ mqolOktnY9YRGlcjr43R4EiHJ4v6ccX2vLFYFFfVSEVHGC/HCzYO3oOulTeqWhFNB6 fcORXmQkpKr5jdIF7e0SKX6IQbtgoSKnwP6CPNh0= Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Subject: Re: [PATCH] optee: Disable shm cache when booting the crash kernel From: Allen Pais In-Reply-To: <20210507035816.426585-1-tyhicks@linux.microsoft.com> Date: Fri, 7 May 2021 12:30:33 +0530 Cc: jens.wiklander@linaro.org, zajec5@gmail.com, Allen Pais , bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org Message-Id: <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210507035816.426585-1-tyhicks@linux.microsoft.com> To: Tyler Hicks X-Mailer: Apple Mail (2.3654.60.0.2.21) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210507_000045_280699_6BC7CFF7 X-CRM114-Status: GOOD ( 41.10 ) 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 Cgo+IE9uIDA3LU1heS0yMDIxLCBhdCA5OjI4IEFNLCBUeWxlciBIaWNrcyA8dHloaWNrc0BsaW51 eC5taWNyb3NvZnQuY29tPiB3cm90ZToKPiAKPiBUaGUgLnNodXRkb3duIGhvb2sgaXMgbm90IGNh bGxlZCBhZnRlciBhIGtlcm5lbCBjcmFzaCB3aGVuIGEga2R1bXAKPiBrZXJuZWwgaXMgcHJlLWxv YWRlZC4gQSBrZXhlYyBpbnRvIHRoZSBrZHVtcCBrZXJuZWwgdGFrZXMgcGxhY2UgYXMKPiBxdWlj a2x5IGFzIHBvc3NpYmxlIHdpdGhvdXQgYWxsb3dpbmcgZHJpdmVycyB0byBjbGVhbiB1cC4KPiAK PiBUaGF0IG1lYW5zIHRoYXQgdGhlIE9QLVRFRSBzaGFyZWQgbWVtb3J5IGNhY2hlLCB3aGljaCB3 YXMgaW5pdGlhbGl6ZWQgYnkKPiB0aGUga2VybmVsIHRoYXQgY3Jhc2hlZCwgaXMgc3RpbGwgaW4g cGxhY2Ugd2hlbiB0aGUga2R1bXAga2VybmVsIGlzCj4gYm9vdGVkLiBBcyB0aGUga2R1bXAga2Vy bmVsIGlzIHNodXRkb3duLCB0aGUgLnNodXRkb3duIGhvb2sgaXMgY2FsbGVkLAo+IHdoaWNoIGNh bGxzIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKCksIGFuZCBPUC1URUUncwo+IE9QVEVFX1NNQ19E SVNBQkxFX1NITV9DQUNIRSBBUEkgcmV0dXJucyB2aXJ0dWFsIGFkZHJlc3NlcyB0aGF0IGFyZSBu b3QKPiBtYXBwZWQgZm9yIHRoZSBrZHVtcCBrZXJuZWwgc2luY2UgdGhlIGNhY2hlIHdhcyBzZXQg dXAgYnkgdGhlIHByZXZpb3VzCj4ga2VybmVsLiBUcnlpbmcgdG8gZGVyZWZlcmVuY2UgdGhlIHRl ZV9zaG0gcG9pbnRlciBvciBvdGhlcndpc2UgdHJhbnNsYXRlCj4gdGhlIGFkZHJlc3MgcmVzdWx0 cyBpbiBhIGZhdWx0IHRoYXQgY2Fubm90IGJlIGhhbmRsZWQ6Cj4gCj4gVW5hYmxlIHRvIGhhbmRs ZSBrZXJuZWwgcGFnaW5nIHJlcXVlc3QgYXQgdmlydHVhbCBhZGRyZXNzIGZmZmY0MzE3YjljMDk3 NDQKPiBNZW0gYWJvcnQgaW5mbzoKPiAgIEVTUiA9IDB4OTYwMDAwMDQKPiAgIEVDID0gMHgyNTog REFCVCAoY3VycmVudCBFTCksIElMID0gMzIgYml0cwo+ICAgU0VUID0gMCwgRm5WID0gMAo+ICAg RUEgPSAwLCBTMVBUVyA9IDAKPiBEYXRhIGFib3J0IGluZm86Cj4gICBJU1YgPSAwLCBJU1MgPSAw eDAwMDAwMDA0Cj4gICBDTSA9IDAsIFduUiA9IDAKPiBzd2FwcGVyIHBndGFibGU6IDRrIHBhZ2Vz LCA0OC1iaXQgVkFzLCBwZ2RwPTAwMDAwMDA5NzBiMWUwMDAKPiBbZmZmZjQzMTdiOWMwOTc0NF0g cGdkPTAwMDAwMDAwMDAwMDAwMDAsIHA0ZD0wMDAwMDAwMDAwMDAwMDAwCj4gSW50ZXJuYWwgZXJy b3I6IE9vcHM6IDk2MDAwMDA0IFsjMV0gU01QCj4gTW9kdWxlcyBsaW5rZWQgaW46IGJueHRfZW4g cGNpZV9pcHJvY19wbGF0Zm9ybSBwY2llX2lwcm9jIGRpYWdiZShPKQo+IENQVTogNCBQSUQ6IDEg Q29tbTogc3lzdGVtZC1zaHV0ZG93IFRhaW50ZWQ6IEcgICAgICAgICAgIE8gICAgICA1LjEwLjE5 LjggIzEKPiBIYXJkd2FyZSBuYW1lOiBSZWRhY3RlZCAoRFQpCj4gcHN0YXRlOiA2MDQwMDAwNSAo blpDdiBkYWlmICtQQU4gLVVBTyAtVENPIEJUWVBFPS0tKQo+IHBjIDogdGVlX3NobV9mcmVlICgv dXNyL3NyYy9rZXJuZWwvZHJpdmVycy90ZWUvdGVlX3NobS5jOjM2MykKPiBsciA6IG9wdGVlX2Rp c2FibGVfc2htX2NhY2hlICgvdXNyL3NyYy9rZXJuZWwvZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5j OjQ0MSkKPiBzcCA6IGZmZmY4MDAwMTAwNWJiNzAKPiB4Mjk6IGZmZmY4MDAwMTAwNWJiNzAgeDI4 OiBmZmZmNjA4ZTc0NjQ4ZTAwCj4geDI3OiBmZmZmODAwMDEwMDViYjk4IHgyNjogZGVhZDAwMDAw MDAwMDEwMAo+IHgyNTogZmZmZjgwMDAxMDA1YmJiOCB4MjQ6IGFhYWFhYWFhYWFhYWFhYWEKPiB4 MjM6IGZmZmY2MDhlNzRjZjg4MTggeDIyOiBmZmZmNjA4ZTczOGJlNjAwCj4geDIxOiBmZmZmODAw MDEwMDViYmM4IHgyMDogZmZmZjYwOGU3MzhiZTYzOAo+IHgxOTogZmZmZjQzMTdiOWMwOTcwMCB4 MTg6IGZmZmZmZmZmZmZmZmZmZmYKPiB4MTc6IDAwMDAwMDAwMDAwMDAwNDEgeDE2OiBmZmZmYmE2 MWI1MTcxNzY0Cj4geDE1OiAwMDAwMDAwMDAwMDAwMDA0IHgxNDogMDAwMDAwMDAwMDAwMGZmZgo+ IHgxMzogZmZmZmJhNjFiNWM5ZGZjOCB4MTI6IDAwMDAwMDAwMDAwMDAwMDMKPiB4MTE6IDAwMDAw MDAwMDAwMDAwMDAgeDEwOiAwMDAwMDAwMDAwMDAwMDAwCj4geDkgOiBmZmZmYmE2MWI1NDEzODI0 IHg4IDogMDAwMDAwMDBmZmZmNDMxNwo+IHg3IDogMDAwMDAwMDAwMDAwMDAwMCB4NiA6IDAwMDAw MDAwMDAwMDAwMDAKPiB4NSA6IDAwMDAwMDAwMDAwMDAwMDAgeDQgOiAwMDAwMDAwMDAwMDAwMDAw Cj4geDMgOiAwMDAwMDAwMDAwMDAwMDAwIHgyIDogZmZmZjQzMTdiOWMwOTcwMAo+IHgxIDogMDAw MDAwMDBmZmZmNDMxNyB4MCA6IGZmZmY0MzE3YjljMDk3MDAKPiBDYWxsIHRyYWNlOgo+IHRlZV9z aG1fZnJlZSAoL3Vzci9zcmMva2VybmVsL2RyaXZlcnMvdGVlL3RlZV9zaG0uYzozNjMpCj4gb3B0 ZWVfZGlzYWJsZV9zaG1fY2FjaGUgKC91c3Ivc3JjL2tlcm5lbC9kcml2ZXJzL3RlZS9vcHRlZS9j YWxsLmM6NDQxKQo+IG9wdGVlX3NodXRkb3duICgvdXNyL3NyYy9rZXJuZWwvZHJpdmVycy90ZWUv b3B0ZWUvY29yZS5jOjYzNikKPiBwbGF0Zm9ybV9kcnZfc2h1dGRvd24gKC91c3Ivc3JjL2tlcm5l bC9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzo4MDApCj4gZGV2aWNlX3NodXRkb3duICgvdXNyL3Ny Yy9rZXJuZWwvaW5jbHVkZS9saW51eC9kZXZpY2UuaDo3NTggL3Vzci9zcmMva2VybmVsL2RyaXZl cnMvYmFzZS9jb3JlLmM6NDA3OCkKPiBrZXJuZWxfcmVzdGFydCAoL3Vzci9zcmMva2VybmVsL2tl cm5lbC9yZWJvb3QuYzoyMjEgL3Vzci9zcmMva2VybmVsL2tlcm5lbC9yZWJvb3QuYzoyNDgpCj4g X19hcm02NF9zeXNfcmVib290ICgvdXNyL3NyYy9rZXJuZWwva2VybmVsL3JlYm9vdC5jOjM0OSAv dXNyL3NyYy9rZXJuZWwva2VybmVsL3JlYm9vdC5jOjMxMiAvdXNyL3NyYy9rZXJuZWwva2VybmVs L3JlYm9vdC5jOjMxMikKPiBkb19lbDBfc3ZjICgvdXNyL3NyYy9rZXJuZWwvYXJjaC9hcm02NC9r ZXJuZWwvc3lzY2FsbC5jOjU2IC91c3Ivc3JjL2tlcm5lbC9hcmNoL2FybTY0L2tlcm5lbC9zeXNj YWxsLmM6MTU4IC91c3Ivc3JjL2tlcm5lbC9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6MTk3 KQo+IGVsMF9zdmMgKC91c3Ivc3JjL2tlcm5lbC9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21t b24uYzozNjgpCj4gZWwwX3N5bmNfaGFuZGxlciAoL3Vzci9zcmMva2VybmVsL2FyY2gvYXJtNjQv a2VybmVsL2VudHJ5LWNvbW1vbi5jOjQyOCkKPiBlbDBfc3luYyAoL3Vzci9zcmMva2VybmVsL2Fy Y2gvYXJtNjQva2VybmVsL2VudHJ5LlM6NjcxKQo+IENvZGU6IGFhMDAwM2YzIGI1MDAwMDYwIDEy ODAwMDAzIDE0MDAwMDAyIChiOTQwNDY2MykKPiAKPiBXaGVuIGJvb3RpbmcgdGhlIGtkdW1wIGtl cm5lbCwgZHJhaW4gdGhlIHNoYXJlZCBtZW1vcnkgY2FjaGUgd2hpbGUgYmVpbmcKPiBjYXJlZnVs IHRvIG5vdCB0cmFuc2xhdGUgdGhlIGFkZHJlc3NlcyByZXR1cm5lZCBmcm9tCj4gT1BURUVfU01D X0RJU0FCTEVfU0hNX0NBQ0hFLiBPbmNlIHRoZSBpbnZhbGlkIGNhY2hlIG9iamVjdHMgYXJlIGRy YWluZWQKPiBhbmQgdGhlIGNhY2hlIGlzIGRpc2FibGVkLCBwcm9jZWVkIHdpdGggcmUtZW5hYmxp bmcgdGhlIGNhY2hlIHNvIHRoYXQgd2UKPiBhcmVuJ3QgZGVhbGluZyB3aXRoIGludmFsaWQgYWRk cmVzc2VzIHdoaWxlIHNodXR0aW5nIGRvd24gdGhlIGtkdW1wCj4ga2VybmVsLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IFR5bGVyIEhpY2tzIDx0eWhpY2tzQGxpbnV4Lm1pY3Jvc29mdC5jb20+Cj4gLS0t Cj4gCj4gVGhpcyBwYXRjaCBmaXhlcyBhIGNyYXNoIGludHJvZHVjZWQgYnkgIm9wdGVlOiBmaXgg dGVlIG91dCBvZiBtZW1vcnkKPiBmYWlsdXJlIHNlZW4gZHVyaW5nIGtleGVjIHJlYm9vdCJbMV0u IEhvd2V2ZXIsIEkgZG9uJ3QgdGhpbmsgdGhhdCB0aGUKPiBvcmlnaW5hbCB0d28gcGF0Y2ggc2Vy aWVzWzJdIHBsdXMgdGhpcyBwYXRjaCBpcyB0aGUgZnVsbCBzb2x1dGlvbiB0bwo+IHByb3Blcmx5 IGhhbmRsaW5nIE9QLVRFRSBzaGFyZWQgbWVtb3J5IGFjcm9zcyBrZXhlYy4KPiAKPiBXaGlsZSB0 ZXN0aW5nIHRoaXMgZml4LCBJIGRpZCBhYm91dCAxMCBrZXhlYyByZWJvb3RzIGFuZCB0aGVuIHRy aWdnZXJlZAo+IGEga2VybmVsIGNyYXNoIGJ5IHdyaXRpbmcgJ2MnIHRvIC9wcm9jL3N5c3JxLXRy aWdnZXIuIFRoZSBrZHVtcCBrZXJuZWwKPiBiZWNhbWUgdW5yZXNwb25zaXZlIGR1cmluZyBib290 IHdoaWxlIHN0ZWFkaWx5IHN0cmVhbWluZyB0aGUgZm9sbG93aW5nCj4gZXJyb3JzIHRvIHRoZSBz ZXJpYWwgY29uc29sZToKPiAKPiBhcm0tc21tdSA2NDAwMDAwMC5tbXU6IEJsb2NrZWQgdW5rbm93 biBTdHJlYW0gSUQgMHgyMDAwOyBib290IHdpdGggImFybS1zbW11LmRpc2FibGVfYnlwYXNzPTAi IHRvIGFsbG93LCBidXQgdGhpcyBtYXkgaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMKPiBhcm0t c21tdSA2NDAwMDAwMC5tbXU6ICAgICBHRlNSIDB4MDAwMDAwMDIsIEdGU1lOUjAgMHgwMDAwMDAw MiwgR0ZTWU5SMSAweDAwMDAyMDAwLCBHRlNZTlIyIDB4MDAwMDAwMDAKPiAKPiBJIHN1c3BlY3Qg dGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHByb2JsZW1zIG9mIE9QLVRFRSBzaGFyZWQgbWVt b3J5Cj4gaGFuZGxpbmcgYWNyb3NzIGtleGVjLiBNeSBjdXJyZW50IGh1bmNoIGlzIHRoYXQgd2hp bGUgd2UndmUgZGlzYWJsZWQgdGhlCj4gc2hhcmVkIG1lbW9yeSBjYWNoZSB3aXRoIHRoaXMgcGF0 Y2gsIHdlIGhhdmVuJ3QgdW5yZWdpc3RlcmVkIGFsbCBvZiB0aGUKPiBhZGRyZXNzZXMgdGhhdCB0 aGUgcHJldmlvdXMga2VybmVsICh3aGljaCBjcmFzaGVkKSBoYWQgcmVnaXN0ZXJlZCB3aXRoCj4g T1AtVEVFIGFuZCB0aGF0IHBlcmhhcHMgT1AtVEVFIE9TIGlzIHN0aWxsIHRyeWluZyB0byBtYWtl IHVzZSB0aG9zZQo+IGFkZHJlc3Nlcz8KPiAKPiBJJ20gc3RpbGwgcHJldHR5IGVhcmx5IGluIGlu dmVzdGlnYXRpbmcgdGhhdCBhc3N1bXB0aW9uIGFuZAo+IEknbSBsZWFybmluZyBhYm91dCBPUC1U RUUgYXMgSSBnbyBidXQgSSB3YW50ZWQgdG8gZ2V0IHRoaXMgaW5pdGlhbAo+IGZpeC1vZi10aGUt Zml4IG91dCBzbyB0aGF0IGl0IHdhcyBjbGVhciB0aGF0IHRoZSB2MiBvZiB0aGUgc2VyaWVzWzJd IGlzCj4gbm90IGNvbXBsZXRlLgo+IAo+IFsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21s LzIwMjEwMjI1MDkwNjEwLjI0MjYyMy0yLWFsbGVuLmxrbWxAZ21haWwuY29tLwo+IFsyXSBodHRw czovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjEwMjI1MDkwNjEwLjI0MjYyMy0xLWFsbGVuLmxr bWxAZ21haWwuY29tLyN0Cj4gCj4gZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jICAgICAgICAgIHwg MTEgKysrKysrKysrKy0KPiBkcml2ZXJzL3RlZS9vcHRlZS9jb3JlLmMgICAgICAgICAgfCAxMyAr KysrKysrKysrKy0tCj4gZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfcHJpdmF0ZS5oIHwgIDIgKy0K PiAzIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL2NhbGwuYyBiL2RyaXZlcnMvdGVlL29wdGVl L2NhbGwuYwo+IGluZGV4IDYxMzJjYzhkMDE0Yy4uNzk5ZTg0YmVjNjNkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvdGVlL29wdGVlL2NhbGwuYwo+ICsrKyBiL2RyaXZlcnMvdGVlL29wdGVlL2NhbGwu Ywo+IEBAIC00MTcsOCArNDE3LDEwIEBAIHZvaWQgb3B0ZWVfZW5hYmxlX3NobV9jYWNoZShzdHJ1 Y3Qgb3B0ZWUgKm9wdGVlKQo+ICAqIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKCkgLSBEaXNhYmxl cyBjYWNoaW5nIG9mIHNvbWUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCj4gICoJCQkgICAgICBp biBPUC1URUUKPiAgKiBAb3B0ZWU6CW1haW4gc2VydmljZSBzdHJ1Y3QKPiArICogQGlzX21hcHBl ZDoJdHJ1ZSBpZiB0aGUgY2FjaGVkIHNoYXJlZCBtZW1vcnkgYWRkcmVzc2VzIHdlcmUgbWFwcGVk IGJ5IHRoaXMKPiArICoJCWtlcm5lbCwgYXJlIHNhZmUgdG8gZGVyZWZlcmVuY2UsIGFuZCBzaG91 bGQgYmUgZnJlZWQKPiAgKi8KPiAtdm9pZCBvcHRlZV9kaXNhYmxlX3NobV9jYWNoZShzdHJ1Y3Qg b3B0ZWUgKm9wdGVlKQo+ICt2b2lkIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKHN0cnVjdCBvcHRl ZSAqb3B0ZWUsIGJvb2wgaXNfbWFwcGVkKQo+IHsKPiAJc3RydWN0IG9wdGVlX2NhbGxfd2FpdGVy IHc7Cj4gCj4gQEAgLTQzNyw2ICs0MzksMTMgQEAgdm9pZCBvcHRlZV9kaXNhYmxlX3NobV9jYWNo ZShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlKQo+IAkJaWYgKHJlcy5yZXN1bHQuc3RhdHVzID09IE9QVEVF X1NNQ19SRVRVUk5fT0spIHsKPiAJCQlzdHJ1Y3QgdGVlX3NobSAqc2htOwo+IAoKIFRoYW5rcyBU eWxlci4KIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQgZnJvbSBteSBlbWFpbCBleGNoYW5nZSB3aXRo IEplbnMsIEkgZG9u4oCZdApUaGluayB3ZSB3YW50IHRvIHRvdWNoIG9wdGVlX2Rpc2FibGVfc2ht X2NhY2hlKCksIEkgY291bGQgYmUgd3JvbmcgdG9vLApASmVucywgY29tbWVudHM/Cgo+ICsJCQkv Kgo+ICsJCQkgKiBTaGFyZWQgbWVtb3J5IHJlZmVyZW5jZXMgdGhhdCB3ZXJlIG5vdCBtYXBwZWQg YnkKPiArCQkJICogdGhpcyBrZXJuZWwgbXVzdCBiZSBpZ25vcmVkIHRvIHByZXZlbnQgYSBjcmFz aC4KPiArCQkJICovCj4gKwkJCWlmICghaXNfbWFwcGVkKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ IAkJCXNobSA9IHJlZ19wYWlyX3RvX3B0cihyZXMucmVzdWx0LnNobV91cHBlcjMyLAo+IAkJCQkJ ICAgICAgcmVzLnJlc3VsdC5zaG1fbG93ZXIzMik7Cj4gCQkJdGVlX3NobV9mcmVlKHNobSk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL2NvcmUuYyBiL2RyaXZlcnMvdGVlL29wdGVl L2NvcmUuYwo+IGluZGV4IDY5ZDFmNjk4OTA3Yy4uOTk4NWM2NzFiZDFmIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvdGVlL29wdGVlL2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMvdGVlL29wdGVlL2NvcmUu Ywo+IEBAIC02LDYgKzYsNyBAQAo+ICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUg IjogIiBmbXQKPiAKPiAjaW5jbHVkZSA8bGludXgvYXJtLXNtY2NjLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9jcmFzaF9kdW1wLmg+Cj4gI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gI2luY2x1ZGUg PGxpbnV4L2lvLmg+Cj4gI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+IEBAIC01ODgsNyArNTg5 LDcgQEAgc3RhdGljIGludCBvcHRlZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiAJICogcmVmZXJlbmNlIGNvdW50ZXJzIGFuZCBhbHNvIGF2b2lkIHdpbGQgcG9pbnRlcnMg aW4gc2VjdXJlIHdvcmxkCj4gCSAqIGludG8gdGhlIG9sZCBzaGFyZWQgbWVtb3J5IHJhbmdlLgo+ IAkgKi8KPiAtCW9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKG9wdGVlKTsKPiArCW9wdGVlX2Rpc2Fi bGVfc2htX2NhY2hlKG9wdGVlLCB0cnVlKTsKPiAKPiAJLyoKPiAJICogVGhlIHR3byBkZXZpY2Vz IGhhdmUgdG8gYmUgdW5yZWdpc3RlcmVkIGJlZm9yZSB3ZSBjYW4gZnJlZSB0aGUKPiBAQCAtNjE4 LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgb3B0ZWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gICovCj4gc3RhdGljIHZvaWQgb3B0ZWVfc2h1dGRvd24oc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiB7Cj4gLQlvcHRlZV9kaXNhYmxlX3NobV9jYWNoZShwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KSk7Cj4gKwlvcHRlZV9kaXNhYmxlX3NobV9jYWNoZShwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KSwgdHJ1ZSk7Cj4gfQo+IAo+IHN0YXRpYyBpbnQgb3B0ZWVfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiBAQCAtNzA1LDYgKzcwNiwxNCBAQCBz dGF0aWMgaW50IG9wdGVlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gCW9w dGVlLT5tZW1yZW1hcGVkX3NobSA9IG1lbXJlbWFwZWRfc2htOwo+IAlvcHRlZS0+cG9vbCA9IHBv b2w7Cj4gCj4gKwkvKgo+ICsJICogVGhlIGtleGVjIGludG8gdGhlIGNyYXNoIGtlcm5lbCBkaWQg bm90IGNhbGwgb3VyIC5zaHV0ZG93biBob29rLiBUaGUKPiArCSAqIHNobSBjYWNoZSBvYmplY3Rz IHJlZ2lzdGVyZWQgd2l0aCBPUC1URUUgYXJlIG5vdCB2YWxpZCBmb3IgdGhlIGNyYXNoCj4gKwkg KiBrZXJuZWwuCj4gKwkgKi8KPiArCWlmIChpc19rZHVtcF9rZXJuZWwoKSkKPiArCQlvcHRlZV9k aXNhYmxlX3NobV9jYWNoZShvcHRlZSwgZmFsc2UpOwo+ICsKCiBBbSBnbGFkIHRoaXMgc29sdmVz IHRoZSBrZHVtcCBjcmFzaCB0aGF0IHdlIGhhdmUgYmVlbiBzZWVpbmcuCgotIEFsbGVuCgo+IAlv cHRlZV9lbmFibGVfc2htX2NhY2hlKG9wdGVlKTsKPiAKPiAJaWYgKG9wdGVlLT5zZWNfY2FwcyAm IE9QVEVFX1NNQ19TRUNfQ0FQX0RZTkFNSUNfU0hNKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Rl ZS9vcHRlZS9vcHRlZV9wcml2YXRlLmggYi9kcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRl LmgKPiBpbmRleCBlMjViMjE2YTE0ZWYuLjE2ZDhjODIyMTNlNyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRlLmgKPiArKysgYi9kcml2ZXJzL3RlZS9vcHRlZS9v cHRlZV9wcml2YXRlLmgKPiBAQCAtMTU4LDcgKzE1OCw3IEBAIGludCBvcHRlZV9pbnZva2VfZnVu YyhzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9pb2N0bF9pbnZva2VfYXJnICph cmcsCj4gaW50IG9wdGVlX2NhbmNlbF9yZXEoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHUzMiBj YW5jZWxfaWQsIHUzMiBzZXNzaW9uKTsKPiAKPiB2b2lkIG9wdGVlX2VuYWJsZV9zaG1fY2FjaGUo c3RydWN0IG9wdGVlICpvcHRlZSk7Cj4gLXZvaWQgb3B0ZWVfZGlzYWJsZV9zaG1fY2FjaGUoc3Ry dWN0IG9wdGVlICpvcHRlZSk7Cj4gK3ZvaWQgb3B0ZWVfZGlzYWJsZV9zaG1fY2FjaGUoc3RydWN0 IG9wdGVlICpvcHRlZSwgYm9vbCBpc19tYXBwZWQpOwo+IAo+IGludCBvcHRlZV9zaG1fcmVnaXN0 ZXIoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCB0ZWVfc2htICpzaG0sCj4gCQkgICAg ICAgc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcywKPiAtLSAKPiAyLjI1LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==