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=-10.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 1FA22C49EA2 for ; Thu, 17 Jun 2021 17:24:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EE13D613D6 for ; Thu, 17 Jun 2021 17:24:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232079AbhFQR0Q (ORCPT ); Thu, 17 Jun 2021 13:26:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230457AbhFQR0M (ORCPT ); Thu, 17 Jun 2021 13:26:12 -0400 Received: from ustc.edu.cn (email6.ustc.edu.cn [IPv6:2001:da8:d800::8]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DF2D8C061574; Thu, 17 Jun 2021 10:24:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ustc.edu.cn; s=dkim; h=Received:Date:From:To:Cc:Subject: Message-ID:In-Reply-To:References:MIME-Version:Content-Type: Content-Transfer-Encoding; bh=zuggjvpts9K1MPrpdIvHo11IpZU+3fBBgN vj3uKB8go=; b=LC9c56KAMRzyY6jF6tJrrnm2AP/BU+w6jaBqnDueL7/gLpcyX9 YOyOIZE7seDq9O7BfrTIWe5yLV/wxWf2dMQn1BnztGRz3go7kojU4um1t2OedugQ DAgzKaVCn3kszuOIhJH1e19K83fKJbTuDFASqheNLE5Xc9rJN40uvcPh0= Received: from xhacker (unknown [101.86.20.15]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygBn1JTphMtgHwD3AA--.17025S2; Fri, 18 Jun 2021 01:22:50 +0800 (CST) Date: Fri, 18 Jun 2021 01:17:12 +0800 From: Jisheng Zhang To: Alex Ghiti Cc: Andreas Schwab , Paul Walmsley , Palmer Dabbelt , Albert Ou , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Luke Nelson , Xi Wang , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, netdev@vger.kernel.org, bpf@vger.kernel.org Subject: Re: [PATCH] riscv: Ensure BPF_JIT_REGION_START aligned with PMD size Message-ID: <20210618011712.2bbacb27@xhacker> In-Reply-To: <4cdb1261-6474-8ae6-7a92-a3be81ce8cb5@ghiti.fr> References: <20210330022144.150edc6e@xhacker> <20210330022521.2a904a8c@xhacker> <87o8ccqypw.fsf@igel.home> <20210612002334.6af72545@xhacker> <87bl8cqrpv.fsf@igel.home> <20210614010546.7a0d5584@xhacker> <87im2hsfvm.fsf@igel.home> <20210615004928.2d27d2ac@xhacker> <20210616080328.6548e762@xhacker> <4cdb1261-6474-8ae6-7a92-a3be81ce8cb5@ghiti.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: LkAmygBn1JTphMtgHwD3AA--.17025S2 X-Coremail-Antispam: 1UD129KBjvJXoWxtFW7Wr4xXrWkKFW3XFy3XFb_yoW7tFy8pF 15JF43KrW8Jr1UAryIv34Yvr1Utw1UAa47WrnrJr95AF15Kr1UZr10qrW7ur1qqry8C3Wx Krs0yrs2yFWUCaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkGb7Iv0xC_Kw4lb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Xr0_Ar1l84ACjcxK6xII jxv20xvEc7CjxVAFwI0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwV C2z280aVCY1x0267AKxVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVAC Y4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJV W8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lFIxGxcIEc7CjxVA2Y2ka0xkI wI1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxV WUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r4a6rW5MIIYrxkI 7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r 4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWrZr1j6s0DMIIF0xvEx4A2jsIE14v26r1j6r4U MIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07b5sjbUUU UU= X-CM-SenderInfo: xmv2xttqjtqzxdloh3xvwfhvlgxou0/ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 17 Jun 2021 09:23:04 +0200 Alex Ghiti wrote: > Le 16/06/2021 =C3=A0 02:03, Jisheng Zhang a =C3=A9crit=C2=A0: > > On Tue, 15 Jun 2021 20:54:19 +0200 > > Alex Ghiti wrote: > > =20 > >> Hi Jisheng, =20 > >=20 > > Hi Alex, > > =20 > >> > >> Le 14/06/2021 =C3=A0 18:49, Jisheng Zhang a =C3=A9crit=C2=A0: =20 > >>> From: Jisheng Zhang > >>> > >>> Andreas reported commit fc8504765ec5 ("riscv: bpf: Avoid breaking W^X= ") > >>> breaks booting with one kind of config file, I reproduced a kernel pa= nic > >>> with the config: > >>> > >>> [ 0.138553] Unable to handle kernel paging request at virtual addr= ess ffffffff81201220 > >>> [ 0.139159] Oops [#1] > >>> [ 0.139303] Modules linked in: > >>> [ 0.139601] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.0-rc5-d= efault+ #1 > >>> [ 0.139934] Hardware name: riscv-virtio,qemu (DT) > >>> [ 0.140193] epc : __memset+0xc4/0xfc > >>> [ 0.140416] ra : skb_flow_dissector_init+0x1e/0x82 > >>> [ 0.140609] epc : ffffffff8029806c ra : ffffffff8033be78 sp : ffff= ffe001647da0 > >>> [ 0.140878] gp : ffffffff81134b08 tp : ffffffe001654380 t0 : ffff= ffff81201158 > >>> [ 0.141156] t1 : 0000000000000002 t2 : 0000000000000154 s0 : ffff= ffe001647dd0 > >>> [ 0.141424] s1 : ffffffff80a43250 a0 : ffffffff81201220 a1 : 0000= 000000000000 > >>> [ 0.141654] a2 : 000000000000003c a3 : ffffffff81201258 a4 : 0000= 000000000064 > >>> [ 0.141893] a5 : ffffffff8029806c a6 : 0000000000000040 a7 : ffff= ffffffffffff > >>> [ 0.142126] s2 : ffffffff81201220 s3 : 0000000000000009 s4 : ffff= ffff81135088 > >>> [ 0.142353] s5 : ffffffff81135038 s6 : ffffffff8080ce80 s7 : ffff= ffff80800438 > >>> [ 0.142584] s8 : ffffffff80bc6578 s9 : 0000000000000008 s10: ffff= ffff806000ac > >>> [ 0.142810] s11: 0000000000000000 t3 : fffffffffffffffc t4 : 0000= 000000000000 > >>> [ 0.143042] t5 : 0000000000000155 t6 : 00000000000003ff > >>> [ 0.143220] status: 0000000000000120 badaddr: ffffffff81201220 cau= se: 000000000000000f > >>> [ 0.143560] [] __memset+0xc4/0xfc > >>> [ 0.143859] [] init_default_flow_dissectors+0x22= /0x60 > >>> [ 0.144092] [] do_one_initcall+0x3e/0x168 > >>> [ 0.144278] [] kernel_init_freeable+0x1c8/0x224 > >>> [ 0.144479] [] kernel_init+0x12/0x110 > >>> [ 0.144658] [] ret_from_exception+0x0/0xc > >>> [ 0.145124] ---[ end trace f1e9643daa46d591 ]--- > >>> > >>> After some investigation, I think I found the root cause: commit > >>> 2bfc6cd81bd ("move kernel mapping outside of linear mapping") moves > >>> BPF JIT region after the kernel: > >>> > >>> The &_end is unlikely aligned with PMD size, so the front bpf jit > >>> region sits with part of kernel .data section in one PMD size mapping. > >>> But kernel is mapped in PMD SIZE, when bpf_jit_binary_lock_ro() is > >>> called to make the first bpf jit prog ROX, we will make part of kernel > >>> .data section RO too, so when we write to, for example memset the > >>> .data section, MMU will trigger a store page fault. =20 > >> > >> Good catch, we make sure no physical allocation happens between _end a= nd > >> the next PMD aligned address, but I missed this one. > >> =20 > >>> > >>> To fix the issue, we need to ensure the BPF JIT region is PMD size > >>> aligned. This patch acchieve this goal by restoring the BPF JIT region > >>> to original position, I.E the 128MB before kernel .text section. =20 > >> > >> But I disagree with your solution: I made sure modules and BPF programs > >> get their own virtual regions to avoid worst case scenario where one > >> could allocate all the space and leave nothing to the other (we are > >> limited to +- 2GB offset). Why don't just align BPF_JIT_REGION_START to > >> the next PMD aligned address? =20 > >=20 > > Originally, I planed to fix the issue by aligning BPF_JIT_REGION_START,= but > > IIRC, BPF experts are adding (or have added) "Calling kernel functions = from BPF" > > feature, there's a risk that BPF JIT region is beyond the 2GB of module= region: > >=20 > > ------ > > module > > ------ > > kernel > > ------ > > BPF_JIT > >=20 > > So I made this patch finally. In this patch, we let BPF JIT region sit > > between module and kernel. > > =20 >=20 > From what I read in the lwn article, I'm not sure BPF programs can call= =20 > module functions, can someone tell us if it is possible? Or planned? What about module call BPF program? this case also wants the 2GB address li= mit. >=20 > > To address "make sure modules and BPF programs get their own virtual re= gions", > > what about something as below (applied against this patch)? > >=20 > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/= pgtable.h > > index 380cd3a7e548..da1158f10b09 100644 > > --- a/arch/riscv/include/asm/pgtable.h > > +++ b/arch/riscv/include/asm/pgtable.h > > @@ -31,7 +31,7 @@ > > #define BPF_JIT_REGION_SIZE (SZ_128M) > > #ifdef CONFIG_64BIT > > #define BPF_JIT_REGION_START (BPF_JIT_REGION_END - BPF_JIT_REGION_SIZ= E) > > -#define BPF_JIT_REGION_END (MODULES_END) > > +#define BPF_JIT_REGION_END (PFN_ALIGN((unsigned long)&_start)) > > #else > > #define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE) > > #define BPF_JIT_REGION_END (VMALLOC_END) > > @@ -40,7 +40,7 @@ > > /* Modules always live before the kernel */ > > #ifdef CONFIG_64BIT > > #define MODULES_VADDR (PFN_ALIGN((unsigned long)&_end) - SZ_2G) > > -#define MODULES_END (PFN_ALIGN((unsigned long)&_start)) > > +#define MODULES_END (BPF_JIT_REGION_END) > > #endif > > =20 > > =20 >=20 > In case it is possible, I would let the vmalloc allocator handle the=20 > case where modules steal room from BPF: I would then not implement the=20 > above but rather your first patch. >=20 > And do not forget to modify Documentation/riscv/vm-layout.rst=20 > accordingly and remove the comment "/* KASLR should leave at least 128MB= =20 > for BPF after the kernel */" Thanks for the comments 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=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,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 66312C2B9F4 for ; Thu, 17 Jun 2021 17:24:23 +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 C188A61026 for ; Thu, 17 Jun 2021 17:24:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C188A61026 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=mail.ustc.edu.cn Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=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:References:In-Reply-To: Message-ID:Subject: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=axJ7zbtm5qctXN1vZ46sRCGafu712BvZKFhPJIsOzRQ=; b=nRV9xIE/soYEwL cjh6FepMHf05MKs32Bs5HzN5gfZqa69aOQMh24qDRErA5HEteEv1equj7zAeIEeKY4oIQrN01KNoW XYjWgCxml/rNts+5L6CBmcb0Q6iL32GZ43jiBRVQnDJrgfrOLx3c50fwmQ2IwgAkz4/KU4k5m2itw FS6DXUTew615DGZGs2llaevMbdnbTOu86nKIyCLGHZSG7re+VeEYkeNHAXZn6NAE+E4ctCV+dIhti IaLhYVbLTIgBZo2TUAJ3rYsXw2vkNuXRlV3DRD6BeJr1WL+WsjOxotB5YlnFJU5UK4mxjYWKaG0z0 7Bp4rYqKjk69DQMmo24A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltvkH-00BCuY-EE; Thu, 17 Jun 2021 17:24:01 +0000 Received: from email6.ustc.edu.cn ([2001:da8:d800::8] helo=ustc.edu.cn) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltvkD-00BCtE-Dq for linux-riscv@lists.infradead.org; Thu, 17 Jun 2021 17:24:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ustc.edu.cn; s=dkim; h=Received:Date:From:To:Cc:Subject: Message-ID:In-Reply-To:References:MIME-Version:Content-Type: Content-Transfer-Encoding; bh=zuggjvpts9K1MPrpdIvHo11IpZU+3fBBgN vj3uKB8go=; b=LC9c56KAMRzyY6jF6tJrrnm2AP/BU+w6jaBqnDueL7/gLpcyX9 YOyOIZE7seDq9O7BfrTIWe5yLV/wxWf2dMQn1BnztGRz3go7kojU4um1t2OedugQ DAgzKaVCn3kszuOIhJH1e19K83fKJbTuDFASqheNLE5Xc9rJN40uvcPh0= Received: from xhacker (unknown [101.86.20.15]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygBn1JTphMtgHwD3AA--.17025S2; Fri, 18 Jun 2021 01:22:50 +0800 (CST) Date: Fri, 18 Jun 2021 01:17:12 +0800 From: Jisheng Zhang To: Alex Ghiti Cc: Andreas Schwab , Paul Walmsley , Palmer Dabbelt , Albert Ou , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Luke Nelson , Xi Wang , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, netdev@vger.kernel.org, bpf@vger.kernel.org Subject: Re: [PATCH] riscv: Ensure BPF_JIT_REGION_START aligned with PMD size Message-ID: <20210618011712.2bbacb27@xhacker> In-Reply-To: <4cdb1261-6474-8ae6-7a92-a3be81ce8cb5@ghiti.fr> References: <20210330022144.150edc6e@xhacker> <20210330022521.2a904a8c@xhacker> <87o8ccqypw.fsf@igel.home> <20210612002334.6af72545@xhacker> <87bl8cqrpv.fsf@igel.home> <20210614010546.7a0d5584@xhacker> <87im2hsfvm.fsf@igel.home> <20210615004928.2d27d2ac@xhacker> <20210616080328.6548e762@xhacker> <4cdb1261-6474-8ae6-7a92-a3be81ce8cb5@ghiti.fr> MIME-Version: 1.0 X-CM-TRANSID: LkAmygBn1JTphMtgHwD3AA--.17025S2 X-Coremail-Antispam: 1UD129KBjvJXoWxtFW7Wr4xXrWkKFW3XFy3XFb_yoW7tFy8pF 15JF43KrW8Jr1UAryIv34Yvr1Utw1UAa47WrnrJr95AF15Kr1UZr10qrW7ur1qqry8C3Wx Krs0yrs2yFWUCaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkGb7Iv0xC_Kw4lb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Xr0_Ar1l84ACjcxK6xII jxv20xvEc7CjxVAFwI0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwV C2z280aVCY1x0267AKxVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVAC Y4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJV W8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lFIxGxcIEc7CjxVA2Y2ka0xkI wI1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxV WUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r4a6rW5MIIYrxkI 7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r 4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWrZr1j6s0DMIIF0xvEx4A2jsIE14v26r1j6r4U MIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07b5sjbUUU UU= X-CM-SenderInfo: xmv2xttqjtqzxdloh3xvwfhvlgxou0/ X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210617_102358_328632_9FD0B071 X-CRM114-Status: GOOD ( 31.36 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVGh1LCAxNyBKdW4gMjAyMSAwOToyMzowNCArMDIwMApBbGV4IEdoaXRpIDxhbGV4QGdoaXRp LmZyPiB3cm90ZToKCj4gTGUgMTYvMDYvMjAyMSDDoCAwMjowMywgSmlzaGVuZyBaaGFuZyBhIMOp Y3JpdMKgOgo+ID4gT24gVHVlLCAxNSBKdW4gMjAyMSAyMDo1NDoxOSArMDIwMAo+ID4gQWxleCBH aGl0aSA8YWxleEBnaGl0aS5mcj4gd3JvdGU6Cj4gPiAgIAo+ID4+IEhpIEppc2hlbmcsICAKPiA+ IAo+ID4gSGkgQWxleCwKPiA+ICAgCj4gPj4KPiA+PiBMZSAxNC8wNi8yMDIxIMOgIDE4OjQ5LCBK aXNoZW5nIFpoYW5nIGEgw6ljcml0wqA6ICAKPiA+Pj4gRnJvbTogSmlzaGVuZyBaaGFuZyA8anN6 aGFuZ0BrZXJuZWwub3JnPgo+ID4+Pgo+ID4+PiBBbmRyZWFzIHJlcG9ydGVkIGNvbW1pdCBmYzg1 MDQ3NjVlYzUgKCJyaXNjdjogYnBmOiBBdm9pZCBicmVha2luZyBXXlgiKQo+ID4+PiBicmVha3Mg Ym9vdGluZyB3aXRoIG9uZSBraW5kIG9mIGNvbmZpZyBmaWxlLCBJIHJlcHJvZHVjZWQgYSBrZXJu ZWwgcGFuaWMKPiA+Pj4gd2l0aCB0aGUgY29uZmlnOgo+ID4+Pgo+ID4+PiBbICAgIDAuMTM4NTUz XSBVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVxdWVzdCBhdCB2aXJ0dWFsIGFkZHJl c3MgZmZmZmZmZmY4MTIwMTIyMAo+ID4+PiBbICAgIDAuMTM5MTU5XSBPb3BzIFsjMV0KPiA+Pj4g WyAgICAwLjEzOTMwM10gTW9kdWxlcyBsaW5rZWQgaW46Cj4gPj4+IFsgICAgMC4xMzk2MDFdIENQ VTogMCBQSUQ6IDEgQ29tbTogc3dhcHBlci8wIE5vdCB0YWludGVkIDUuMTMuMC1yYzUtZGVmYXVs dCsgIzEKPiA+Pj4gWyAgICAwLjEzOTkzNF0gSGFyZHdhcmUgbmFtZTogcmlzY3YtdmlydGlvLHFl bXUgKERUKQo+ID4+PiBbICAgIDAuMTQwMTkzXSBlcGMgOiBfX21lbXNldCsweGM0LzB4ZmMKPiA+ Pj4gWyAgICAwLjE0MDQxNl0gIHJhIDogc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQrMHgxZS8weDgy Cj4gPj4+IFsgICAgMC4xNDA2MDldIGVwYyA6IGZmZmZmZmZmODAyOTgwNmMgcmEgOiBmZmZmZmZm ZjgwMzNiZTc4IHNwIDogZmZmZmZmZTAwMTY0N2RhMAo+ID4+PiBbICAgIDAuMTQwODc4XSAgZ3Ag OiBmZmZmZmZmZjgxMTM0YjA4IHRwIDogZmZmZmZmZTAwMTY1NDM4MCB0MCA6IGZmZmZmZmZmODEy MDExNTgKPiA+Pj4gWyAgICAwLjE0MTE1Nl0gIHQxIDogMDAwMDAwMDAwMDAwMDAwMiB0MiA6IDAw MDAwMDAwMDAwMDAxNTQgczAgOiBmZmZmZmZlMDAxNjQ3ZGQwCj4gPj4+IFsgICAgMC4xNDE0MjRd ICBzMSA6IGZmZmZmZmZmODBhNDMyNTAgYTAgOiBmZmZmZmZmZjgxMjAxMjIwIGExIDogMDAwMDAw MDAwMDAwMDAwMAo+ID4+PiBbICAgIDAuMTQxNjU0XSAgYTIgOiAwMDAwMDAwMDAwMDAwMDNjIGEz IDogZmZmZmZmZmY4MTIwMTI1OCBhNCA6IDAwMDAwMDAwMDAwMDAwNjQKPiA+Pj4gWyAgICAwLjE0 MTg5M10gIGE1IDogZmZmZmZmZmY4MDI5ODA2YyBhNiA6IDAwMDAwMDAwMDAwMDAwNDAgYTcgOiBm ZmZmZmZmZmZmZmZmZmZmCj4gPj4+IFsgICAgMC4xNDIxMjZdICBzMiA6IGZmZmZmZmZmODEyMDEy MjAgczMgOiAwMDAwMDAwMDAwMDAwMDA5IHM0IDogZmZmZmZmZmY4MTEzNTA4OAo+ID4+PiBbICAg IDAuMTQyMzUzXSAgczUgOiBmZmZmZmZmZjgxMTM1MDM4IHM2IDogZmZmZmZmZmY4MDgwY2U4MCBz NyA6IGZmZmZmZmZmODA4MDA0MzgKPiA+Pj4gWyAgICAwLjE0MjU4NF0gIHM4IDogZmZmZmZmZmY4 MGJjNjU3OCBzOSA6IDAwMDAwMDAwMDAwMDAwMDggczEwOiBmZmZmZmZmZjgwNjAwMGFjCj4gPj4+ IFsgICAgMC4xNDI4MTBdICBzMTE6IDAwMDAwMDAwMDAwMDAwMDAgdDMgOiBmZmZmZmZmZmZmZmZm ZmZjIHQ0IDogMDAwMDAwMDAwMDAwMDAwMAo+ID4+PiBbICAgIDAuMTQzMDQyXSAgdDUgOiAwMDAw MDAwMDAwMDAwMTU1IHQ2IDogMDAwMDAwMDAwMDAwMDNmZgo+ID4+PiBbICAgIDAuMTQzMjIwXSBz dGF0dXM6IDAwMDAwMDAwMDAwMDAxMjAgYmFkYWRkcjogZmZmZmZmZmY4MTIwMTIyMCBjYXVzZTog MDAwMDAwMDAwMDAwMDAwZgo+ID4+PiBbICAgIDAuMTQzNTYwXSBbPGZmZmZmZmZmODAyOTgwNmM+ XSBfX21lbXNldCsweGM0LzB4ZmMKPiA+Pj4gWyAgICAwLjE0Mzg1OV0gWzxmZmZmZmZmZjgwNjFl OTg0Pl0gaW5pdF9kZWZhdWx0X2Zsb3dfZGlzc2VjdG9ycysweDIyLzB4NjAKPiA+Pj4gWyAgICAw LjE0NDA5Ml0gWzxmZmZmZmZmZjgwMDAxMGZjPl0gZG9fb25lX2luaXRjYWxsKzB4M2UvMHgxNjgK PiA+Pj4gWyAgICAwLjE0NDI3OF0gWzxmZmZmZmZmZjgwNjAwZGYwPl0ga2VybmVsX2luaXRfZnJl ZWFibGUrMHgxYzgvMHgyMjQKPiA+Pj4gWyAgICAwLjE0NDQ3OV0gWzxmZmZmZmZmZjgwNDg2OGE4 Pl0ga2VybmVsX2luaXQrMHgxMi8weDExMAo+ID4+PiBbICAgIDAuMTQ0NjU4XSBbPGZmZmZmZmZm ODAwMDIyZGU+XSByZXRfZnJvbV9leGNlcHRpb24rMHgwLzB4Ywo+ID4+PiBbICAgIDAuMTQ1MTI0 XSAtLS1bIGVuZCB0cmFjZSBmMWU5NjQzZGFhNDZkNTkxIF0tLS0KPiA+Pj4KPiA+Pj4gQWZ0ZXIg c29tZSBpbnZlc3RpZ2F0aW9uLCBJIHRoaW5rIEkgZm91bmQgdGhlIHJvb3QgY2F1c2U6IGNvbW1p dAo+ID4+PiAyYmZjNmNkODFiZCAoIm1vdmUga2VybmVsIG1hcHBpbmcgb3V0c2lkZSBvZiBsaW5l YXIgbWFwcGluZyIpIG1vdmVzCj4gPj4+IEJQRiBKSVQgcmVnaW9uIGFmdGVyIHRoZSBrZXJuZWw6 Cj4gPj4+Cj4gPj4+IFRoZSAmX2VuZCBpcyB1bmxpa2VseSBhbGlnbmVkIHdpdGggUE1EIHNpemUs IHNvIHRoZSBmcm9udCBicGYgaml0Cj4gPj4+IHJlZ2lvbiBzaXRzIHdpdGggcGFydCBvZiBrZXJu ZWwgLmRhdGEgc2VjdGlvbiBpbiBvbmUgUE1EIHNpemUgbWFwcGluZy4KPiA+Pj4gQnV0IGtlcm5l bCBpcyBtYXBwZWQgaW4gUE1EIFNJWkUsIHdoZW4gYnBmX2ppdF9iaW5hcnlfbG9ja19ybygpIGlz Cj4gPj4+IGNhbGxlZCB0byBtYWtlIHRoZSBmaXJzdCBicGYgaml0IHByb2cgUk9YLCB3ZSB3aWxs IG1ha2UgcGFydCBvZiBrZXJuZWwKPiA+Pj4gLmRhdGEgc2VjdGlvbiBSTyB0b28sIHNvIHdoZW4g d2Ugd3JpdGUgdG8sIGZvciBleGFtcGxlIG1lbXNldCB0aGUKPiA+Pj4gLmRhdGEgc2VjdGlvbiwg TU1VIHdpbGwgdHJpZ2dlciBhIHN0b3JlIHBhZ2UgZmF1bHQuICAKPiA+Pgo+ID4+IEdvb2QgY2F0 Y2gsIHdlIG1ha2Ugc3VyZSBubyBwaHlzaWNhbCBhbGxvY2F0aW9uIGhhcHBlbnMgYmV0d2VlbiBf ZW5kIGFuZAo+ID4+IHRoZSBuZXh0IFBNRCBhbGlnbmVkIGFkZHJlc3MsIGJ1dCBJIG1pc3NlZCB0 aGlzIG9uZS4KPiA+PiAgCj4gPj4+Cj4gPj4+IFRvIGZpeCB0aGUgaXNzdWUsIHdlIG5lZWQgdG8g ZW5zdXJlIHRoZSBCUEYgSklUIHJlZ2lvbiBpcyBQTUQgc2l6ZQo+ID4+PiBhbGlnbmVkLiBUaGlz IHBhdGNoIGFjY2hpZXZlIHRoaXMgZ29hbCBieSByZXN0b3JpbmcgdGhlIEJQRiBKSVQgcmVnaW9u Cj4gPj4+IHRvIG9yaWdpbmFsIHBvc2l0aW9uLCBJLkUgdGhlIDEyOE1CIGJlZm9yZSBrZXJuZWwg LnRleHQgc2VjdGlvbi4gIAo+ID4+Cj4gPj4gQnV0IEkgZGlzYWdyZWUgd2l0aCB5b3VyIHNvbHV0 aW9uOiBJIG1hZGUgc3VyZSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3JhbXMKPiA+PiBnZXQgdGhlaXIg b3duIHZpcnR1YWwgcmVnaW9ucyB0byBhdm9pZCB3b3JzdCBjYXNlIHNjZW5hcmlvIHdoZXJlIG9u ZQo+ID4+IGNvdWxkIGFsbG9jYXRlIGFsbCB0aGUgc3BhY2UgYW5kIGxlYXZlIG5vdGhpbmcgdG8g dGhlIG90aGVyICh3ZSBhcmUKPiA+PiBsaW1pdGVkIHRvICstIDJHQiBvZmZzZXQpLiBXaHkgZG9u J3QganVzdCBhbGlnbiBCUEZfSklUX1JFR0lPTl9TVEFSVCB0bwo+ID4+IHRoZSBuZXh0IFBNRCBh bGlnbmVkIGFkZHJlc3M/ICAKPiA+IAo+ID4gT3JpZ2luYWxseSwgSSBwbGFuZWQgdG8gZml4IHRo ZSBpc3N1ZSBieSBhbGlnbmluZyBCUEZfSklUX1JFR0lPTl9TVEFSVCwgYnV0Cj4gPiBJSVJDLCBC UEYgZXhwZXJ0cyBhcmUgYWRkaW5nIChvciBoYXZlIGFkZGVkKSAiQ2FsbGluZyBrZXJuZWwgZnVu Y3Rpb25zIGZyb20gQlBGIgo+ID4gZmVhdHVyZSwgdGhlcmUncyBhIHJpc2sgdGhhdCBCUEYgSklU IHJlZ2lvbiBpcyBiZXlvbmQgdGhlIDJHQiBvZiBtb2R1bGUgcmVnaW9uOgo+ID4gCj4gPiAtLS0t LS0KPiA+IG1vZHVsZQo+ID4gLS0tLS0tCj4gPiBrZXJuZWwKPiA+IC0tLS0tLQo+ID4gQlBGX0pJ VAo+ID4gCj4gPiBTbyBJIG1hZGUgdGhpcyBwYXRjaCBmaW5hbGx5LiBJbiB0aGlzIHBhdGNoLCB3 ZSBsZXQgQlBGIEpJVCByZWdpb24gc2l0Cj4gPiBiZXR3ZWVuIG1vZHVsZSBhbmQga2VybmVsLgo+ ID4gICAKPiAKPiAgRnJvbSB3aGF0IEkgcmVhZCBpbiB0aGUgbHduIGFydGljbGUsIEknbSBub3Qg c3VyZSBCUEYgcHJvZ3JhbXMgY2FuIGNhbGwgCj4gbW9kdWxlIGZ1bmN0aW9ucywgY2FuIHNvbWVv bmUgdGVsbCB1cyBpZiBpdCBpcyBwb3NzaWJsZT8gT3IgcGxhbm5lZD8KCldoYXQgYWJvdXQgbW9k dWxlIGNhbGwgQlBGIHByb2dyYW0/IHRoaXMgY2FzZSBhbHNvIHdhbnRzIHRoZSAyR0IgYWRkcmVz cyBsaW1pdC4KCj4gCj4gPiBUbyBhZGRyZXNzICJtYWtlIHN1cmUgbW9kdWxlcyBhbmQgQlBGIHBy b2dyYW1zIGdldCB0aGVpciBvd24gdmlydHVhbCByZWdpb25zIiwKPiA+IHdoYXQgYWJvdXQgc29t ZXRoaW5nIGFzIGJlbG93IChhcHBsaWVkIGFnYWluc3QgdGhpcyBwYXRjaCk/Cj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gPiBpbmRleCAzODBjZDNhN2U1NDguLmRhMTE1OGYxMGIw OSAxMDA2NDQKPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gPiAr KysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+ID4gQEAgLTMxLDcgKzMxLDcg QEAKPiA+ICAgI2RlZmluZSBCUEZfSklUX1JFR0lPTl9TSVpFCShTWl8xMjhNKQo+ID4gICAjaWZk ZWYgQ09ORklHXzY0QklUCj4gPiAgICNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU1RBUlQJKEJQRl9K SVRfUkVHSU9OX0VORCAtIEJQRl9KSVRfUkVHSU9OX1NJWkUpCj4gPiAtI2RlZmluZSBCUEZfSklU X1JFR0lPTl9FTkQJKE1PRFVMRVNfRU5EKQo+ID4gKyNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5E CShQRk5fQUxJR04oKHVuc2lnbmVkIGxvbmcpJl9zdGFydCkpCj4gPiAgICNlbHNlCj4gPiAgICNk ZWZpbmUgQlBGX0pJVF9SRUdJT05fU1RBUlQJKFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05f U0laRSkKPiA+ICAgI2RlZmluZSBCUEZfSklUX1JFR0lPTl9FTkQJKFZNQUxMT0NfRU5EKQo+ID4g QEAgLTQwLDcgKzQwLDcgQEAKPiA+ICAgLyogTW9kdWxlcyBhbHdheXMgbGl2ZSBiZWZvcmUgdGhl IGtlcm5lbCAqLwo+ID4gICAjaWZkZWYgQ09ORklHXzY0QklUCj4gPiAgICNkZWZpbmUgTU9EVUxF U19WQUREUgkoUEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSZfZW5kKSAtIFNaXzJHKQo+ID4gLSNk ZWZpbmUgTU9EVUxFU19FTkQJKFBGTl9BTElHTigodW5zaWduZWQgbG9uZykmX3N0YXJ0KSkKPiA+ ICsjZGVmaW5lIE1PRFVMRVNfRU5ECShCUEZfSklUX1JFR0lPTl9FTkQpCj4gPiAgICNlbmRpZgo+ ID4gICAKPiA+ICAgCj4gCj4gSW4gY2FzZSBpdCBpcyBwb3NzaWJsZSwgSSB3b3VsZCBsZXQgdGhl IHZtYWxsb2MgYWxsb2NhdG9yIGhhbmRsZSB0aGUgCj4gY2FzZSB3aGVyZSBtb2R1bGVzIHN0ZWFs IHJvb20gZnJvbSBCUEY6IEkgd291bGQgdGhlbiBub3QgaW1wbGVtZW50IHRoZSAKPiBhYm92ZSBi dXQgcmF0aGVyIHlvdXIgZmlyc3QgcGF0Y2guCj4gCj4gQW5kIGRvIG5vdCBmb3JnZXQgdG8gbW9k aWZ5IERvY3VtZW50YXRpb24vcmlzY3Yvdm0tbGF5b3V0LnJzdCAKPiBhY2NvcmRpbmdseSBhbmQg cmVtb3ZlIHRoZSBjb21tZW50ICIvKiBLQVNMUiBzaG91bGQgbGVhdmUgYXQgbGVhc3QgMTI4TUIg Cj4gZm9yIEJQRiBhZnRlciB0aGUga2VybmVsICovIgoKVGhhbmtzIGZvciB0aGUgY29tbWVudHMK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1y aXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==