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,URIBL_BLOCKED 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 D27AFC48BDF for ; Wed, 16 Jun 2021 00:10:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BDF5461246 for ; Wed, 16 Jun 2021 00:10:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231686AbhFPAM3 (ORCPT ); Tue, 15 Jun 2021 20:12:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57902 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230265AbhFPAM1 (ORCPT ); Tue, 15 Jun 2021 20:12:27 -0400 Received: from ustc.edu.cn (email6.ustc.edu.cn [IPv6:2001:da8:d800::8]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CC82AC061574; Tue, 15 Jun 2021 17:10:20 -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=xrXSnNViAas93oJJQqhck+SAOKfnt7nUQ7 BJjV5e790=; b=OuO33ODIaN0YB4D/lIa2vpsVVA4xRuT//ILI9OOmpqT5WMcC8s RLr3TPw3Ioi5n7p2l5CazNU+47RqNJsdfcRohTwI5VjRAH2/6krByjQ0FW+G4hMk 3QoQXazJVKKhax597HJP5qImN/r/hN01uPC4iQ0Di5cdtDoQsrFE/D3Nk= Received: from xhacker (unknown [101.86.20.15]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygD3+YEhQclgYtzmAA--.64455S2; Wed, 16 Jun 2021 08:09:05 +0800 (CST) Date: Wed, 16 Jun 2021 08:03:28 +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: <20210616080328.6548e762@xhacker> In-Reply-To: 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> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: LkAmygD3+YEhQclgYtzmAA--.64455S2 X-Coremail-Antispam: 1UD129KBjvJXoW3AFyfWF4Dtry5uw15Aw45GFg_yoW7KF4xpF 15Jr43GrW8Jryxu340vr90vF1UJa1UAa47JrnrJry8ZF13K3WUZw1FqF13Zr1qqFWxt3Wx Kr4qvr4vg3y5CaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkGb7Iv0xC_Kw4lb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_JFI_Gr1l84ACjcxK6xII 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 Tue, 15 Jun 2021 20:54:19 +0200 Alex Ghiti wrote: > Hi Jisheng, Hi Alex, >=20 > Le 14/06/2021 =C3=A0 18:49, Jisheng Zhang a =C3=A9crit=C2=A0: > > From: Jisheng Zhang > >=20 > > Andreas reported commit fc8504765ec5 ("riscv: bpf: Avoid breaking W^X") > > breaks booting with one kind of config file, I reproduced a kernel panic > > with the config: > >=20 > > [ 0.138553] Unable to handle kernel paging request at virtual addres= s 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-def= ault+ #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 : ffffff= e001647da0 > > [ 0.140878] gp : ffffffff81134b08 tp : ffffffe001654380 t0 : ffffff= ff81201158 > > [ 0.141156] t1 : 0000000000000002 t2 : 0000000000000154 s0 : ffffff= e001647dd0 > > [ 0.141424] s1 : ffffffff80a43250 a0 : ffffffff81201220 a1 : 000000= 0000000000 > > [ 0.141654] a2 : 000000000000003c a3 : ffffffff81201258 a4 : 000000= 0000000064 > > [ 0.141893] a5 : ffffffff8029806c a6 : 0000000000000040 a7 : ffffff= ffffffffff > > [ 0.142126] s2 : ffffffff81201220 s3 : 0000000000000009 s4 : ffffff= ff81135088 > > [ 0.142353] s5 : ffffffff81135038 s6 : ffffffff8080ce80 s7 : ffffff= ff80800438 > > [ 0.142584] s8 : ffffffff80bc6578 s9 : 0000000000000008 s10: ffffff= ff806000ac > > [ 0.142810] s11: 0000000000000000 t3 : fffffffffffffffc t4 : 000000= 0000000000 > > [ 0.143042] t5 : 0000000000000155 t6 : 00000000000003ff > > [ 0.143220] status: 0000000000000120 badaddr: ffffffff81201220 cause= : 000000000000000f > > [ 0.143560] [] __memset+0xc4/0xfc > > [ 0.143859] [] init_default_flow_dissectors+0x22/0= x60 > > [ 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 ]--- > >=20 > > 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: > >=20 > > 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 >=20 > Good catch, we make sure no physical allocation happens between _end and= =20 > the next PMD aligned address, but I missed this one. >=20 > >=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 >=20 > But I disagree with your solution: I made sure modules and BPF programs=20 > get their own virtual regions to avoid worst case scenario where one=20 > could allocate all the space and leave nothing to the other (we are=20 > limited to +- 2GB offset). Why don't just align BPF_JIT_REGION_START to=20 > the next PMD aligned address? 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 reg= ion: ------ module ------ kernel ------ BPF_JIT So I made this patch finally. In this patch, we let BPF JIT region sit between module and kernel. To address "make sure modules and BPF programs get their own virtual region= s", what about something as below (applied against this patch)? diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgta= ble.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_SIZE) -#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 > Again, good catch, thanks, >=20 > Alex >=20 > >=20 > > Reported-by: Andreas Schwab > > Signed-off-by: Jisheng Zhang > > --- > > arch/riscv/include/asm/pgtable.h | 5 ++--- > > 1 file changed, 2 insertions(+), 3 deletions(-) > >=20 > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/= pgtable.h > > index 9469f464e71a..380cd3a7e548 100644 > > --- a/arch/riscv/include/asm/pgtable.h > > +++ b/arch/riscv/include/asm/pgtable.h > > @@ -30,9 +30,8 @@ > > =20 > > #define BPF_JIT_REGION_SIZE (SZ_128M) > > #ifdef CONFIG_64BIT > > -/* KASLR should leave at least 128MB for BPF after the kernel */ > > -#define BPF_JIT_REGION_START PFN_ALIGN((unsigned long)&_end) > > -#define BPF_JIT_REGION_END (BPF_JIT_REGION_START + BPF_JIT_REGION_SIZE) > > +#define BPF_JIT_REGION_START (BPF_JIT_REGION_END - BPF_JIT_REGION_SIZE) > > +#define BPF_JIT_REGION_END (MODULES_END) > > #else > > #define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE) > > #define BPF_JIT_REGION_END (VMALLOC_END) > > =20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.9 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 21EDDC48BE5 for ; Wed, 16 Jun 2021 00:10:35 +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 DAC3361246 for ; Wed, 16 Jun 2021 00:10:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DAC3361246 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=a56LzZ+vNC34ZERreCmOMM+c1TdtSRObEzQ/X8vV9ac=; b=OBP7PZTQQMhA9I 4CxxFcVgoWGPeCkKcbhPubo30nDcu65HtxppiNSKoqCuwk5VB1Blem7lR/TIerSV/Nhmni0aL5b0H YXp1kDTA69Yg3fJL49NlBLLDN7HWPSnYOUhxyKpOiLs6C/vjyu4po3sCAcvpap1kEhlZnUvOfC/63 u8K+96v1ocv9yMrv64rETBHimgNp2L2zxTkp3qzA9j8VdVSGwPuo/jjblehiwgJNab9hrQAee0xUn mxpUVJ7dox/WcgFffEgEmrwqjiQ2+bz5aO73XraXNKrKfwY/uOob+3rQrU9LXfVWLD6oqPSp10bA2 SuipjCCMOPWpklmn41Uw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltJ8M-0045Lj-S7; Wed, 16 Jun 2021 00:10:18 +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 1ltJ8I-0045Hi-DU for linux-riscv@lists.infradead.org; Wed, 16 Jun 2021 00:10:17 +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=xrXSnNViAas93oJJQqhck+SAOKfnt7nUQ7 BJjV5e790=; b=OuO33ODIaN0YB4D/lIa2vpsVVA4xRuT//ILI9OOmpqT5WMcC8s RLr3TPw3Ioi5n7p2l5CazNU+47RqNJsdfcRohTwI5VjRAH2/6krByjQ0FW+G4hMk 3QoQXazJVKKhax597HJP5qImN/r/hN01uPC4iQ0Di5cdtDoQsrFE/D3Nk= Received: from xhacker (unknown [101.86.20.15]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygD3+YEhQclgYtzmAA--.64455S2; Wed, 16 Jun 2021 08:09:05 +0800 (CST) Date: Wed, 16 Jun 2021 08:03:28 +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: <20210616080328.6548e762@xhacker> In-Reply-To: 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> MIME-Version: 1.0 X-CM-TRANSID: LkAmygD3+YEhQclgYtzmAA--.64455S2 X-Coremail-Antispam: 1UD129KBjvJXoW3AFyfWF4Dtry5uw15Aw45GFg_yoW7KF4xpF 15Jr43GrW8Jryxu340vr90vF1UJa1UAa47JrnrJry8ZF13K3WUZw1FqF13Zr1qqFWxt3Wx Kr4qvr4vg3y5CaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkGb7Iv0xC_Kw4lb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_JFI_Gr1l84ACjcxK6xII 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-20210615_171015_355189_E3A6C5E2 X-CRM114-Status: GOOD ( 26.21 ) 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 T24gVHVlLCAxNSBKdW4gMjAyMSAyMDo1NDoxOSArMDIwMApBbGV4IEdoaXRpIDxhbGV4QGdoaXRp LmZyPiB3cm90ZToKCj4gSGkgSmlzaGVuZywKCkhpIEFsZXgsCgo+IAo+IExlIDE0LzA2LzIwMjEg w6AgMTg6NDksIEppc2hlbmcgWmhhbmcgYSDDqWNyaXTCoDoKPiA+IEZyb206IEppc2hlbmcgWmhh bmcgPGpzemhhbmdAa2VybmVsLm9yZz4KPiA+IAo+ID4gQW5kcmVhcyByZXBvcnRlZCBjb21taXQg ZmM4NTA0NzY1ZWM1ICgicmlzY3Y6IGJwZjogQXZvaWQgYnJlYWtpbmcgV15YIikKPiA+IGJyZWFr cyBib290aW5nIHdpdGggb25lIGtpbmQgb2YgY29uZmlnIGZpbGUsIEkgcmVwcm9kdWNlZCBhIGtl cm5lbCBwYW5pYwo+ID4gd2l0aCB0aGUgY29uZmlnOgo+ID4gCj4gPiBbICAgIDAuMTM4NTUzXSBV bmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVxdWVzdCBhdCB2aXJ0dWFsIGFkZHJlc3Mg ZmZmZmZmZmY4MTIwMTIyMAo+ID4gWyAgICAwLjEzOTE1OV0gT29wcyBbIzFdCj4gPiBbICAgIDAu MTM5MzAzXSBNb2R1bGVzIGxpbmtlZCBpbjoKPiA+IFsgICAgMC4xMzk2MDFdIENQVTogMCBQSUQ6 IDEgQ29tbTogc3dhcHBlci8wIE5vdCB0YWludGVkIDUuMTMuMC1yYzUtZGVmYXVsdCsgIzEKPiA+ IFsgICAgMC4xMzk5MzRdIEhhcmR3YXJlIG5hbWU6IHJpc2N2LXZpcnRpbyxxZW11IChEVCkKPiA+ IFsgICAgMC4xNDAxOTNdIGVwYyA6IF9fbWVtc2V0KzB4YzQvMHhmYwo+ID4gWyAgICAwLjE0MDQx Nl0gIHJhIDogc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQrMHgxZS8weDgyCj4gPiBbICAgIDAuMTQw NjA5XSBlcGMgOiBmZmZmZmZmZjgwMjk4MDZjIHJhIDogZmZmZmZmZmY4MDMzYmU3OCBzcCA6IGZm ZmZmZmUwMDE2NDdkYTAKPiA+IFsgICAgMC4xNDA4NzhdICBncCA6IGZmZmZmZmZmODExMzRiMDgg dHAgOiBmZmZmZmZlMDAxNjU0MzgwIHQwIDogZmZmZmZmZmY4MTIwMTE1OAo+ID4gWyAgICAwLjE0 MTE1Nl0gIHQxIDogMDAwMDAwMDAwMDAwMDAwMiB0MiA6IDAwMDAwMDAwMDAwMDAxNTQgczAgOiBm ZmZmZmZlMDAxNjQ3ZGQwCj4gPiBbICAgIDAuMTQxNDI0XSAgczEgOiBmZmZmZmZmZjgwYTQzMjUw IGEwIDogZmZmZmZmZmY4MTIwMTIyMCBhMSA6IDAwMDAwMDAwMDAwMDAwMDAKPiA+IFsgICAgMC4x NDE2NTRdICBhMiA6IDAwMDAwMDAwMDAwMDAwM2MgYTMgOiBmZmZmZmZmZjgxMjAxMjU4IGE0IDog MDAwMDAwMDAwMDAwMDA2NAo+ID4gWyAgICAwLjE0MTg5M10gIGE1IDogZmZmZmZmZmY4MDI5ODA2 YyBhNiA6IDAwMDAwMDAwMDAwMDAwNDAgYTcgOiBmZmZmZmZmZmZmZmZmZmZmCj4gPiBbICAgIDAu MTQyMTI2XSAgczIgOiBmZmZmZmZmZjgxMjAxMjIwIHMzIDogMDAwMDAwMDAwMDAwMDAwOSBzNCA6 IGZmZmZmZmZmODExMzUwODgKPiA+IFsgICAgMC4xNDIzNTNdICBzNSA6IGZmZmZmZmZmODExMzUw MzggczYgOiBmZmZmZmZmZjgwODBjZTgwIHM3IDogZmZmZmZmZmY4MDgwMDQzOAo+ID4gWyAgICAw LjE0MjU4NF0gIHM4IDogZmZmZmZmZmY4MGJjNjU3OCBzOSA6IDAwMDAwMDAwMDAwMDAwMDggczEw OiBmZmZmZmZmZjgwNjAwMGFjCj4gPiBbICAgIDAuMTQyODEwXSAgczExOiAwMDAwMDAwMDAwMDAw MDAwIHQzIDogZmZmZmZmZmZmZmZmZmZmYyB0NCA6IDAwMDAwMDAwMDAwMDAwMDAKPiA+IFsgICAg MC4xNDMwNDJdICB0NSA6IDAwMDAwMDAwMDAwMDAxNTUgdDYgOiAwMDAwMDAwMDAwMDAwM2ZmCj4g PiBbICAgIDAuMTQzMjIwXSBzdGF0dXM6IDAwMDAwMDAwMDAwMDAxMjAgYmFkYWRkcjogZmZmZmZm ZmY4MTIwMTIyMCBjYXVzZTogMDAwMDAwMDAwMDAwMDAwZgo+ID4gWyAgICAwLjE0MzU2MF0gWzxm ZmZmZmZmZjgwMjk4MDZjPl0gX19tZW1zZXQrMHhjNC8weGZjCj4gPiBbICAgIDAuMTQzODU5XSBb PGZmZmZmZmZmODA2MWU5ODQ+XSBpbml0X2RlZmF1bHRfZmxvd19kaXNzZWN0b3JzKzB4MjIvMHg2 MAo+ID4gWyAgICAwLjE0NDA5Ml0gWzxmZmZmZmZmZjgwMDAxMGZjPl0gZG9fb25lX2luaXRjYWxs KzB4M2UvMHgxNjgKPiA+IFsgICAgMC4xNDQyNzhdIFs8ZmZmZmZmZmY4MDYwMGRmMD5dIGtlcm5l bF9pbml0X2ZyZWVhYmxlKzB4MWM4LzB4MjI0Cj4gPiBbICAgIDAuMTQ0NDc5XSBbPGZmZmZmZmZm ODA0ODY4YTg+XSBrZXJuZWxfaW5pdCsweDEyLzB4MTEwCj4gPiBbICAgIDAuMTQ0NjU4XSBbPGZm ZmZmZmZmODAwMDIyZGU+XSByZXRfZnJvbV9leGNlcHRpb24rMHgwLzB4Ywo+ID4gWyAgICAwLjE0 NTEyNF0gLS0tWyBlbmQgdHJhY2UgZjFlOTY0M2RhYTQ2ZDU5MSBdLS0tCj4gPiAKPiA+IEFmdGVy IHNvbWUgaW52ZXN0aWdhdGlvbiwgSSB0aGluayBJIGZvdW5kIHRoZSByb290IGNhdXNlOiBjb21t aXQKPiA+IDJiZmM2Y2Q4MWJkICgibW92ZSBrZXJuZWwgbWFwcGluZyBvdXRzaWRlIG9mIGxpbmVh ciBtYXBwaW5nIikgbW92ZXMKPiA+IEJQRiBKSVQgcmVnaW9uIGFmdGVyIHRoZSBrZXJuZWw6Cj4g PiAKPiA+IFRoZSAmX2VuZCBpcyB1bmxpa2VseSBhbGlnbmVkIHdpdGggUE1EIHNpemUsIHNvIHRo ZSBmcm9udCBicGYgaml0Cj4gPiByZWdpb24gc2l0cyB3aXRoIHBhcnQgb2Yga2VybmVsIC5kYXRh IHNlY3Rpb24gaW4gb25lIFBNRCBzaXplIG1hcHBpbmcuCj4gPiBCdXQga2VybmVsIGlzIG1hcHBl ZCBpbiBQTUQgU0laRSwgd2hlbiBicGZfaml0X2JpbmFyeV9sb2NrX3JvKCkgaXMKPiA+IGNhbGxl ZCB0byBtYWtlIHRoZSBmaXJzdCBicGYgaml0IHByb2cgUk9YLCB3ZSB3aWxsIG1ha2UgcGFydCBv ZiBrZXJuZWwKPiA+IC5kYXRhIHNlY3Rpb24gUk8gdG9vLCBzbyB3aGVuIHdlIHdyaXRlIHRvLCBm b3IgZXhhbXBsZSBtZW1zZXQgdGhlCj4gPiAuZGF0YSBzZWN0aW9uLCBNTVUgd2lsbCB0cmlnZ2Vy IGEgc3RvcmUgcGFnZSBmYXVsdC4gIAo+IAo+IEdvb2QgY2F0Y2gsIHdlIG1ha2Ugc3VyZSBubyBw aHlzaWNhbCBhbGxvY2F0aW9uIGhhcHBlbnMgYmV0d2VlbiBfZW5kIGFuZCAKPiB0aGUgbmV4dCBQ TUQgYWxpZ25lZCBhZGRyZXNzLCBidXQgSSBtaXNzZWQgdGhpcyBvbmUuCj4gCj4gPiAKPiA+IFRv IGZpeCB0aGUgaXNzdWUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBCUEYgSklUIHJlZ2lvbiBpcyBQ TUQgc2l6ZQo+ID4gYWxpZ25lZC4gVGhpcyBwYXRjaCBhY2NoaWV2ZSB0aGlzIGdvYWwgYnkgcmVz dG9yaW5nIHRoZSBCUEYgSklUIHJlZ2lvbgo+ID4gdG8gb3JpZ2luYWwgcG9zaXRpb24sIEkuRSB0 aGUgMTI4TUIgYmVmb3JlIGtlcm5lbCAudGV4dCBzZWN0aW9uLiAgCj4gCj4gQnV0IEkgZGlzYWdy ZWUgd2l0aCB5b3VyIHNvbHV0aW9uOiBJIG1hZGUgc3VyZSBtb2R1bGVzIGFuZCBCUEYgcHJvZ3Jh bXMgCj4gZ2V0IHRoZWlyIG93biB2aXJ0dWFsIHJlZ2lvbnMgdG8gYXZvaWQgd29yc3QgY2FzZSBz Y2VuYXJpbyB3aGVyZSBvbmUgCj4gY291bGQgYWxsb2NhdGUgYWxsIHRoZSBzcGFjZSBhbmQgbGVh dmUgbm90aGluZyB0byB0aGUgb3RoZXIgKHdlIGFyZSAKPiBsaW1pdGVkIHRvICstIDJHQiBvZmZz ZXQpLiBXaHkgZG9uJ3QganVzdCBhbGlnbiBCUEZfSklUX1JFR0lPTl9TVEFSVCB0byAKPiB0aGUg bmV4dCBQTUQgYWxpZ25lZCBhZGRyZXNzPwoKT3JpZ2luYWxseSwgSSBwbGFuZWQgdG8gZml4IHRo ZSBpc3N1ZSBieSBhbGlnbmluZyBCUEZfSklUX1JFR0lPTl9TVEFSVCwgYnV0CklJUkMsIEJQRiBl eHBlcnRzIGFyZSBhZGRpbmcgKG9yIGhhdmUgYWRkZWQpICJDYWxsaW5nIGtlcm5lbCBmdW5jdGlv bnMgZnJvbSBCUEYiCmZlYXR1cmUsIHRoZXJlJ3MgYSByaXNrIHRoYXQgQlBGIEpJVCByZWdpb24g aXMgYmV5b25kIHRoZSAyR0Igb2YgbW9kdWxlIHJlZ2lvbjoKCi0tLS0tLQptb2R1bGUKLS0tLS0t Cmtlcm5lbAotLS0tLS0KQlBGX0pJVAoKU28gSSBtYWRlIHRoaXMgcGF0Y2ggZmluYWxseS4gSW4g dGhpcyBwYXRjaCwgd2UgbGV0IEJQRiBKSVQgcmVnaW9uIHNpdApiZXR3ZWVuIG1vZHVsZSBhbmQg a2VybmVsLgoKVG8gYWRkcmVzcyAibWFrZSBzdXJlIG1vZHVsZXMgYW5kIEJQRiBwcm9ncmFtcyBn ZXQgdGhlaXIgb3duIHZpcnR1YWwgcmVnaW9ucyIsCndoYXQgYWJvdXQgc29tZXRoaW5nIGFzIGJl bG93IChhcHBsaWVkIGFnYWluc3QgdGhpcyBwYXRjaCk/CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUu aAppbmRleCAzODBjZDNhN2U1NDguLmRhMTE1OGYxMGIwOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU0laRQkoU1pf MTI4TSkKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQlBGX0pJVF9SRUdJT05fU1RBUlQJ KEJQRl9KSVRfUkVHSU9OX0VORCAtIEJQRl9KSVRfUkVHSU9OX1NJWkUpCi0jZGVmaW5lIEJQRl9K SVRfUkVHSU9OX0VORAkoTU9EVUxFU19FTkQpCisjZGVmaW5lIEJQRl9KSVRfUkVHSU9OX0VORAko UEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSZfc3RhcnQpKQogI2Vsc2UKICNkZWZpbmUgQlBGX0pJ VF9SRUdJT05fU1RBUlQJKFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSkKICNkZWZp bmUgQlBGX0pJVF9SRUdJT05fRU5ECShWTUFMTE9DX0VORCkKQEAgLTQwLDcgKzQwLDcgQEAKIC8q IE1vZHVsZXMgYWx3YXlzIGxpdmUgYmVmb3JlIHRoZSBrZXJuZWwgKi8KICNpZmRlZiBDT05GSUdf NjRCSVQKICNkZWZpbmUgTU9EVUxFU19WQUREUgkoUEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSZf ZW5kKSAtIFNaXzJHKQotI2RlZmluZSBNT0RVTEVTX0VORAkoUEZOX0FMSUdOKCh1bnNpZ25lZCBs b25nKSZfc3RhcnQpKQorI2RlZmluZSBNT0RVTEVTX0VORAkoQlBGX0pJVF9SRUdJT05fRU5EKQog I2VuZGlmCiAKCgo+IAo+IEFnYWluLCBnb29kIGNhdGNoLCB0aGFua3MsCj4gCj4gQWxleAo+IAo+ ID4gCj4gPiBSZXBvcnRlZC1ieTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBsaW51eC1tNjhrLm9y Zz4KPiA+IFNpZ25lZC1vZmYtYnk6IEppc2hlbmcgWmhhbmcgPGpzemhhbmdAa2VybmVsLm9yZz4K PiA+IC0tLQo+ID4gICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCB8IDUgKystLS0K PiA+ICAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiA+ IAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKPiA+IGluZGV4IDk0NjlmNDY0ZTcxYS4uMzgw Y2QzYTdlNTQ4IDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxl LmgKPiA+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gPiBAQCAtMzAs OSArMzAsOCBAQAo+ID4gICAKPiA+ICAgI2RlZmluZSBCUEZfSklUX1JFR0lPTl9TSVpFCShTWl8x MjhNKQo+ID4gICAjaWZkZWYgQ09ORklHXzY0QklUCj4gPiAtLyogS0FTTFIgc2hvdWxkIGxlYXZl IGF0IGxlYXN0IDEyOE1CIGZvciBCUEYgYWZ0ZXIgdGhlIGtlcm5lbCAqLwo+ID4gLSNkZWZpbmUg QlBGX0pJVF9SRUdJT05fU1RBUlQJUEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSZfZW5kKQo+ID4g LSNkZWZpbmUgQlBGX0pJVF9SRUdJT05fRU5ECShCUEZfSklUX1JFR0lPTl9TVEFSVCArIEJQRl9K SVRfUkVHSU9OX1NJWkUpCj4gPiArI2RlZmluZSBCUEZfSklUX1JFR0lPTl9TVEFSVAkoQlBGX0pJ VF9SRUdJT05fRU5EIC0gQlBGX0pJVF9SRUdJT05fU0laRSkKPiA+ICsjZGVmaW5lIEJQRl9KSVRf UkVHSU9OX0VORAkoTU9EVUxFU19FTkQpCj4gPiAgICNlbHNlCj4gPiAgICNkZWZpbmUgQlBGX0pJ VF9SRUdJT05fU1RBUlQJKFBBR0VfT0ZGU0VUIC0gQlBGX0pJVF9SRUdJT05fU0laRSkKPiA+ICAg I2RlZmluZSBCUEZfSklUX1JFR0lPTl9FTkQJKFZNQUxMT0NfRU5EKQo+ID4gICAKCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFp bGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=