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=-15.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,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 F0A33C433ED for ; Fri, 7 May 2021 09:23:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B755761431 for ; Fri, 7 May 2021 09:23:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235816AbhEGJYf (ORCPT ); Fri, 7 May 2021 05:24:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235202AbhEGJY3 (ORCPT ); Fri, 7 May 2021 05:24:29 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4B26C061574 for ; Fri, 7 May 2021 02:23:29 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id z6so8448464wrm.4 for ; Fri, 07 May 2021 02:23:29 -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=1NrtzblskDmypPHj4A25OmtWsJ/DvkriA2Ugy8KdxgU=; b=eSfp+MpJTjME6cTK89Sr9FlKhYaGXGoiEXqd05QNgjJLTLYvmDDCfoDyuWxm6TGc7O QU38CUXuqLaSXUAej4OeQqTFzcZ/vMmXhKpBGdZksJ1OrBfqhGf173c8Ul7GsloGgxup 41DeFt+3ZNbTj82hQ0f7biWmjZyhJm78ZySkZwlEzXCrlzkDeK0xoh3RGTPhaLsZW7I/ 2ZYkgTXQ9zIs6i3aYZPdZA4XcxIvY65G3K49Pcl6NUhEtjlkJoZKO2S0XBnTkjflQ5yy COw5amuZi0NOrXiJcko9pwXAseJ9Uk+9c5p1F8AWJpB1NuaH9HYwTcAkKxMayU6kXNmV KMrg== 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=1NrtzblskDmypPHj4A25OmtWsJ/DvkriA2Ugy8KdxgU=; b=DbkL9kxmo8FZ5PvNg0tT2LNkIIBg+/vwUQ7zgQdrKiN/ZOiS3X0BbegBFMbLLpK6wR BwSkGy+8jc5B4qhWlmT/YGuzrWv4Rihq2ikbdqgRFwrLsFwrkhZz8r8/2RR4qjGSBikt xF2Tp/kddKdgPwa1yryuBBOlk5GhDpHXdfKVq2oNqUXIUqDfm4ZsZRMcEFLuUj4PvhT8 WchY2GTNNOMgRkWwLo0lQaYzOccFEPhIMrKc0+IYIG3uCkykv4/Xw2GvSM/x65743WZI HAvOKSVgzGrN9mfmSs2Xt7aXqrpb4KgYtr0IB0GW3Tb69d1jpB3A+uX2dKRhhNpkBS4B ys6g== X-Gm-Message-State: AOAM5339KrpHHBLE+AH0YKPKz7JvMh4S7JCjOxN68EIM4ixIkF+nkTQD 9KBcxklpdDpzTmOimFqFTPic1v/5mtI2e7ZKVh5aXg== X-Google-Smtp-Source: ABdhPJwFaDFvQFVmMVX0S+BA4Fw9u1p+5zWZai/DiZHCnos7ssX3dl1i2vKS2v8z3m9s3ShdqZH0474mh30v8Lc/YuY= X-Received: by 2002:a05:6000:136b:: with SMTP id q11mr10903086wrz.350.1620379408310; Fri, 07 May 2021 02:23:28 -0700 (PDT) MIME-Version: 1.0 References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210507035816.426585-1-tyhicks@linux.microsoft.com> <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> In-Reply-To: <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> From: Jens Wiklander Date: Fri, 7 May 2021 11:23:17 +0200 Message-ID: Subject: Re: [PATCH] optee: Disable shm cache when booting the crash kernel To: Allen Pais Cc: Tyler Hicks , zajec5@gmail.com, Allen Pais , 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 Fri, May 7, 2021 at 9:00 AM Allen Pais wrote= : > > > > > On 07-May-2021, at 9:28 AM, Tyler Hicks w= rote: > > > > 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. > > > > That means that the OP-TEE shared memory cache, which was initialized b= y > > 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 translat= e > > the address results in a fault that cannot be handled: > > > > Unable to handle kernel paging request at virtual address ffff4317b9c09= 744 > > 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/ke= rnel/drivers/base/core.c:4078) > > kernel_restart (/usr/src/kernel/kernel/reboot.c:221 /usr/src/kernel/ker= nel/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/ker= nel/arch/arm64/kernel/syscall.c:158 /usr/src/kernel/arch/arm64/kernel/sysca= ll.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) > > > > When booting the kdump kernel, drain the shared memory cache while bein= g > > 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 w= e > > aren't dealing with invalid addresses while shutting down the kdump > > kernel. > > > > Signed-off-by: Tyler Hicks > > --- > > > > 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. > > > > 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: > > > > 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 > > > > 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 th= e > > 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? > > > > 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. > > > > [1] https://lore.kernel.org/lkml/20210225090610.242623-2-allen.lkml@gma= il.com/ > > [2] https://lore.kernel.org/lkml/20210225090610.242623-1-allen.lkml@gma= il.com/#t > > > > 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(-) > > > > 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 a= llocation > > * in OP-TEE > > * @optee: main service struct > > + * @is_mapped: true if the cached shared memory addresses were m= apped 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; > > > > @@ -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; > > > > Thanks Tyler. > From what I understand from my email exchange with Jens, I don=E2=80=99t > Think we want to touch optee_disable_shm_cache(), I could be wrong too, > @Jens, comments? Changing optee_disable_shm_cache() is fine. Bear in mind that there are other times where we can't recover from a kernel crash. For instance if a thread is executing in OP-TEE in secure world. 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=-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 83922C433ED for ; Fri, 7 May 2021 09:25:25 +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 E65A361431 for ; Fri, 7 May 2021 09:25:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E65A361431 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=Hr+DWMTu3l+XbiUE5z2zwi2YhlK1zcwViY5ST136MWc=; b=YGTcWF3szkIVn8PrmQZuq/dyd y8jWZMyKTlERubJxfiKToKTR4TNnoA4cYaVAO/x+UJFLU8lIaBlXVKcN6aWJSI5hpV1y7dtwV7HVU ywBeT8VlinwbtwONgIwgUfwi6t1EZDrAf7TgqQ2p5Rttt1pr+YNpTU6uu3n9HLWgrbhWNmMY84NvB ki6MGB37geGB4u1cD6OGOIp+JyRl6KDh9cAXGN3s+b2jISnZvicUrZOJtgLN5Q85cQQRwc53VXJbS Z3Ycai4erd2+V4JlBBbu4vparz5LpIDktD9lOoUgOCZJGqzeo2u2NJ+mx66Mkn7zGV5dDTySur4sn tkk+LRDDQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lewi1-006dZr-Rn; Fri, 07 May 2021 09:23:46 +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 1lewhq-006dWB-7z for linux-arm-kernel@desiato.infradead.org; Fri, 07 May 2021 09:23:38 +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=1NrtzblskDmypPHj4A25OmtWsJ/DvkriA2Ugy8KdxgU=; b=k7fSAaDro5Y6zU6JezNVcYGV9u YAMHfb4Cl43GBkDSK1k7j0W7k5l3GdRC9Dw+lKT0rhNV96eRF40HUJvXigviqleUPFNm/i4zXHOpj gIMhQ4M03Ko20OaPU1HjhSHFHPr6WCXybsjXZyJqMRwnvhAGmgNRSJY+n1dsy/xXX2dOvHncyZxV3 YrCmWTeEMbF6v7o18u2iMTmIUJImCMTlSDZVVAwXplYnlBovHprcCh9QuKjRqSsBfhogckymXLb8D SmiIGY9MDJYPNJCEPkxm0oFgvRPIf9sfeI6sxvsaZpfoiBSI5UD/zun7McYvA55QppiNuBKbJ2BBV 4dtbpyIA==; Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lewhn-006jP2-3A for linux-arm-kernel@lists.infradead.org; Fri, 07 May 2021 09:23:33 +0000 Received: by mail-wr1-x433.google.com with SMTP id d4so8444974wru.7 for ; Fri, 07 May 2021 02:23:29 -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=1NrtzblskDmypPHj4A25OmtWsJ/DvkriA2Ugy8KdxgU=; b=eSfp+MpJTjME6cTK89Sr9FlKhYaGXGoiEXqd05QNgjJLTLYvmDDCfoDyuWxm6TGc7O QU38CUXuqLaSXUAej4OeQqTFzcZ/vMmXhKpBGdZksJ1OrBfqhGf173c8Ul7GsloGgxup 41DeFt+3ZNbTj82hQ0f7biWmjZyhJm78ZySkZwlEzXCrlzkDeK0xoh3RGTPhaLsZW7I/ 2ZYkgTXQ9zIs6i3aYZPdZA4XcxIvY65G3K49Pcl6NUhEtjlkJoZKO2S0XBnTkjflQ5yy COw5amuZi0NOrXiJcko9pwXAseJ9Uk+9c5p1F8AWJpB1NuaH9HYwTcAkKxMayU6kXNmV KMrg== 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=1NrtzblskDmypPHj4A25OmtWsJ/DvkriA2Ugy8KdxgU=; b=brKYzjfYt877Q7EyFrl6x3NQ+1o7gi3DKiEQU34toULzqr2SQSVNXbjySnxoBEA52s ceSSarr0d1jnVSiJrGqbq/iYSi997FckA7fGYxGckJL6LaWFubfy9d837YxItJ85sHXE iCs2hHtMNv+GO6VFEnVUmAbUGMmScfHT04SbHCRDTAoVnR0XJegeMKB3iU+erWVkTK2d B8UaJNhSMfjjhhRQT4X/fpI9ALntulT3XvaVOtf6ffoGgxjRVDSqUuX+DTXwVz4b3Q71 QARB/9xvVJZ3r/jBAxsd/8UATn39bysO4swVrEQDKriaw0T9iwvINQ+sFCitm1zJhKvB oyMg== X-Gm-Message-State: AOAM533VRZykKK2eDeobd2fTD7uUEVpbFiQw+ztasLiwS20KsIwNfwfX 3XANBQarU99+jV9j7+AoEanG6Oruq8vs8ZVF0uRRgQ== X-Google-Smtp-Source: ABdhPJwFaDFvQFVmMVX0S+BA4Fw9u1p+5zWZai/DiZHCnos7ssX3dl1i2vKS2v8z3m9s3ShdqZH0474mh30v8Lc/YuY= X-Received: by 2002:a05:6000:136b:: with SMTP id q11mr10903086wrz.350.1620379408310; Fri, 07 May 2021 02:23:28 -0700 (PDT) MIME-Version: 1.0 References: <20210225090610.242623-1-allen.lkml@gmail.com> <20210507035816.426585-1-tyhicks@linux.microsoft.com> <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> In-Reply-To: <720CDF03-42F9-43C3-B3B3-999E4A5E2864@linux.microsoft.com> From: Jens Wiklander Date: Fri, 7 May 2021 11:23:17 +0200 Message-ID: Subject: Re: [PATCH] optee: Disable shm cache when booting the crash kernel To: Allen Pais Cc: Tyler Hicks , zajec5@gmail.com, Allen Pais , 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-20210507_022331_225639_B0B064DC X-CRM114-Status: GOOD ( 41.19 ) 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 T24gRnJpLCBNYXkgNywgMjAyMSBhdCA5OjAwIEFNIEFsbGVuIFBhaXMgPGFwYWlzQGxpbnV4Lm1p Y3Jvc29mdC5jb20+IHdyb3RlOgo+Cj4KPgo+ID4gT24gMDctTWF5LTIwMjEsIGF0IDk6MjggQU0s IFR5bGVyIEhpY2tzIDx0eWhpY2tzQGxpbnV4Lm1pY3Jvc29mdC5jb20+IHdyb3RlOgo+ID4KPiA+ IFRoZSAuc2h1dGRvd24gaG9vayBpcyBub3QgY2FsbGVkIGFmdGVyIGEga2VybmVsIGNyYXNoIHdo ZW4gYSBrZHVtcAo+ID4ga2VybmVsIGlzIHByZS1sb2FkZWQuIEEga2V4ZWMgaW50byB0aGUga2R1 bXAga2VybmVsIHRha2VzIHBsYWNlIGFzCj4gPiBxdWlja2x5IGFzIHBvc3NpYmxlIHdpdGhvdXQg YWxsb3dpbmcgZHJpdmVycyB0byBjbGVhbiB1cC4KPiA+Cj4gPiBUaGF0IG1lYW5zIHRoYXQgdGhl IE9QLVRFRSBzaGFyZWQgbWVtb3J5IGNhY2hlLCB3aGljaCB3YXMgaW5pdGlhbGl6ZWQgYnkKPiA+ IHRoZSBrZXJuZWwgdGhhdCBjcmFzaGVkLCBpcyBzdGlsbCBpbiBwbGFjZSB3aGVuIHRoZSBrZHVt cCBrZXJuZWwgaXMKPiA+IGJvb3RlZC4gQXMgdGhlIGtkdW1wIGtlcm5lbCBpcyBzaHV0ZG93biwg dGhlIC5zaHV0ZG93biBob29rIGlzIGNhbGxlZCwKPiA+IHdoaWNoIGNhbGxzIG9wdGVlX2Rpc2Fi bGVfc2htX2NhY2hlKCksIGFuZCBPUC1URUUncwo+ID4gT1BURUVfU01DX0RJU0FCTEVfU0hNX0NB Q0hFIEFQSSByZXR1cm5zIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdAo+ID4gbWFwcGVk IGZvciB0aGUga2R1bXAga2VybmVsIHNpbmNlIHRoZSBjYWNoZSB3YXMgc2V0IHVwIGJ5IHRoZSBw cmV2aW91cwo+ID4ga2VybmVsLiBUcnlpbmcgdG8gZGVyZWZlcmVuY2UgdGhlIHRlZV9zaG0gcG9p bnRlciBvciBvdGhlcndpc2UgdHJhbnNsYXRlCj4gPiB0aGUgYWRkcmVzcyByZXN1bHRzIGluIGEg ZmF1bHQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZDoKPiA+Cj4gPiBVbmFibGUgdG8gaGFuZGxlIGtl cm5lbCBwYWdpbmcgcmVxdWVzdCBhdCB2aXJ0dWFsIGFkZHJlc3MgZmZmZjQzMTdiOWMwOTc0NAo+ ID4gTWVtIGFib3J0IGluZm86Cj4gPiAgIEVTUiA9IDB4OTYwMDAwMDQKPiA+ICAgRUMgPSAweDI1 OiBEQUJUIChjdXJyZW50IEVMKSwgSUwgPSAzMiBiaXRzCj4gPiAgIFNFVCA9IDAsIEZuViA9IDAK PiA+ICAgRUEgPSAwLCBTMVBUVyA9IDAKPiA+IERhdGEgYWJvcnQgaW5mbzoKPiA+ICAgSVNWID0g MCwgSVNTID0gMHgwMDAwMDAwNAo+ID4gICBDTSA9IDAsIFduUiA9IDAKPiA+IHN3YXBwZXIgcGd0 YWJsZTogNGsgcGFnZXMsIDQ4LWJpdCBWQXMsIHBnZHA9MDAwMDAwMDk3MGIxZTAwMAo+ID4gW2Zm ZmY0MzE3YjljMDk3NDRdIHBnZD0wMDAwMDAwMDAwMDAwMDAwLCBwNGQ9MDAwMDAwMDAwMDAwMDAw MAo+ID4gSW50ZXJuYWwgZXJyb3I6IE9vcHM6IDk2MDAwMDA0IFsjMV0gU01QCj4gPiBNb2R1bGVz IGxpbmtlZCBpbjogYm54dF9lbiBwY2llX2lwcm9jX3BsYXRmb3JtIHBjaWVfaXByb2MgZGlhZ2Jl KE8pCj4gPiBDUFU6IDQgUElEOiAxIENvbW06IHN5c3RlbWQtc2h1dGRvdyBUYWludGVkOiBHICAg ICAgICAgICBPICAgICAgNS4xMC4xOS44ICMxCj4gPiBIYXJkd2FyZSBuYW1lOiBSZWRhY3RlZCAo RFQpCj4gPiBwc3RhdGU6IDYwNDAwMDA1IChuWkN2IGRhaWYgK1BBTiAtVUFPIC1UQ08gQlRZUEU9 LS0pCj4gPiBwYyA6IHRlZV9zaG1fZnJlZSAoL3Vzci9zcmMva2VybmVsL2RyaXZlcnMvdGVlL3Rl ZV9zaG0uYzozNjMpCj4gPiBsciA6IG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlICgvdXNyL3NyYy9r ZXJuZWwvZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jOjQ0MSkKPiA+IHNwIDogZmZmZjgwMDAxMDA1 YmI3MAo+ID4geDI5OiBmZmZmODAwMDEwMDViYjcwIHgyODogZmZmZjYwOGU3NDY0OGUwMAo+ID4g eDI3OiBmZmZmODAwMDEwMDViYjk4IHgyNjogZGVhZDAwMDAwMDAwMDEwMAo+ID4geDI1OiBmZmZm ODAwMDEwMDViYmI4IHgyNDogYWFhYWFhYWFhYWFhYWFhYQo+ID4geDIzOiBmZmZmNjA4ZTc0Y2Y4 ODE4IHgyMjogZmZmZjYwOGU3MzhiZTYwMAo+ID4geDIxOiBmZmZmODAwMDEwMDViYmM4IHgyMDog ZmZmZjYwOGU3MzhiZTYzOAo+ID4geDE5OiBmZmZmNDMxN2I5YzA5NzAwIHgxODogZmZmZmZmZmZm ZmZmZmZmZgo+ID4geDE3OiAwMDAwMDAwMDAwMDAwMDQxIHgxNjogZmZmZmJhNjFiNTE3MTc2NAo+ ID4geDE1OiAwMDAwMDAwMDAwMDAwMDA0IHgxNDogMDAwMDAwMDAwMDAwMGZmZgo+ID4geDEzOiBm ZmZmYmE2MWI1YzlkZmM4IHgxMjogMDAwMDAwMDAwMDAwMDAwMwo+ID4geDExOiAwMDAwMDAwMDAw MDAwMDAwIHgxMDogMDAwMDAwMDAwMDAwMDAwMAo+ID4geDkgOiBmZmZmYmE2MWI1NDEzODI0IHg4 IDogMDAwMDAwMDBmZmZmNDMxNwo+ID4geDcgOiAwMDAwMDAwMDAwMDAwMDAwIHg2IDogMDAwMDAw MDAwMDAwMDAwMAo+ID4geDUgOiAwMDAwMDAwMDAwMDAwMDAwIHg0IDogMDAwMDAwMDAwMDAwMDAw MAo+ID4geDMgOiAwMDAwMDAwMDAwMDAwMDAwIHgyIDogZmZmZjQzMTdiOWMwOTcwMAo+ID4geDEg OiAwMDAwMDAwMGZmZmY0MzE3IHgwIDogZmZmZjQzMTdiOWMwOTcwMAo+ID4gQ2FsbCB0cmFjZToK PiA+IHRlZV9zaG1fZnJlZSAoL3Vzci9zcmMva2VybmVsL2RyaXZlcnMvdGVlL3RlZV9zaG0uYzoz NjMpCj4gPiBvcHRlZV9kaXNhYmxlX3NobV9jYWNoZSAoL3Vzci9zcmMva2VybmVsL2RyaXZlcnMv dGVlL29wdGVlL2NhbGwuYzo0NDEpCj4gPiBvcHRlZV9zaHV0ZG93biAoL3Vzci9zcmMva2VybmVs L2RyaXZlcnMvdGVlL29wdGVlL2NvcmUuYzo2MzYpCj4gPiBwbGF0Zm9ybV9kcnZfc2h1dGRvd24g KC91c3Ivc3JjL2tlcm5lbC9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzo4MDApCj4gPiBkZXZpY2Vf c2h1dGRvd24gKC91c3Ivc3JjL2tlcm5lbC9pbmNsdWRlL2xpbnV4L2RldmljZS5oOjc1OCAvdXNy L3NyYy9rZXJuZWwvZHJpdmVycy9iYXNlL2NvcmUuYzo0MDc4KQo+ID4ga2VybmVsX3Jlc3RhcnQg KC91c3Ivc3JjL2tlcm5lbC9rZXJuZWwvcmVib290LmM6MjIxIC91c3Ivc3JjL2tlcm5lbC9rZXJu ZWwvcmVib290LmM6MjQ4KQo+ID4gX19hcm02NF9zeXNfcmVib290ICgvdXNyL3NyYy9rZXJuZWwv a2VybmVsL3JlYm9vdC5jOjM0OSAvdXNyL3NyYy9rZXJuZWwva2VybmVsL3JlYm9vdC5jOjMxMiAv dXNyL3NyYy9rZXJuZWwva2VybmVsL3JlYm9vdC5jOjMxMikKPiA+IGRvX2VsMF9zdmMgKC91c3Iv c3JjL2tlcm5lbC9hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM6NTYgL3Vzci9zcmMva2VybmVs L2FyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzoxNTggL3Vzci9zcmMva2VybmVsL2FyY2gvYXJt NjQva2VybmVsL3N5c2NhbGwuYzoxOTcpCj4gPiBlbDBfc3ZjICgvdXNyL3NyYy9rZXJuZWwvYXJj aC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM6MzY4KQo+ID4gZWwwX3N5bmNfaGFuZGxlciAo L3Vzci9zcmMva2VybmVsL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jOjQyOCkKPiA+ IGVsMF9zeW5jICgvdXNyL3NyYy9rZXJuZWwvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUzo2NzEp Cj4gPiBDb2RlOiBhYTAwMDNmMyBiNTAwMDA2MCAxMjgwMDAwMyAxNDAwMDAwMiAoYjk0MDQ2NjMp Cj4gPgo+ID4gV2hlbiBib290aW5nIHRoZSBrZHVtcCBrZXJuZWwsIGRyYWluIHRoZSBzaGFyZWQg bWVtb3J5IGNhY2hlIHdoaWxlIGJlaW5nCj4gPiBjYXJlZnVsIHRvIG5vdCB0cmFuc2xhdGUgdGhl IGFkZHJlc3NlcyByZXR1cm5lZCBmcm9tCj4gPiBPUFRFRV9TTUNfRElTQUJMRV9TSE1fQ0FDSEUu IE9uY2UgdGhlIGludmFsaWQgY2FjaGUgb2JqZWN0cyBhcmUgZHJhaW5lZAo+ID4gYW5kIHRoZSBj YWNoZSBpcyBkaXNhYmxlZCwgcHJvY2VlZCB3aXRoIHJlLWVuYWJsaW5nIHRoZSBjYWNoZSBzbyB0 aGF0IHdlCj4gPiBhcmVuJ3QgZGVhbGluZyB3aXRoIGludmFsaWQgYWRkcmVzc2VzIHdoaWxlIHNo dXR0aW5nIGRvd24gdGhlIGtkdW1wCj4gPiBrZXJuZWwuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTog VHlsZXIgSGlja3MgPHR5aGlja3NAbGludXgubWljcm9zb2Z0LmNvbT4KPiA+IC0tLQo+ID4KPiA+ IFRoaXMgcGF0Y2ggZml4ZXMgYSBjcmFzaCBpbnRyb2R1Y2VkIGJ5ICJvcHRlZTogZml4IHRlZSBv dXQgb2YgbWVtb3J5Cj4gPiBmYWlsdXJlIHNlZW4gZHVyaW5nIGtleGVjIHJlYm9vdCJbMV0uIEhv d2V2ZXIsIEkgZG9uJ3QgdGhpbmsgdGhhdCB0aGUKPiA+IG9yaWdpbmFsIHR3byBwYXRjaCBzZXJp ZXNbMl0gcGx1cyB0aGlzIHBhdGNoIGlzIHRoZSBmdWxsIHNvbHV0aW9uIHRvCj4gPiBwcm9wZXJs eSBoYW5kbGluZyBPUC1URUUgc2hhcmVkIG1lbW9yeSBhY3Jvc3Mga2V4ZWMuCj4gPgo+ID4gV2hp bGUgdGVzdGluZyB0aGlzIGZpeCwgSSBkaWQgYWJvdXQgMTAga2V4ZWMgcmVib290cyBhbmQgdGhl biB0cmlnZ2VyZWQKPiA+IGEga2VybmVsIGNyYXNoIGJ5IHdyaXRpbmcgJ2MnIHRvIC9wcm9jL3N5 c3JxLXRyaWdnZXIuIFRoZSBrZHVtcCBrZXJuZWwKPiA+IGJlY2FtZSB1bnJlc3BvbnNpdmUgZHVy aW5nIGJvb3Qgd2hpbGUgc3RlYWRpbHkgc3RyZWFtaW5nIHRoZSBmb2xsb3dpbmcKPiA+IGVycm9y cyB0byB0aGUgc2VyaWFsIGNvbnNvbGU6Cj4gPgo+ID4gYXJtLXNtbXUgNjQwMDAwMDAubW11OiBC bG9ja2VkIHVua25vd24gU3RyZWFtIElEIDB4MjAwMDsgYm9vdCB3aXRoICJhcm0tc21tdS5kaXNh YmxlX2J5cGFzcz0wIiB0byBhbGxvdywgYnV0IHRoaXMgbWF5IGhhdmUgc2VjdXJpdHkgaW1wbGlj YXRpb25zCj4gPiBhcm0tc21tdSA2NDAwMDAwMC5tbXU6ICAgICBHRlNSIDB4MDAwMDAwMDIsIEdG U1lOUjAgMHgwMDAwMDAwMiwgR0ZTWU5SMSAweDAwMDAyMDAwLCBHRlNZTlIyIDB4MDAwMDAwMDAK PiA+Cj4gPiBJIHN1c3BlY3QgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIHByb2JsZW1zIG9m IE9QLVRFRSBzaGFyZWQgbWVtb3J5Cj4gPiBoYW5kbGluZyBhY3Jvc3Mga2V4ZWMuIE15IGN1cnJl bnQgaHVuY2ggaXMgdGhhdCB3aGlsZSB3ZSd2ZSBkaXNhYmxlZCB0aGUKPiA+IHNoYXJlZCBtZW1v cnkgY2FjaGUgd2l0aCB0aGlzIHBhdGNoLCB3ZSBoYXZlbid0IHVucmVnaXN0ZXJlZCBhbGwgb2Yg dGhlCj4gPiBhZGRyZXNzZXMgdGhhdCB0aGUgcHJldmlvdXMga2VybmVsICh3aGljaCBjcmFzaGVk KSBoYWQgcmVnaXN0ZXJlZCB3aXRoCj4gPiBPUC1URUUgYW5kIHRoYXQgcGVyaGFwcyBPUC1URUUg T1MgaXMgc3RpbGwgdHJ5aW5nIHRvIG1ha2UgdXNlIHRob3NlCj4gPiBhZGRyZXNzZXM/Cj4gPgo+ ID4gSSdtIHN0aWxsIHByZXR0eSBlYXJseSBpbiBpbnZlc3RpZ2F0aW5nIHRoYXQgYXNzdW1wdGlv biBhbmQKPiA+IEknbSBsZWFybmluZyBhYm91dCBPUC1URUUgYXMgSSBnbyBidXQgSSB3YW50ZWQg dG8gZ2V0IHRoaXMgaW5pdGlhbAo+ID4gZml4LW9mLXRoZS1maXggb3V0IHNvIHRoYXQgaXQgd2Fz IGNsZWFyIHRoYXQgdGhlIHYyIG9mIHRoZSBzZXJpZXNbMl0gaXMKPiA+IG5vdCBjb21wbGV0ZS4K PiA+Cj4gPiBbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDIxMDIyNTA5MDYxMC4y NDI2MjMtMi1hbGxlbi5sa21sQGdtYWlsLmNvbS8KPiA+IFsyXSBodHRwczovL2xvcmUua2VybmVs Lm9yZy9sa21sLzIwMjEwMjI1MDkwNjEwLjI0MjYyMy0xLWFsbGVuLmxrbWxAZ21haWwuY29tLyN0 Cj4gPgo+ID4gZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jICAgICAgICAgIHwgMTEgKysrKysrKysr Ky0KPiA+IGRyaXZlcnMvdGVlL29wdGVlL2NvcmUuYyAgICAgICAgICB8IDEzICsrKysrKysrKysr LS0KPiA+IGRyaXZlcnMvdGVlL29wdGVlL29wdGVlX3ByaXZhdGUuaCB8ICAyICstCj4gPiAzIGZp bGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL2NhbGwuYyBiL2RyaXZlcnMvdGVlL29wdGVlL2Nh bGwuYwo+ID4gaW5kZXggNjEzMmNjOGQwMTRjLi43OTllODRiZWM2M2QgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL3RlZS9vcHRlZS9jYWxsLmMKPiA+ICsrKyBiL2RyaXZlcnMvdGVlL29wdGVlL2Nh bGwuYwo+ID4gQEAgLTQxNyw4ICs0MTcsMTAgQEAgdm9pZCBvcHRlZV9lbmFibGVfc2htX2NhY2hl KHN0cnVjdCBvcHRlZSAqb3B0ZWUpCj4gPiAgKiBvcHRlZV9kaXNhYmxlX3NobV9jYWNoZSgpIC0g RGlzYWJsZXMgY2FjaGluZyBvZiBzb21lIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbgo+ID4gICog ICAgICAgICAgICAgICAgICAgICAgICAgIGluIE9QLVRFRQo+ID4gICogQG9wdGVlOiAgICBtYWlu IHNlcnZpY2Ugc3RydWN0Cj4gPiArICogQGlzX21hcHBlZDogICAgICAgdHJ1ZSBpZiB0aGUgY2Fj aGVkIHNoYXJlZCBtZW1vcnkgYWRkcmVzc2VzIHdlcmUgbWFwcGVkIGJ5IHRoaXMKPiA+ICsgKiAg ICAgICAgICAga2VybmVsLCBhcmUgc2FmZSB0byBkZXJlZmVyZW5jZSwgYW5kIHNob3VsZCBiZSBm cmVlZAo+ID4gICovCj4gPiAtdm9pZCBvcHRlZV9kaXNhYmxlX3NobV9jYWNoZShzdHJ1Y3Qgb3B0 ZWUgKm9wdGVlKQo+ID4gK3ZvaWQgb3B0ZWVfZGlzYWJsZV9zaG1fY2FjaGUoc3RydWN0IG9wdGVl ICpvcHRlZSwgYm9vbCBpc19tYXBwZWQpCj4gPiB7Cj4gPiAgICAgICBzdHJ1Y3Qgb3B0ZWVfY2Fs bF93YWl0ZXIgdzsKPiA+Cj4gPiBAQCAtNDM3LDYgKzQzOSwxMyBAQCB2b2lkIG9wdGVlX2Rpc2Fi bGVfc2htX2NhY2hlKHN0cnVjdCBvcHRlZSAqb3B0ZWUpCj4gPiAgICAgICAgICAgICAgIGlmIChy ZXMucmVzdWx0LnN0YXR1cyA9PSBPUFRFRV9TTUNfUkVUVVJOX09LKSB7Cj4gPiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRlZV9zaG0gKnNobTsKPiA+Cj4KPiAgVGhhbmtzIFR5bGVyLgo+ ICBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kIGZyb20gbXkgZW1haWwgZXhjaGFuZ2Ugd2l0aCBKZW5z LCBJIGRvbuKAmXQKPiBUaGluayB3ZSB3YW50IHRvIHRvdWNoIG9wdGVlX2Rpc2FibGVfc2htX2Nh Y2hlKCksIEkgY291bGQgYmUgd3JvbmcgdG9vLAo+IEBKZW5zLCBjb21tZW50cz8KCkNoYW5naW5n IG9wdGVlX2Rpc2FibGVfc2htX2NhY2hlKCkgaXMgZmluZS4gQmVhciBpbiBtaW5kIHRoYXQgdGhl cmUKYXJlIG90aGVyIHRpbWVzIHdoZXJlIHdlIGNhbid0IHJlY292ZXIgZnJvbSBhIGtlcm5lbCBj cmFzaC4gRm9yCmluc3RhbmNlIGlmIGEgdGhyZWFkIGlzIGV4ZWN1dGluZyBpbiBPUC1URUUgaW4g c2VjdXJlIHdvcmxkLgoKQ2hlZXJzLApKZW5zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==