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=-20.8 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,MENTIONS_GIT_HOSTING,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 DDCACC433ED for ; Thu, 6 May 2021 08:15:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A2BFA61057 for ; Thu, 6 May 2021 08:15:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233729AbhEFIQU (ORCPT ); Thu, 6 May 2021 04:16:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229461AbhEFIQO (ORCPT ); Thu, 6 May 2021 04:16:14 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 256DAC061574 for ; Thu, 6 May 2021 01:15:16 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id s5-20020a7bc0c50000b0290147d0c21c51so2528544wmh.4 for ; Thu, 06 May 2021 01:15:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=/HNPJmnlTkDveiBeLgubqTHlgbc+rno9WKevf0dz/t4=; b=YIl17DGqEM2osFMHeYsExWGEW7VjShpvamWsYn0GhfZcnGnIMajlrG7/Zkh/tGIBd9 M6y1bVxxOjU9CCpvTL4JGf45udBQ+PDANylQUMI3CNxRbVFmZuK434bKVw4k5EdVWIYz GBfYA3HPzDrW83oozdcqnlSTEALmYVWvSIvyTX5IgTDx9Nu/kUByXc5MvEnADBCA3nVW GxhZ0WHn7Is98v7oVV0D/OQHA4DIFNZVQiuIpQIuetPaCKtrl0jJV9kZzWSZI2sFIgLE 0qvr8WLAiq55jLsx302SrrJdjlIvnU9ZR68QMAeB+gpuRitDNJswkJoL5ZhiTsTO6wUy QXAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=/HNPJmnlTkDveiBeLgubqTHlgbc+rno9WKevf0dz/t4=; b=aPIae6XIB0JNSsp4MiiERN64sdPCAmeaVgyVbmzcZgtYfBehvEriqXThyRnkT00Ya+ tyWgntBIIYW6wilKiXPs1IYkqTnR3HtTUGmm/TEORnaAw80Q+m5SxKeqFqqjxZpYy1jY 9v3Z1EuMc4E+5xsE48J8v/z3GPiznrBVZt8aJJ+srUJCsHPWj7QwMrOlp7HS/0CxC6FR LruxYwynZS5CZKq8Tyh11YGhuj5wTxlTGVCOu5DDKeEOLPC7HSQKeatfjC2kZMvNa8hk YTtfAHQTWFEgIbu+q3WP5Yr7w/r0b42+Qh54wU+3Y9B9yOZB6uZlqx+nxrBfq5xWp713 76Dg== X-Gm-Message-State: AOAM532zRHFno47NMVQPLr69up21H9gSBr09GrBdxnZOnFQAlD9CnH4Q HD5YIQ8nVHF4U/tXV8gl5nHqY2rH60TKt+03L5I1Jg== X-Google-Smtp-Source: ABdhPJzcMKdiAyBKnT+qVXvV2vD/UAKyt74a2dzgJbkcvfd8yrQsQwymkpUQjlM70iWBZSlNizzzaqV4BD/OVPgt0jA= X-Received: by 2002:a1c:e908:: with SMTP id q8mr2640843wmc.136.1620288913571; Thu, 06 May 2021 01:15:13 -0700 (PDT) MIME-Version: 1.0 References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210225090610.242623-2-allen.lkml@gmail.com> <9a6c017c-d156-f939-f907-d6dfe83c41ac@linux.microsoft.com> <409F60D9-F0FB-4B69-B64B-CC6B3704038E@linux.microsoft.com> <51FC863B-96C5-47BA-8EBF-3D9FB6DE7DD2@linux.microsoft.com> In-Reply-To: From: Jens Wiklander Date: Thu, 6 May 2021 10:15:02 +0200 Message-ID: Subject: Re: [PATCH v2 1/2] optee: fix tee out of memory failure seen during kexec reboot To: Allen Pais Cc: Allen Pais , zajec5@gmail.com, bcm-kernel-feedback-list@broadcom.com, Linux ARM , Linux Kernel Mailing List , OP-TEE TrustedFirmware Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 6, 2021 at 9:29 AM Allen Pais wrote= : > > >> > >>>>>>>> [ 0.368428] tee_bnxt_fw optee-clnt0: tee_shm_alloc failed > >>>>>>>> [ 0.368461] tee_bnxt_fw: probe of optee-clnt0 failed with err= or -22 > >>>>>>>> > >>>>>>>> tee_shm_release() is not invoked on dma shm buffer. > >>>>>>>> > >>>>>>>> Implement .shutdown() method to handle the release of the buffer= s > >>>>>>>> correctly. > >>>>>>>> > >>>>>>>> More info: > >>>>>>>> https://github.com/OP-TEE/optee_os/issues/3637 > >>>>>>>> > >>>>>>>> Signed-off-by: Allen Pais > >>>>>>>> --- > >>>>>>>> drivers/tee/optee/core.c | 20 ++++++++++++++++++++ > >>>>>>>> 1 file changed, 20 insertions(+) > >>>>>>> > >>>>>>> This looks good to me. Do you have a practical way of testing thi= s on > >>>>>>> QEMU for instance? > >>>>>>> > >>>>>> > >>>>>> Jens, > >>>>>> > >>>>>> I could not reproduce nor create a setup using QEMU, I could only > >>>>>> do it on a real h/w. > >>>>>> > >>>>>> I have extensively tested the fix and I don't see any issues. > >>>>> > >>>>> I did a few test runs too, seems OK. > >>>> > >>>> I carried these changes and have not run into any issues with Kexec = so far. > >>>> Last week, while trying out kdump, we ran into a crash(this is when = the > >>>> Kdump kernel reboots). > >>>> > >>>> $echo c > /proc/sysrq-trigger > >>>> > >>>> Leads to: > >>>> > >>>> [ 18.004831] Unable to handle kernel paging request at virtual add= ress ffff0008dcef6758 > >>>> [ 18.013002] Mem abort info: > >>>> [ 18.015885] ESR =3D 0x96000005 > >>>> [ 18.019034] EC =3D 0x25: DABT (current EL), IL =3D 32 bits > >>>> [ 18.024516] SET =3D 0, FnV =3D 0 > >>>> [ 18.027667] EA =3D 0, S1PTW =3D 0 > >>>> [ 18.030905] Data abort info: > >>>> [ 18.033877] ISV =3D 0, ISS =3D 0x00000005 > >>>> [ 18.037835] CM =3D 0, WnR =3D 0 > >>>> [ 18.040896] swapper pgtable: 4k pages, 48-bit VAs, pgdp=3D0000000= 970a78000 > >>>> [ 18.047811] [ffff0008dcef6758] pgd=3D000000097fbf9003, pud=3D0000= 000000000000 > >>>> [ 18.054819] Internal error: Oops: 96000005 [#1] SMP > >>>> [ 18.059850] Modules linked in: bnxt_en pcie_iproc_platform pcie_i= proc diagbe(O) > >>>> [ 18.067395] CPU: 3 PID: 1 Comm: systemd-shutdow Tainted: G = O 5.4.83-microsoft-standard #1 > >>>> [ 18.077174] Hardware name: Overlake (DT) > >>>> [ 18.081219] pstate: 80400005 (Nzcv daif +PAN -UAO) > >>>> [ 18.086170] pc : tee_shm_free+0x18/0x48 > >>>> [ 18.090126] lr : optee_disable_shm_cache+0xa4/0xf0 > >>>> [ 18.095066] sp : ffff80001005bb90 > >>>> [ 18.098484] x29: ffff80001005bb90 x28: ffff000037e20000 > >>>> [ 18.103962] x27: 0000000000000000 x26: ffff00003ed10490 > >>>> [ 18.109440] x25: ffffca760e975f90 x24: 0000000000000000 > >>>> [ 18.114918] x23: ffffca760ed79808 x22: ffff00003ec66e18 > >>>> [ 18.120396] x21: ffff80001005bc08 x20: 00000000b200000a > >>>> [ 18.125874] x19: ffff0008dcef6700 x18: 0000000000000010 > >>>> [ 18.131352] x17: 0000000000000000 x16: 0000000000000000 > >>>> [ 18.136829] x15: ffffffffffffffff x14: ffffca760ed79808 > >>>> [ 18.142307] x13: ffff80009005b897 x12: ffff80001005b89f > >>>> [ 18.147786] x11: ffffca760eda4000 x10: ffff80001005b820 > >>>> [ 18.153264] x9 : 00000000ffffffd0 x8 : ffffca760e59b2c0 > >>>> [ 18.158742] x7 : 0000000000000000 x6 : 0000000000000000 > >>>> [ 18.164220] x5 : 0000000000000000 x4 : 0000000000000000 > >>>> [ 18.169698] x3 : 0000000000000000 x2 : ffff0008dcef6700 > >>>> [ 18.175175] x1 : 00000000ffff0008 x0 : ffffca760e59ca04 > >>>> [ 18.180654] Call trace: > >>>> [ 18.183176] tee_shm_free+0x18/0x48 > >>>> [ 18.186773] optee_disable_shm_cache+0xa4/0xf0 > >>>> [ 18.191356] optee_shutdown+0x20/0x30 > >>>> [ 18.195135] platform_drv_shutdown+0x2c/0x38 > >>>> [ 18.199538] device_shutdown+0x180/0x298 > >>>> [ 18.203586] kernel_restart_prepare+0x44/0x50 > >>>> [ 18.208078] kernel_restart+0x20/0x68 > >>>> [ 18.211853] __do_sys_reboot+0x104/0x258 > >>>> [ 18.215899] __arm64_sys_reboot+0x2c/0x38 > >>>> [ 18.220035] el0_svc_handler+0x90/0x138 > >>>> [ 18.223991] el0_svc+0x8/0x208 > >>>> [ 18.227143] Code: f9000bf3 aa0003f3 aa1e03e0 d503201f (b9405a60) > >>>> [ 18.233435] ---[ end trace 835d756cd66aa959 ]--- > >>>> [ 18.238621] Kernel panic - not syncing: Fatal exception > >>>> [ 18.244014] Kernel Offset: 0x4a75fde00000 from 0xffff800010000000 > >>>> [ 18.250299] PHYS_OFFSET: 0xffff99c680000000 > >>>> [ 18.254613] CPU features: 0x0002,21806008 > >>>> [ 18.258747] Memory Limit: none > >>>> [ 18.262310] ---[ end Kernel panic - not syncing: Fatal exception = ]=E2=80=94 > >>>> > >>>> I see that before secure world returns OPTEE_SMC_RETURN_ENOTAVAIL(wh= ich > >>>> Should disable and clear all the cache) we run into the crash trying= to free shm. > >>>> > >>>> Thoughts? > >>> > >>> It seems that the pointer is invalid, but the pointer doesn't look > >>> like garbage. Could the kernel have unmapped the memory area covering > >>> that address? > >>> > >> > >> Yes, I am not entirely sure if the kernel had the time to unmap the me= mory. > >> Right after triggering the crash the kdump kernel is booted and I see = the following > >> > >> [ 2.050145] optee: probing for conduit method. > >> [ 2.054743] optee: revision 3.6 (f84427aa) > >> [ 2.054821] optee: dynamic shared memory is enabled > >> [ 2.066186] optee: initialized driver > >> > >> Could this be previous un-released maps causing corruption? > > > > Aha, yes, that could be it. > > > > How about checking for the ptr? > > diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c > index aadedec3bfe7..8dc4fe9a1588 100644 > --- a/drivers/tee/optee/call.c > +++ b/drivers/tee/optee/call.c > @@ -426,10 +426,12 @@ void optee_disable_shm_cache(struct optee *optee) > if (res.result.status =3D=3D OPTEE_SMC_RETURN_ENOTAVAIL) > break; /* All shm's freed */ > if (res.result.status =3D=3D OPTEE_SMC_RETURN_OK) { > - struct tee_shm *shm; > + struct tee_shm *shm =3D NULL; > > shm =3D reg_pair_to_ptr(res.result.shm_upper32, > res.result.shm_lower32); > + if (IS_ERR(shm)) > + return PTR_ERR(shm); > tee_shm_free(shm); I don't think that will help. If your theory is correct then that pointer is from an older incarnation of the kernel. It could be worth trying calling this function just before the call to optee_enable_shm_cache() in optee_probe() but skipping the calls to `tee_shm_free()` in that case. Since the kernel has restarted these returned pointers are not valid any more and there's nothing to free, we just need to make sure that secure world stops using those too. Cheers, Jens 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=-19.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,MENTIONS_GIT_HOSTING,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 EFD46C433B4 for ; Thu, 6 May 2021 10:03:05 +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 4E854611AC for ; Thu, 6 May 2021 10:03:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E854611AC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org 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:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=tJaXRS0WNdlqUbi12E2if0i3KU828jKWekTI/0LK46g=; b=l/lquzRCaRbd3h8kv5+9Q7MWW xSuGBUNHIYj5KkkYVRygE3t9CGpPxX5BjiovHmdYLP6yYaRub45S+zNJxzET92amNdVZgMhNbF+KK PjklkHZmWOC7iwG31zWc1ohjPYzBhdO3MJXdggA7DM/iBDipPN+mmeS/memH4Lvw+71efCK8qWlWt gE/MBbr/iiVMQ2G2llFF64cfoG0NCm6QH41FtqXszTlUPrLexP6dDYcWsQvgBFjSs2OW5f+Y72vLu z0mRp9CHxiof3KrxMro+8bxKYs+y3RYiFcLnwBduwICa9C0Yodd9jVygU8I1ox2ehf6p7DFVzkI7G 4vRmZS3Yw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leZAP-003a2P-B0; Thu, 06 May 2021 08:15:29 +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 1leZAF-003a29-0Y for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 08:15:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References: MIME-Version:Sender:Reply-To:Content-ID:Content-Description; bh=/HNPJmnlTkDveiBeLgubqTHlgbc+rno9WKevf0dz/t4=; b=gWpAeDnYhYAz55G5lz9H99vl9F yQMe32UujbgJ6IELld76e8ovYGOpV6+7tHBiJSJWRHlv1rpQm07M8L3P3Q0XxkgckXaIUz6NYldbp 9xhJMFVIjR6LN8fVv3G6TTk698RJGefj2ZCIuqeCAHXnjxlWtEm5ZrCJaHAcymWPMsfJpB5f1///g O+i0QeVT3pOll5oE323e9ocNZada/1U2+iM0EjfFKo+f6VW8c96cE2EVR5rU+9s/Y8OJ/XbTLua3N SC+MMDIVxY19kvgEOVixOWYjWEiRMwO68DR+eKD451SkDnK+X61yhJBaGjz7qxT4lKT8MWb4wBjsh LiMoVniA==; Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1leZAB-005rXk-LW for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 08:15:17 +0000 Received: by mail-wm1-x332.google.com with SMTP id y124-20020a1c32820000b029010c93864955so4807127wmy.5 for ; Thu, 06 May 2021 01:15:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=/HNPJmnlTkDveiBeLgubqTHlgbc+rno9WKevf0dz/t4=; b=YIl17DGqEM2osFMHeYsExWGEW7VjShpvamWsYn0GhfZcnGnIMajlrG7/Zkh/tGIBd9 M6y1bVxxOjU9CCpvTL4JGf45udBQ+PDANylQUMI3CNxRbVFmZuK434bKVw4k5EdVWIYz GBfYA3HPzDrW83oozdcqnlSTEALmYVWvSIvyTX5IgTDx9Nu/kUByXc5MvEnADBCA3nVW GxhZ0WHn7Is98v7oVV0D/OQHA4DIFNZVQiuIpQIuetPaCKtrl0jJV9kZzWSZI2sFIgLE 0qvr8WLAiq55jLsx302SrrJdjlIvnU9ZR68QMAeB+gpuRitDNJswkJoL5ZhiTsTO6wUy QXAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=/HNPJmnlTkDveiBeLgubqTHlgbc+rno9WKevf0dz/t4=; b=HMDp1zt+BPM8oJ/+MR+RC73TvWY+Z6YWHPo9xgylHA8yEAxYgRpzASn+RjzXBFUq3X G2zkj6H0IWscbgMFRLsbbEz+tY58tF6V+xOhYqDRDg9AqPUkuh2WRAaf7Wz/iSOsTIve BnBeFCYUsmvBBXXHpVNhAZ+Fx0alN4uW3wDoAHSP62wGpM2s0KmWPLMIJTOjUhqNzXcl sDB/L3PdWt9eXnPUG651dI+qOwQn5P+hWWjiNvcufp/46czdmwTgvHEcOQuKBXTwdlMh q8acubPo3D0Qlxo9BDgQCm+FJMq4Oqpyq+YtHlEtdCxC6zl4g/kTqMIsx2BsxxctE+cr fskg== X-Gm-Message-State: AOAM531DGkH7Il6rObHrNVuNbof86YBdAXGe6eLbjkNQ/TSpRZkTeJ+a 94I/QbSkzR05UvOn+5gSBDZpk0X8D0V+DvFxCgnBhw== X-Google-Smtp-Source: ABdhPJzcMKdiAyBKnT+qVXvV2vD/UAKyt74a2dzgJbkcvfd8yrQsQwymkpUQjlM70iWBZSlNizzzaqV4BD/OVPgt0jA= X-Received: by 2002:a1c:e908:: with SMTP id q8mr2640843wmc.136.1620288913571; Thu, 06 May 2021 01:15:13 -0700 (PDT) MIME-Version: 1.0 References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210225090610.242623-2-allen.lkml@gmail.com> <9a6c017c-d156-f939-f907-d6dfe83c41ac@linux.microsoft.com> <409F60D9-F0FB-4B69-B64B-CC6B3704038E@linux.microsoft.com> <51FC863B-96C5-47BA-8EBF-3D9FB6DE7DD2@linux.microsoft.com> In-Reply-To: From: Jens Wiklander Date: Thu, 6 May 2021 10:15:02 +0200 Message-ID: Subject: Re: [PATCH v2 1/2] optee: fix tee out of memory failure seen during kexec reboot To: Allen Pais Cc: Allen Pais , zajec5@gmail.com, bcm-kernel-feedback-list@broadcom.com, Linux ARM , Linux Kernel Mailing List , OP-TEE TrustedFirmware X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210506_011515_736612_42C6F135 X-CRM114-Status: GOOD ( 37.55 ) 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 T24gVGh1LCBNYXkgNiwgMjAyMSBhdCA5OjI5IEFNIEFsbGVuIFBhaXMgPGFwYWlzQGxpbnV4Lm1p Y3Jvc29mdC5jb20+IHdyb3RlOgo+Cj4gPj4KPiA+Pj4+Pj4+PiBbICAgIDAuMzY4NDI4XSB0ZWVf Ym54dF9mdyBvcHRlZS1jbG50MDogdGVlX3NobV9hbGxvYyBmYWlsZWQKPiA+Pj4+Pj4+PiBbICAg IDAuMzY4NDYxXSB0ZWVfYm54dF9mdzogcHJvYmUgb2Ygb3B0ZWUtY2xudDAgZmFpbGVkIHdpdGgg ZXJyb3IgLTIyCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiB0ZWVfc2htX3JlbGVhc2UoKSBpcyBub3Qg aW52b2tlZCBvbiBkbWEgc2htIGJ1ZmZlci4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IEltcGxlbWVu dCAuc2h1dGRvd24oKSBtZXRob2QgdG8gaGFuZGxlIHRoZSByZWxlYXNlIG9mIHRoZSBidWZmZXJz Cj4gPj4+Pj4+Pj4gY29ycmVjdGx5Lgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gTW9yZSBpbmZvOgo+ ID4+Pj4+Pj4+IGh0dHBzOi8vZ2l0aHViLmNvbS9PUC1URUUvb3B0ZWVfb3MvaXNzdWVzLzM2MzcK PiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEFsbGVuIFBhaXMgPGFwYWlzQGxp bnV4Lm1pY3Jvc29mdC5jb20+Cj4gPj4+Pj4+Pj4gLS0tCj4gPj4+Pj4+Pj4gZHJpdmVycy90ZWUv b3B0ZWUvY29yZS5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKPiA+Pj4+Pj4+PiAxIGZpbGUg Y2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFRoaXMgbG9va3Mg Z29vZCB0byBtZS4gRG8geW91IGhhdmUgYSBwcmFjdGljYWwgd2F5IG9mIHRlc3RpbmcgdGhpcyBv bgo+ID4+Pj4+Pj4gUUVNVSBmb3IgaW5zdGFuY2U/Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pgo+ID4+Pj4+ PiBKZW5zLAo+ID4+Pj4+Pgo+ID4+Pj4+PiBJIGNvdWxkIG5vdCByZXByb2R1Y2Ugbm9yIGNyZWF0 ZSBhIHNldHVwIHVzaW5nIFFFTVUsIEkgY291bGQgb25seQo+ID4+Pj4+PiBkbyBpdCBvbiBhIHJl YWwgaC93Lgo+ID4+Pj4+Pgo+ID4+Pj4+PiBJIGhhdmUgZXh0ZW5zaXZlbHkgdGVzdGVkIHRoZSBm aXggYW5kIEkgZG9uJ3Qgc2VlIGFueSBpc3N1ZXMuCj4gPj4+Pj4KPiA+Pj4+PiBJIGRpZCBhIGZl dyB0ZXN0IHJ1bnMgdG9vLCBzZWVtcyBPSy4KPiA+Pj4+Cj4gPj4+PiBJIGNhcnJpZWQgdGhlc2Ug Y2hhbmdlcyBhbmQgaGF2ZSBub3QgcnVuIGludG8gYW55IGlzc3VlcyB3aXRoIEtleGVjIHNvIGZh ci4KPiA+Pj4+IExhc3Qgd2Vlaywgd2hpbGUgdHJ5aW5nIG91dCBrZHVtcCwgd2UgcmFuIGludG8g YSBjcmFzaCh0aGlzIGlzIHdoZW4gdGhlCj4gPj4+PiBLZHVtcCBrZXJuZWwgcmVib290cykuCj4g Pj4+Pgo+ID4+Pj4gJGVjaG8gYyA+IC9wcm9jL3N5c3JxLXRyaWdnZXIKPiA+Pj4+Cj4gPj4+PiBM ZWFkcyB0bzoKPiA+Pj4+Cj4gPj4+PiBbICAgMTguMDA0ODMxXSBVbmFibGUgdG8gaGFuZGxlIGtl cm5lbCBwYWdpbmcgcmVxdWVzdCBhdCB2aXJ0dWFsIGFkZHJlc3MgZmZmZjAwMDhkY2VmNjc1OAo+ ID4+Pj4gWyAgIDE4LjAxMzAwMl0gTWVtIGFib3J0IGluZm86Cj4gPj4+PiBbICAgMTguMDE1ODg1 XSAgIEVTUiA9IDB4OTYwMDAwMDUKPiA+Pj4+IFsgICAxOC4wMTkwMzRdICAgRUMgPSAweDI1OiBE QUJUIChjdXJyZW50IEVMKSwgSUwgPSAzMiBiaXRzCj4gPj4+PiBbICAgMTguMDI0NTE2XSAgIFNF VCA9IDAsIEZuViA9IDAKPiA+Pj4+IFsgICAxOC4wMjc2NjddICAgRUEgPSAwLCBTMVBUVyA9IDAK PiA+Pj4+IFsgICAxOC4wMzA5MDVdIERhdGEgYWJvcnQgaW5mbzoKPiA+Pj4+IFsgICAxOC4wMzM4 NzddICAgSVNWID0gMCwgSVNTID0gMHgwMDAwMDAwNQo+ID4+Pj4gWyAgIDE4LjAzNzgzNV0gICBD TSA9IDAsIFduUiA9IDAKPiA+Pj4+IFsgICAxOC4wNDA4OTZdIHN3YXBwZXIgcGd0YWJsZTogNGsg cGFnZXMsIDQ4LWJpdCBWQXMsIHBnZHA9MDAwMDAwMDk3MGE3ODAwMAo+ID4+Pj4gWyAgIDE4LjA0 NzgxMV0gW2ZmZmYwMDA4ZGNlZjY3NThdIHBnZD0wMDAwMDAwOTdmYmY5MDAzLCBwdWQ9MDAwMDAw MDAwMDAwMDAwMAo+ID4+Pj4gWyAgIDE4LjA1NDgxOV0gSW50ZXJuYWwgZXJyb3I6IE9vcHM6IDk2 MDAwMDA1IFsjMV0gU01QCj4gPj4+PiBbICAgMTguMDU5ODUwXSBNb2R1bGVzIGxpbmtlZCBpbjog Ym54dF9lbiBwY2llX2lwcm9jX3BsYXRmb3JtIHBjaWVfaXByb2MgZGlhZ2JlKE8pCj4gPj4+PiBb ICAgMTguMDY3Mzk1XSBDUFU6IDMgUElEOiAxIENvbW06IHN5c3RlbWQtc2h1dGRvdyBUYWludGVk OiBHICAgICAgICAgICBPICAgICAgNS40LjgzLW1pY3Jvc29mdC1zdGFuZGFyZCAjMQo+ID4+Pj4g WyAgIDE4LjA3NzE3NF0gSGFyZHdhcmUgbmFtZTogT3Zlcmxha2UgKERUKQo+ID4+Pj4gWyAgIDE4 LjA4MTIxOV0gcHN0YXRlOiA4MDQwMDAwNSAoTnpjdiBkYWlmICtQQU4gLVVBTykKPiA+Pj4+IFsg ICAxOC4wODYxNzBdIHBjIDogdGVlX3NobV9mcmVlKzB4MTgvMHg0OAo+ID4+Pj4gWyAgIDE4LjA5 MDEyNl0gbHIgOiBvcHRlZV9kaXNhYmxlX3NobV9jYWNoZSsweGE0LzB4ZjAKPiA+Pj4+IFsgICAx OC4wOTUwNjZdIHNwIDogZmZmZjgwMDAxMDA1YmI5MAo+ID4+Pj4gWyAgIDE4LjA5ODQ4NF0geDI5 OiBmZmZmODAwMDEwMDViYjkwIHgyODogZmZmZjAwMDAzN2UyMDAwMAo+ID4+Pj4gWyAgIDE4LjEw Mzk2Ml0geDI3OiAwMDAwMDAwMDAwMDAwMDAwIHgyNjogZmZmZjAwMDAzZWQxMDQ5MAo+ID4+Pj4g WyAgIDE4LjEwOTQ0MF0geDI1OiBmZmZmY2E3NjBlOTc1ZjkwIHgyNDogMDAwMDAwMDAwMDAwMDAw MAo+ID4+Pj4gWyAgIDE4LjExNDkxOF0geDIzOiBmZmZmY2E3NjBlZDc5ODA4IHgyMjogZmZmZjAw MDAzZWM2NmUxOAo+ID4+Pj4gWyAgIDE4LjEyMDM5Nl0geDIxOiBmZmZmODAwMDEwMDViYzA4IHgy MDogMDAwMDAwMDBiMjAwMDAwYQo+ID4+Pj4gWyAgIDE4LjEyNTg3NF0geDE5OiBmZmZmMDAwOGRj ZWY2NzAwIHgxODogMDAwMDAwMDAwMDAwMDAxMAo+ID4+Pj4gWyAgIDE4LjEzMTM1Ml0geDE3OiAw MDAwMDAwMDAwMDAwMDAwIHgxNjogMDAwMDAwMDAwMDAwMDAwMAo+ID4+Pj4gWyAgIDE4LjEzNjgy OV0geDE1OiBmZmZmZmZmZmZmZmZmZmZmIHgxNDogZmZmZmNhNzYwZWQ3OTgwOAo+ID4+Pj4gWyAg IDE4LjE0MjMwN10geDEzOiBmZmZmODAwMDkwMDViODk3IHgxMjogZmZmZjgwMDAxMDA1Yjg5Zgo+ ID4+Pj4gWyAgIDE4LjE0Nzc4Nl0geDExOiBmZmZmY2E3NjBlZGE0MDAwIHgxMDogZmZmZjgwMDAx MDA1YjgyMAo+ID4+Pj4gWyAgIDE4LjE1MzI2NF0geDkgOiAwMDAwMDAwMGZmZmZmZmQwIHg4IDog ZmZmZmNhNzYwZTU5YjJjMAo+ID4+Pj4gWyAgIDE4LjE1ODc0Ml0geDcgOiAwMDAwMDAwMDAwMDAw MDAwIHg2IDogMDAwMDAwMDAwMDAwMDAwMAo+ID4+Pj4gWyAgIDE4LjE2NDIyMF0geDUgOiAwMDAw MDAwMDAwMDAwMDAwIHg0IDogMDAwMDAwMDAwMDAwMDAwMAo+ID4+Pj4gWyAgIDE4LjE2OTY5OF0g eDMgOiAwMDAwMDAwMDAwMDAwMDAwIHgyIDogZmZmZjAwMDhkY2VmNjcwMAo+ID4+Pj4gWyAgIDE4 LjE3NTE3NV0geDEgOiAwMDAwMDAwMGZmZmYwMDA4IHgwIDogZmZmZmNhNzYwZTU5Y2EwNAo+ID4+ Pj4gWyAgIDE4LjE4MDY1NF0gQ2FsbCB0cmFjZToKPiA+Pj4+IFsgICAxOC4xODMxNzZdICB0ZWVf c2htX2ZyZWUrMHgxOC8weDQ4Cj4gPj4+PiBbICAgMTguMTg2NzczXSAgb3B0ZWVfZGlzYWJsZV9z aG1fY2FjaGUrMHhhNC8weGYwCj4gPj4+PiBbICAgMTguMTkxMzU2XSAgb3B0ZWVfc2h1dGRvd24r MHgyMC8weDMwCj4gPj4+PiBbICAgMTguMTk1MTM1XSAgcGxhdGZvcm1fZHJ2X3NodXRkb3duKzB4 MmMvMHgzOAo+ID4+Pj4gWyAgIDE4LjE5OTUzOF0gIGRldmljZV9zaHV0ZG93bisweDE4MC8weDI5 OAo+ID4+Pj4gWyAgIDE4LjIwMzU4Nl0gIGtlcm5lbF9yZXN0YXJ0X3ByZXBhcmUrMHg0NC8weDUw Cj4gPj4+PiBbICAgMTguMjA4MDc4XSAga2VybmVsX3Jlc3RhcnQrMHgyMC8weDY4Cj4gPj4+PiBb ICAgMTguMjExODUzXSAgX19kb19zeXNfcmVib290KzB4MTA0LzB4MjU4Cj4gPj4+PiBbICAgMTgu MjE1ODk5XSAgX19hcm02NF9zeXNfcmVib290KzB4MmMvMHgzOAo+ID4+Pj4gWyAgIDE4LjIyMDAz NV0gIGVsMF9zdmNfaGFuZGxlcisweDkwLzB4MTM4Cj4gPj4+PiBbICAgMTguMjIzOTkxXSAgZWww X3N2YysweDgvMHgyMDgKPiA+Pj4+IFsgICAxOC4yMjcxNDNdIENvZGU6IGY5MDAwYmYzIGFhMDAw M2YzIGFhMWUwM2UwIGQ1MDMyMDFmIChiOTQwNWE2MCkKPiA+Pj4+IFsgICAxOC4yMzM0MzVdIC0t LVsgZW5kIHRyYWNlIDgzNWQ3NTZjZDY2YWE5NTkgXS0tLQo+ID4+Pj4gWyAgIDE4LjIzODYyMV0g S2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IEZhdGFsIGV4Y2VwdGlvbgo+ID4+Pj4gWyAgIDE4 LjI0NDAxNF0gS2VybmVsIE9mZnNldDogMHg0YTc1ZmRlMDAwMDAgZnJvbSAweGZmZmY4MDAwMTAw MDAwMDAKPiA+Pj4+IFsgICAxOC4yNTAyOTldIFBIWVNfT0ZGU0VUOiAweGZmZmY5OWM2ODAwMDAw MDAKPiA+Pj4+IFsgICAxOC4yNTQ2MTNdIENQVSBmZWF0dXJlczogMHgwMDAyLDIxODA2MDA4Cj4g Pj4+PiBbICAgMTguMjU4NzQ3XSBNZW1vcnkgTGltaXQ6IG5vbmUKPiA+Pj4+IFsgICAxOC4yNjIz MTBdIC0tLVsgZW5kIEtlcm5lbCBwYW5pYyAtIG5vdCBzeW5jaW5nOiBGYXRhbCBleGNlcHRpb24g XeKAlAo+ID4+Pj4KPiA+Pj4+IEkgc2VlIHRoYXQgYmVmb3JlIHNlY3VyZSB3b3JsZCByZXR1cm5z IE9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMKHdoaWNoCj4gPj4+PiBTaG91bGQgZGlzYWJsZSBh bmQgY2xlYXIgYWxsIHRoZSBjYWNoZSkgd2UgcnVuIGludG8gdGhlIGNyYXNoIHRyeWluZyB0byBm cmVlIHNobS4KPiA+Pj4+Cj4gPj4+PiBUaG91Z2h0cz8KPiA+Pj4KPiA+Pj4gSXQgc2VlbXMgdGhh dCB0aGUgcG9pbnRlciBpcyBpbnZhbGlkLCBidXQgdGhlIHBvaW50ZXIgZG9lc24ndCBsb29rCj4g Pj4+IGxpa2UgZ2FyYmFnZS4gQ291bGQgdGhlIGtlcm5lbCBoYXZlIHVubWFwcGVkIHRoZSBtZW1v cnkgYXJlYSBjb3ZlcmluZwo+ID4+PiB0aGF0IGFkZHJlc3M/Cj4gPj4+Cj4gPj4KPiA+PiBZZXMs IEkgYW0gbm90IGVudGlyZWx5IHN1cmUgaWYgdGhlIGtlcm5lbCBoYWQgdGhlIHRpbWUgdG8gdW5t YXAgdGhlIG1lbW9yeS4KPiA+PiBSaWdodCBhZnRlciB0cmlnZ2VyaW5nIHRoZSBjcmFzaCB0aGUg a2R1bXAga2VybmVsIGlzIGJvb3RlZCBhbmQgSSBzZWUgdGhlIGZvbGxvd2luZwo+ID4+Cj4gPj4g WyAyLjA1MDE0NV0gb3B0ZWU6IHByb2JpbmcgZm9yIGNvbmR1aXQgbWV0aG9kLgo+ID4+IFsgMi4w NTQ3NDNdIG9wdGVlOiByZXZpc2lvbiAzLjYgKGY4NDQyN2FhKQo+ID4+IFsgMi4wNTQ4MjFdIG9w dGVlOiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaXMgZW5hYmxlZAo+ID4+IFsgMi4wNjYxODZdIG9w dGVlOiBpbml0aWFsaXplZCBkcml2ZXIKPiA+Pgo+ID4+IENvdWxkIHRoaXMgYmUgcHJldmlvdXMg dW4tcmVsZWFzZWQgbWFwcyBjYXVzaW5nIGNvcnJ1cHRpb24/Cj4gPgo+ID4gQWhhLCB5ZXMsIHRo YXQgY291bGQgYmUgaXQuCj4gPgo+Cj4gSG93IGFib3V0IGNoZWNraW5nIGZvciB0aGUgcHRyPwo+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL2NhbGwuYyBiL2RyaXZlcnMvdGVlL29w dGVlL2NhbGwuYwo+IGluZGV4IGFhZGVkZWMzYmZlNy4uOGRjNGZlOWExNTg4IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvdGVlL29wdGVlL2NhbGwuYwo+ICsrKyBiL2RyaXZlcnMvdGVlL29wdGVlL2Nh bGwuYwo+IEBAIC00MjYsMTAgKzQyNiwxMiBAQCB2b2lkIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hl KHN0cnVjdCBvcHRlZSAqb3B0ZWUpCj4gICAgICAgICAgICAgICAgIGlmIChyZXMucmVzdWx0LnN0 YXR1cyA9PSBPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJTCkKPiAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsgLyogQWxsIHNobSdzIGZyZWVkICovCj4gICAgICAgICAgICAgICAgIGlmIChy ZXMucmVzdWx0LnN0YXR1cyA9PSBPUFRFRV9TTUNfUkVUVVJOX09LKSB7Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRlZV9zaG0gKnNobTsKPiArICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdGVlX3NobSAqc2htID0gTlVMTDsKPgo+ICAgICAgICAgICAgICAgICAgICAgICAg IHNobSA9IHJlZ19wYWlyX3RvX3B0cihyZXMucmVzdWx0LnNobV91cHBlcjMyLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMucmVzdWx0LnNobV9sb3dl cjMyKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfRVJSKHNobSkpCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihzaG0pOwo+ICAgICAgICAg ICAgICAgICAgICAgICAgIHRlZV9zaG1fZnJlZShzaG0pOwoKSSBkb24ndCB0aGluayB0aGF0IHdp bGwgaGVscC4gSWYgeW91ciB0aGVvcnkgaXMgY29ycmVjdCB0aGVuIHRoYXQKcG9pbnRlciBpcyBm cm9tIGFuIG9sZGVyIGluY2FybmF0aW9uIG9mIHRoZSBrZXJuZWwuIEl0IGNvdWxkIGJlIHdvcnRo CnRyeWluZyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24ganVzdCBiZWZvcmUgdGhlIGNhbGwgdG8Kb3B0 ZWVfZW5hYmxlX3NobV9jYWNoZSgpIGluIG9wdGVlX3Byb2JlKCkgYnV0IHNraXBwaW5nIHRoZSBj YWxscyB0bwpgdGVlX3NobV9mcmVlKClgIGluIHRoYXQgY2FzZS4gU2luY2UgdGhlIGtlcm5lbCBo YXMgcmVzdGFydGVkIHRoZXNlCnJldHVybmVkIHBvaW50ZXJzIGFyZSBub3QgdmFsaWQgYW55IG1v cmUgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBmcmVlLAp3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJl IHRoYXQgc2VjdXJlIHdvcmxkIHN0b3BzIHVzaW5nIHRob3NlIHRvby4KCkNoZWVycywKSmVucwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=