From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-23.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 09560C433F5 for ; Sat, 18 Sep 2021 11:51:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D603F6127A for ; Sat, 18 Sep 2021 11:51:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239228AbhIRLwt (ORCPT ); Sat, 18 Sep 2021 07:52:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229793AbhIRLwr (ORCPT ); Sat, 18 Sep 2021 07:52:47 -0400 Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2301EC061574 for ; Sat, 18 Sep 2021 04:51:24 -0700 (PDT) Received: by mail-qk1-x732.google.com with SMTP id d207so783527qkg.0 for ; Sat, 18 Sep 2021 04:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=g4n08dQJMaesgf8J0xabMK1i7+F7RpBHsMNZa6B0wFg=; b=kzWzPD2OTo3AoR3YUbcKUTvuPomBIwyHNutpylLO4dyxop9LNKyN83OOzTBf5xOfbG palrNbSl3yYDiHHkNdKTCkaUzLfPSjDceELxuIfSJDUODVmrHGOxwsPPEVhZ2XiXOlmu icto1EIK4b4TVOa0AYEFpqNsXTB3vn7QPZzOITfuaTlWDy+3cVheevaScmgyqm8RU8vO q7dnaiw19rTJJPTtIbJE5aepi2zTarHawu8cR4cXZeXI+6wLQaHZCDHR4k7awsZuArPC DrcCmM2+DynazvPFVqXCJ7MF41nk/2fh3tegc00LA/8ZjDQo+PBcxORZ8yBh8cTaWecq 0NcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=g4n08dQJMaesgf8J0xabMK1i7+F7RpBHsMNZa6B0wFg=; b=rldRbZE9mN2NOs4TfeuOo4m8FQNPUXO+v+Qac/K9Z5nKHgpdXaDxZyfAiMN13Z/cv3 dbS75vN9xd17eoEiakCmQYp/dk7JKBEwCicXX7/H+/i1kJW8BLx5GtmlccoDQ+PFlONP J4culn24338lYDVIYMWip0gokYnr55LBpj3BeawlDPbLud6JqPG8u3QSZRtBhzSoPUpk MBTC214T/COMwRp2IPTYkCfbVDAm4R2ICZWUgvm3IYp4yYUn75VuVN9GZEmo7q8+Xpq8 9W4Zs0dbD4+B18yoLsthlcJ5/vjmh/3VI360CBIPI2L2bc1dYtdJCQ7qtiN1NgPRLKMa M21A== X-Gm-Message-State: AOAM5320MANS4myU9S6D6ysOFdGOfpwDlS0gVMG6wqPp8rjUI2qVHY5V 9xW8vpUelRU3U1DlGbCMOFPNhQMtWLoX05RP63bjRw== X-Google-Smtp-Source: ABdhPJw6nm/tu1SpaJKqigIsT+zeE1Q1htjNV3dad6CRknHLmXfrcki23xGNwNIDYw0HWj/iTdOC0pqCJ3mmdDzVrfs= X-Received: by 2002:a37:f903:: with SMTP id l3mr14896801qkj.502.1631965883097; Sat, 18 Sep 2021 04:51:23 -0700 (PDT) MIME-Version: 1.0 References: <20210918083849.2696287-1-liushixin2@huawei.com> In-Reply-To: <20210918083849.2696287-1-liushixin2@huawei.com> From: Alexander Potapenko Date: Sat, 18 Sep 2021 13:50:47 +0200 Message-ID: Subject: Re: [PATCH] arm64: remove page granularity limitation from KFENCE To: Liu Shixin Cc: Marco Elver , Dmitry Vyukov , Catalin Marinas , Will Deacon , kasan-dev , Linux ARM , LKML , Jisheng.Zhang@synaptics.com, Ard Biesheuvel , Mark Rutland 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 Sat, Sep 18, 2021 at 10:10 AM Liu Shixin wrote: > > Currently if KFENCE is enabled in arm64, the entire linear map will be > mapped at page granularity which seems overkilled. Actually only the > kfence pool requires to be mapped at page granularity. We can remove the > restriction from KFENCE and force the linear mapping of the kfence pool > at page granularity later in arch_kfence_init_pool(). There was a previous patch by Jisheng Zhang intended to remove this requirement: https://lore.kernel.org/linux-arm-kernel/20210524180656.395e45= f6@xhacker.debian/ Which of the two is more preferable? > Signed-off-by: Liu Shixin > --- > arch/arm64/include/asm/kfence.h | 69 ++++++++++++++++++++++++++++++++- > arch/arm64/mm/mmu.c | 4 +- > 2 files changed, 70 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/include/asm/kfence.h b/arch/arm64/include/asm/kfe= nce.h > index aa855c6a0ae6..bee101eced0b 100644 > --- a/arch/arm64/include/asm/kfence.h > +++ b/arch/arm64/include/asm/kfence.h > @@ -8,9 +8,76 @@ > #ifndef __ASM_KFENCE_H > #define __ASM_KFENCE_H > > +#include > #include > +#include > > -static inline bool arch_kfence_init_pool(void) { return true; } > +static inline int split_pud_page(pud_t *pud, unsigned long addr) > +{ > + int i; > + pmd_t *pmd =3D pmd_alloc_one(&init_mm, addr); > + unsigned long pfn =3D PFN_DOWN(__pa(addr)); > + > + if (!pmd) > + return -ENOMEM; > + > + for (i =3D 0; i < PTRS_PER_PMD; i++) > + set_pmd(pmd + i, pmd_mkhuge(pfn_pmd(pfn + i * PTRS_PER_PT= E, PAGE_KERNEL))); > + > + smp_wmb(); /* See comment in __pte_alloc */ > + pud_populate(&init_mm, pud, pmd); > + flush_tlb_kernel_range(addr, addr + PUD_SIZE); > + return 0; > +} > + > +static inline int split_pmd_page(pmd_t *pmd, unsigned long addr) > +{ > + int i; > + pte_t *pte =3D pte_alloc_one_kernel(&init_mm); > + unsigned long pfn =3D PFN_DOWN(__pa(addr)); > + > + if (!pte) > + return -ENOMEM; > + > + for (i =3D 0; i < PTRS_PER_PTE; i++) > + set_pte(pte + i, pfn_pte(pfn + i, PAGE_KERNEL)); > + > + smp_wmb(); /* See comment in __pte_alloc */ > + pmd_populate_kernel(&init_mm, pmd, pte); > + > + flush_tlb_kernel_range(addr, addr + PMD_SIZE); > + return 0; > +} > + > +static inline bool arch_kfence_init_pool(void) > +{ > + unsigned long addr; > + pgd_t *pgd; > + p4d_t *p4d; > + pud_t *pud; > + pmd_t *pmd; > + > + for (addr =3D (unsigned long)__kfence_pool; is_kfence_address((vo= id *)addr); > + addr +=3D PAGE_SIZE) { > + pgd =3D pgd_offset(&init_mm, addr); > + if (pgd_leaf(*pgd)) > + return false; > + p4d =3D p4d_offset(pgd, addr); > + if (p4d_leaf(*p4d)) > + return false; > + pud =3D pud_offset(p4d, addr); > + if (pud_leaf(*pud)) { > + if (split_pud_page(pud, addr & PUD_MASK)) > + return false; > + } > + pmd =3D pmd_offset(pud, addr); > + if (pmd_leaf(*pmd)) { > + if (split_pmd_page(pmd, addr & PMD_MASK)) > + return false; > + } > + } > + return true; > +} > > static inline bool kfence_protect_page(unsigned long addr, bool protect) > { > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index cfd9deb347c3..b2c79ccfb1c5 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -516,7 +516,7 @@ static void __init map_mem(pgd_t *pgdp) > */ > BUILD_BUG_ON(pgd_index(direct_map_end - 1) =3D=3D pgd_index(direc= t_map_end)); > > - if (can_set_direct_map() || crash_mem_map || IS_ENABLED(CONFIG_KF= ENCE)) > + if (can_set_direct_map() || crash_mem_map) > flags |=3D NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; > > /* > @@ -1485,7 +1485,7 @@ int arch_add_memory(int nid, u64 start, u64 size, > * KFENCE requires linear map to be mapped at page granularity, s= o that > * it is possible to protect/unprotect single pages in the KFENCE= pool. > */ > - if (can_set_direct_map() || IS_ENABLED(CONFIG_KFENCE)) > + if (can_set_direct_map()) > flags |=3D NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; > > __create_pgd_mapping(swapper_pg_dir, start, __phys_to_virt(start)= , > -- > 2.18.0.huawei.25 > > -- > You received this message because you are subscribed to the Google Groups= "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an= email to kasan-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgi= d/kasan-dev/20210918083849.2696287-1-liushixin2%40huawei.com. --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg 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.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,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 99E5AC433EF for ; Sat, 18 Sep 2021 11:53:53 +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 650D861108 for ; Sat, 18 Sep 2021 11:53:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 650D861108 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=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: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=5gP9Z1GZkJrJwYIw9iLW0aHp1DrXmpdoiZ3pByEJ1c0=; b=EKzQOR4+KBtFpo jlAXoVqMBvetp5jflqYHg4wBCwsbR/7CmsEuYjbAwsav++cSF5Sk39aIv56v0qbsNwBqZV6G0MkC5 Zbitqv8KvImt/yhX/qu33fkPpyHCgSiwkZP3K7QYYeSwdXOcg46Nn0Nl8+6JQqk3QDtQvhusogEV1 rcCLqCmFGKov45Dhd4ohcK7pf+seK0z5gCml8FcQDNRb3DQfF0YzNqzNAz925xGqTFmk02HrA5ISt l6Pzak8AenC9ssT3aRDpBHjjRqK0SV8lbXgJaeqEe4+J1GetueAS/3xBfTWFazkL3wsDlIzwukiZS 9fsInS8tncr3CqJ3WsAg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mRYsX-00FqX9-9S; Sat, 18 Sep 2021 11:51:33 +0000 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mRYsS-00FqWX-Q2 for linux-arm-kernel@lists.infradead.org; Sat, 18 Sep 2021 11:51:30 +0000 Received: by mail-qk1-x732.google.com with SMTP id m21so25947300qkm.13 for ; Sat, 18 Sep 2021 04:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=g4n08dQJMaesgf8J0xabMK1i7+F7RpBHsMNZa6B0wFg=; b=kzWzPD2OTo3AoR3YUbcKUTvuPomBIwyHNutpylLO4dyxop9LNKyN83OOzTBf5xOfbG palrNbSl3yYDiHHkNdKTCkaUzLfPSjDceELxuIfSJDUODVmrHGOxwsPPEVhZ2XiXOlmu icto1EIK4b4TVOa0AYEFpqNsXTB3vn7QPZzOITfuaTlWDy+3cVheevaScmgyqm8RU8vO q7dnaiw19rTJJPTtIbJE5aepi2zTarHawu8cR4cXZeXI+6wLQaHZCDHR4k7awsZuArPC DrcCmM2+DynazvPFVqXCJ7MF41nk/2fh3tegc00LA/8ZjDQo+PBcxORZ8yBh8cTaWecq 0NcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=g4n08dQJMaesgf8J0xabMK1i7+F7RpBHsMNZa6B0wFg=; b=rO/FD8JbcAjuF8Jie1CqDRMbP9T7Fe1bh5ID0nDuozOelX32HkQRUiH+EGwML/zTsf hgCM7VaD8OQ/NenWKTNt/ckcjn1AUJpGhCRomk59cCtMgsuYtsnDmH5+uSNVDMyhd/jg 1ll49MPcjFAMqiiv5gxdQbFQjEdI0aNcOXOr4RyMjW/3oFG7QD3EYAB0FffasJBVhUOG Y5K3T/k8jZjlfF46BzFCosDv2h19beov9jJmvSGdtwiZTE2Ltk2c9YgUlND18Gg3uMWx hWKczb5CQZ9mIwGPY7zmtl5CdFbI4NLVr2yZ6CY8q9+APeSVsyZkn1ozhtU5oTv20yyF Q2tA== X-Gm-Message-State: AOAM533s02yZEV54gFRBBNK5W/S/nf11GG664M++oIvqNvyCwed74RFV 9bJ3U2QDafJYV+H4aSVx7rtMjzRFn94OrisuzaD7Xw== X-Google-Smtp-Source: ABdhPJw6nm/tu1SpaJKqigIsT+zeE1Q1htjNV3dad6CRknHLmXfrcki23xGNwNIDYw0HWj/iTdOC0pqCJ3mmdDzVrfs= X-Received: by 2002:a37:f903:: with SMTP id l3mr14896801qkj.502.1631965883097; Sat, 18 Sep 2021 04:51:23 -0700 (PDT) MIME-Version: 1.0 References: <20210918083849.2696287-1-liushixin2@huawei.com> In-Reply-To: <20210918083849.2696287-1-liushixin2@huawei.com> From: Alexander Potapenko Date: Sat, 18 Sep 2021 13:50:47 +0200 Message-ID: Subject: Re: [PATCH] arm64: remove page granularity limitation from KFENCE To: Liu Shixin Cc: Marco Elver , Dmitry Vyukov , Catalin Marinas , Will Deacon , kasan-dev , Linux ARM , LKML , Jisheng.Zhang@synaptics.com, Ard Biesheuvel , Mark Rutland X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210918_045128_908362_7169CBB2 X-CRM114-Status: GOOD ( 29.57 ) 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 T24gU2F0LCBTZXAgMTgsIDIwMjEgYXQgMTA6MTAgQU0gTGl1IFNoaXhpbiA8bGl1c2hpeGluMkBo dWF3ZWkuY29tPiB3cm90ZToKPgo+IEN1cnJlbnRseSBpZiBLRkVOQ0UgaXMgZW5hYmxlZCBpbiBh cm02NCwgdGhlIGVudGlyZSBsaW5lYXIgbWFwIHdpbGwgYmUKPiBtYXBwZWQgYXQgcGFnZSBncmFu dWxhcml0eSB3aGljaCBzZWVtcyBvdmVya2lsbGVkLiBBY3R1YWxseSBvbmx5IHRoZQo+IGtmZW5j ZSBwb29sIHJlcXVpcmVzIHRvIGJlIG1hcHBlZCBhdCBwYWdlIGdyYW51bGFyaXR5LiBXZSBjYW4g cmVtb3ZlIHRoZQo+IHJlc3RyaWN0aW9uIGZyb20gS0ZFTkNFIGFuZCBmb3JjZSB0aGUgbGluZWFy IG1hcHBpbmcgb2YgdGhlIGtmZW5jZSBwb29sCj4gYXQgcGFnZSBncmFudWxhcml0eSBsYXRlciBp biBhcmNoX2tmZW5jZV9pbml0X3Bvb2woKS4KClRoZXJlIHdhcyBhIHByZXZpb3VzIHBhdGNoIGJ5 IEppc2hlbmcgWmhhbmcgaW50ZW5kZWQgdG8gcmVtb3ZlIHRoaXMKcmVxdWlyZW1lbnQ6IGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWFybS1rZXJuZWwvMjAyMTA1MjQxODA2NTYuMzk1ZTQ1 ZjZAeGhhY2tlci5kZWJpYW4vCldoaWNoIG9mIHRoZSB0d28gaXMgbW9yZSBwcmVmZXJhYmxlPwoK PiBTaWduZWQtb2ZmLWJ5OiBMaXUgU2hpeGluIDxsaXVzaGl4aW4yQGh1YXdlaS5jb20+Cj4gLS0t Cj4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2ZlbmNlLmggfCA2OSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KPiAgYXJjaC9hcm02NC9tbS9tbXUuYyAgICAgICAgICAgICB8ICA0 ICstCj4gIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkK Pgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2tmZW5jZS5oIGIvYXJjaC9h cm02NC9pbmNsdWRlL2FzbS9rZmVuY2UuaAo+IGluZGV4IGFhODU1YzZhMGFlNi4uYmVlMTAxZWNl ZDBiIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va2ZlbmNlLmgKPiArKysg Yi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2tmZW5jZS5oCj4gQEAgLTgsOSArOCw3NiBAQAo+ICAj aWZuZGVmIF9fQVNNX0tGRU5DRV9ICj4gICNkZWZpbmUgX19BU01fS0ZFTkNFX0gKPgo+ICsjaW5j bHVkZSA8bGludXgva2ZlbmNlLmg+Cj4gICNpbmNsdWRlIDxhc20vc2V0X21lbW9yeS5oPgo+ICsj aW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KPgo+IC1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9rZmVu Y2VfaW5pdF9wb29sKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KPiArc3RhdGljIGlubGluZSBpbnQg c3BsaXRfcHVkX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKQo+ICt7Cj4gKyAg ICAgICBpbnQgaTsKPiArICAgICAgIHBtZF90ICpwbWQgPSBwbWRfYWxsb2Nfb25lKCZpbml0X21t LCBhZGRyKTsKPiArICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gUEZOX0RPV04oX19wYShhZGRy KSk7Cj4gKwo+ICsgICAgICAgaWYgKCFwbWQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5P TUVNOwo+ICsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QTUQ7IGkrKykKPiAr ICAgICAgICAgICAgICAgc2V0X3BtZChwbWQgKyBpLCBwbWRfbWtodWdlKHBmbl9wbWQocGZuICsg aSAqIFBUUlNfUEVSX1BURSwgUEFHRV9LRVJORUwpKSk7Cj4gKwo+ICsgICAgICAgc21wX3dtYigp OyAvKiBTZWUgY29tbWVudCBpbiBfX3B0ZV9hbGxvYyAqLwo+ICsgICAgICAgcHVkX3BvcHVsYXRl KCZpbml0X21tLCBwdWQsIHBtZCk7Cj4gKyAgICAgICBmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFk ZHIsIGFkZHIgKyBQVURfU0laRSk7Cj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSBpbnQgc3BsaXRfcG1kX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBh ZGRyKQo+ICt7Cj4gKyAgICAgICBpbnQgaTsKPiArICAgICAgIHB0ZV90ICpwdGUgPSBwdGVfYWxs b2Nfb25lX2tlcm5lbCgmaW5pdF9tbSk7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIHBmbiA9IFBG Tl9ET1dOKF9fcGEoYWRkcikpOwo+ICsKPiArICAgICAgIGlmICghcHRlKQo+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgUFRSU19Q RVJfUFRFOyBpKyspCj4gKyAgICAgICAgICAgICAgIHNldF9wdGUocHRlICsgaSwgcGZuX3B0ZShw Zm4gKyBpLCBQQUdFX0tFUk5FTCkpOwo+ICsKPiArICAgICAgIHNtcF93bWIoKTsgLyogU2VlIGNv bW1lbnQgaW4gX19wdGVfYWxsb2MgKi8KPiArICAgICAgIHBtZF9wb3B1bGF0ZV9rZXJuZWwoJmlu aXRfbW0sIHBtZCwgcHRlKTsKPiArCj4gKyAgICAgICBmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFk ZHIsIGFkZHIgKyBQTURfU0laRSk7Cj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSBib29sIGFyY2hfa2ZlbmNlX2luaXRfcG9vbCh2b2lkKQo+ICt7Cj4gKyAgICAg ICB1bnNpZ25lZCBsb25nIGFkZHI7Cj4gKyAgICAgICBwZ2RfdCAqcGdkOwo+ICsgICAgICAgcDRk X3QgKnA0ZDsKPiArICAgICAgIHB1ZF90ICpwdWQ7Cj4gKyAgICAgICBwbWRfdCAqcG1kOwo+ICsK PiArICAgICAgIGZvciAoYWRkciA9ICh1bnNpZ25lZCBsb25nKV9fa2ZlbmNlX3Bvb2w7IGlzX2tm ZW5jZV9hZGRyZXNzKCh2b2lkICopYWRkcik7Cj4gKyAgICAgICAgICAgIGFkZHIgKz0gUEFHRV9T SVpFKSB7Cj4gKyAgICAgICAgICAgICAgIHBnZCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHIp Owo+ICsgICAgICAgICAgICAgICBpZiAocGdkX2xlYWYoKnBnZCkpCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgICAgICAgICBwNGQgPSBwNGRfb2Zmc2V0 KHBnZCwgYWRkcik7Cj4gKyAgICAgICAgICAgICAgIGlmIChwNGRfbGVhZigqcDRkKSkKPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICAgICAgICAgIHB1ZCA9 IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTsKPiArICAgICAgICAgICAgICAgaWYgKHB1ZF9sZWFmKCpw dWQpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0X3B1ZF9wYWdlKHB1ZCwg YWRkciAmIFBVRF9NQVNLKSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICBwbWQgPSBwbWRf b2Zmc2V0KHB1ZCwgYWRkcik7Cj4gKyAgICAgICAgICAgICAgIGlmIChwbWRfbGVhZigqcG1kKSkg ewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdF9wbWRfcGFnZShwbWQsIGFkZHIg JiBQTURfTUFTSykpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArICAgICAgIHJldHVybiB0cnVl Owo+ICt9Cj4KPiAgc3RhdGljIGlubGluZSBib29sIGtmZW5jZV9wcm90ZWN0X3BhZ2UodW5zaWdu ZWQgbG9uZyBhZGRyLCBib29sIHByb3RlY3QpCj4gIHsKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02 NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKPiBpbmRleCBjZmQ5ZGViMzQ3YzMuLmIy Yzc5Y2NmYjFjNSAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCj4gKysrIGIvYXJj aC9hcm02NC9tbS9tbXUuYwo+IEBAIC01MTYsNyArNTE2LDcgQEAgc3RhdGljIHZvaWQgX19pbml0 IG1hcF9tZW0ocGdkX3QgKnBnZHApCj4gICAgICAgICAgKi8KPiAgICAgICAgIEJVSUxEX0JVR19P TihwZ2RfaW5kZXgoZGlyZWN0X21hcF9lbmQgLSAxKSA9PSBwZ2RfaW5kZXgoZGlyZWN0X21hcF9l bmQpKTsKPgo+IC0gICAgICAgaWYgKGNhbl9zZXRfZGlyZWN0X21hcCgpIHx8IGNyYXNoX21lbV9t YXAgfHwgSVNfRU5BQkxFRChDT05GSUdfS0ZFTkNFKSkKPiArICAgICAgIGlmIChjYW5fc2V0X2Rp cmVjdF9tYXAoKSB8fCBjcmFzaF9tZW1fbWFwKQo+ICAgICAgICAgICAgICAgICBmbGFncyB8PSBO T19CTE9DS19NQVBQSU5HUyB8IE5PX0NPTlRfTUFQUElOR1M7Cj4KPiAgICAgICAgIC8qCj4gQEAg LTE0ODUsNyArMTQ4NSw3IEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0 LCB1NjQgc2l6ZSwKPiAgICAgICAgICAqIEtGRU5DRSByZXF1aXJlcyBsaW5lYXIgbWFwIHRvIGJl IG1hcHBlZCBhdCBwYWdlIGdyYW51bGFyaXR5LCBzbyB0aGF0Cj4gICAgICAgICAgKiBpdCBpcyBw b3NzaWJsZSB0byBwcm90ZWN0L3VucHJvdGVjdCBzaW5nbGUgcGFnZXMgaW4gdGhlIEtGRU5DRSBw b29sLgo+ICAgICAgICAgICovCj4gLSAgICAgICBpZiAoY2FuX3NldF9kaXJlY3RfbWFwKCkgfHwg SVNfRU5BQkxFRChDT05GSUdfS0ZFTkNFKSkKPiArICAgICAgIGlmIChjYW5fc2V0X2RpcmVjdF9t YXAoKSkKPiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTk9fQkxPQ0tfTUFQUElOR1MgfCBOT19D T05UX01BUFBJTkdTOwo+Cj4gICAgICAgICBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhzd2FwcGVyX3Bn X2Rpciwgc3RhcnQsIF9fcGh5c190b192aXJ0KHN0YXJ0KSwKPiAtLQo+IDIuMTguMC5odWF3ZWku MjUKPgo+IC0tCj4gWW91IHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBiZWNhdXNlIHlvdSBhcmUgc3Vi c2NyaWJlZCB0byB0aGUgR29vZ2xlIEdyb3VwcyAia2FzYW4tZGV2IiBncm91cC4KPiBUbyB1bnN1 YnNjcmliZSBmcm9tIHRoaXMgZ3JvdXAgYW5kIHN0b3AgcmVjZWl2aW5nIGVtYWlscyBmcm9tIGl0 LCBzZW5kIGFuIGVtYWlsIHRvIGthc2FuLWRldit1bnN1YnNjcmliZUBnb29nbGVncm91cHMuY29t Lgo+IFRvIHZpZXcgdGhpcyBkaXNjdXNzaW9uIG9uIHRoZSB3ZWIgdmlzaXQgaHR0cHM6Ly9ncm91 cHMuZ29vZ2xlLmNvbS9kL21zZ2lkL2thc2FuLWRldi8yMDIxMDkxODA4Mzg0OS4yNjk2Mjg3LTEt bGl1c2hpeGluMiU0MGh1YXdlaS5jb20uCgoKCi0tIApBbGV4YW5kZXIgUG90YXBlbmtvClNvZnR3 YXJlIEVuZ2luZWVyCgpHb29nbGUgR2VybWFueSBHbWJICkVyaWthLU1hbm4tU3RyYcOfZSwgMzMK ODA2MzYgTcO8bmNoZW4KCkdlc2Now6RmdHNmw7xocmVyOiBQYXVsIE1hbmljbGUsIEhhbGltYWgg RGVMYWluZSBQcmFkbwpSZWdpc3RlcmdlcmljaHQgdW5kIC1udW1tZXI6IEhhbWJ1cmcsIEhSQiA4 Njg5MQpTaXR6IGRlciBHZXNlbGxzY2hhZnQ6IEhhbWJ1cmcKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK