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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D09FC636CC for ; Sat, 18 Feb 2023 21:18:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229891AbjBRVSl (ORCPT ); Sat, 18 Feb 2023 16:18:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230092AbjBRVSQ (ORCPT ); Sat, 18 Feb 2023 16:18:16 -0500 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CC2E199D5; Sat, 18 Feb 2023 13:16:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676755001; x=1708291001; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YUfVMdqaIDo5eYQ52v6BzSjW4FAE7LTxtjQ5YsNs8EI=; b=GEiY36uBEN5W8+f/PUImG08ByCmUxjCJOBZYFEP40hby4ryqRhHNQi/A 82jVh3zyzW/TZK42hhEGeAahMpPphVWKWdprxe999wfS46cVe3FzHH89H fhhOefKBLNvyiQnLbZoeHcMu3gA3Fbo+DvoYdxhe/Kdi/oBnA+o+Fnmg1 MefBgTlUvaHb39uQJTn63JpRSxgJERbVSuQuyXd1OM8kgm2qpAuDRv9dK Ft6EvMIcGjdtNJWH/JVXJ4Wsi9xsEJZme2UHn65RTrQdh2KovEuoQq/Lz o86OnmVHihhqlrXmIPJQfJhmqn/TssdxOF59zX6M7F4YeAdIcyxIe9MU/ Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10625"; a="418427315" X-IronPort-AV: E=Sophos;i="5.97,309,1669104000"; d="scan'208";a="418427315" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2023 13:16:05 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10625"; a="664241624" X-IronPort-AV: E=Sophos;i="5.97,309,1669104000"; d="scan'208";a="664241624" Received: from adityava-mobl1.amr.corp.intel.com (HELO rpedgeco-desk.amr.corp.intel.com) ([10.209.80.223]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2023 13:16:04 -0800 From: Rick Edgecombe To: x86@kernel.org, "H . Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H . J . Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , Randy Dunlap , Weijiang Yang , "Kirill A . Shutemov" , John Allen , kcc@google.com, eranian@google.com, rppt@kernel.org, jamorris@linux.microsoft.com, dethoma@microsoft.com, akpm@linux-foundation.org, Andrew.Cooper3@citrix.com, christina.schimpe@intel.com, david@redhat.com, debug@rivosinc.com Cc: rick.p.edgecombe@intel.com, linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org, xen-devel@lists.xenproject.org Subject: [PATCH v6 11/41] mm: Introduce pte_mkwrite_kernel() Date: Sat, 18 Feb 2023 13:14:03 -0800 Message-Id: <20230218211433.26859-12-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230218211433.26859-1-rick.p.edgecombe@intel.com> References: <20230218211433.26859-1-rick.p.edgecombe@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The x86 Control-flow Enforcement Technology (CET) feature includes a new type of memory called shadow stack. This shadow stack memory has some unusual properties, which requires some core mm changes to function properly. One of these changes is to allow for pte_mkwrite() to create different types of writable memory (the existing conventionally writable type and also the new shadow stack type). Future patches will convert pte_mkwrite() to take a VMA in order to facilitate this, however there are places in the kernel where pte_mkwrite() is called outside of the context of a VMA. These are for kernel memory. So create a new variant called pte_mkwrite_kernel() and switch the kernel users over to it. Have pte_mkwrite() and pte_mkwrite_kernel() be the same for now. Future patches will introduce changes to make pte_mkwrite() take a VMA. Only do this for architectures that need it because they call pte_mkwrite() in arch code without an associated VMA. Since it will only currently be used in arch code, so do not include it in arch_pgtable_helpers.rst. Cc: linux-doc@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: xen-devel@lists.xenproject.org Cc: linux-arch@vger.kernel.org Cc: linux-mm@kvack.org Tested-by: Pengfei Xu Suggested-by: David Hildenbrand Signed-off-by: Rick Edgecombe --- Hi Non-x86 Arch’s, x86 has a feature that allows for the creation of a special type of writable memory (shadow stack) that is only writable in limited specific ways. Previously, changes were proposed to core MM code to teach it to decide when to create normally writable memory or the special shadow stack writable memory, but David Hildenbrand suggested[0] to change pXX_mkwrite() to take a VMA, so awareness of shadow stack memory can be moved into x86 code. Since pXX_mkwrite() is defined in every arch, it requires some tree-wide changes. So that is why you are seeing some patches out of a big x86 series pop up in your arch mailing list. There is no functional change. After this refactor, the shadow stack series goes on to use the arch helpers to push shadow stack memory details inside arch/x86. Testing was just 0-day build testing. Hopefully that is enough context. Thanks! [0] https://lore.kernel.org/lkml/0e29a2d0-08d8-bcd6-ff26-4bea0e4037b0@redhat.com/#t v6: - New patch --- arch/arm64/include/asm/pgtable.h | 7 ++++++- arch/arm64/mm/trans_pgd.c | 4 ++-- arch/s390/include/asm/pgtable.h | 7 ++++++- arch/s390/mm/pageattr.c | 2 +- arch/x86/include/asm/pgtable.h | 7 ++++++- arch/x86/xen/mmu_pv.c | 2 +- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 65e78999c75d..ed555f947697 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -180,13 +180,18 @@ static inline pmd_t set_pmd_bit(pmd_t pmd, pgprot_t prot) return pmd; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite_kernel(pte_t pte) { pte = set_pte_bit(pte, __pgprot(PTE_WRITE)); pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY)); return pte; } +static inline pte_t pte_mkwrite(pte_t pte) +{ + return pte_mkwrite_kernel(pte); +} + static inline pte_t pte_mkclean(pte_t pte) { pte = clear_pte_bit(pte, __pgprot(PTE_DIRTY)); diff --git a/arch/arm64/mm/trans_pgd.c b/arch/arm64/mm/trans_pgd.c index 4ea2eefbc053..5c07e68d80ea 100644 --- a/arch/arm64/mm/trans_pgd.c +++ b/arch/arm64/mm/trans_pgd.c @@ -40,7 +40,7 @@ static void _copy_pte(pte_t *dst_ptep, pte_t *src_ptep, unsigned long addr) * read only (code, rodata). Clear the RDONLY bit from * the temporary mappings we use during restore. */ - set_pte(dst_ptep, pte_mkwrite(pte)); + set_pte(dst_ptep, pte_mkwrite_kernel(pte)); } else if (debug_pagealloc_enabled() && !pte_none(pte)) { /* * debug_pagealloc will removed the PTE_VALID bit if @@ -53,7 +53,7 @@ static void _copy_pte(pte_t *dst_ptep, pte_t *src_ptep, unsigned long addr) */ BUG_ON(!pfn_valid(pte_pfn(pte))); - set_pte(dst_ptep, pte_mkpresent(pte_mkwrite(pte))); + set_pte(dst_ptep, pte_mkpresent(pte_mkwrite_kernel(pte))); } } diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index b26cbf1c533c..29522418b5f4 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -991,7 +991,7 @@ static inline pte_t pte_wrprotect(pte_t pte) return set_pte_bit(pte, __pgprot(_PAGE_PROTECT)); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite_kernel(pte_t pte) { pte = set_pte_bit(pte, __pgprot(_PAGE_WRITE)); if (pte_val(pte) & _PAGE_DIRTY) @@ -999,6 +999,11 @@ static inline pte_t pte_mkwrite(pte_t pte) return pte; } +static inline pte_t pte_mkwrite(pte_t pte) +{ + return pte_mkwrite_kernel(pte); +} + static inline pte_t pte_mkclean(pte_t pte) { pte = clear_pte_bit(pte, __pgprot(_PAGE_DIRTY)); diff --git a/arch/s390/mm/pageattr.c b/arch/s390/mm/pageattr.c index 85195c18b2e8..4ee5fe5caa23 100644 --- a/arch/s390/mm/pageattr.c +++ b/arch/s390/mm/pageattr.c @@ -96,7 +96,7 @@ static int walk_pte_level(pmd_t *pmdp, unsigned long addr, unsigned long end, if (flags & SET_MEMORY_RO) new = pte_wrprotect(new); else if (flags & SET_MEMORY_RW) - new = pte_mkwrite(pte_mkdirty(new)); + new = pte_mkwrite_kernel(pte_mkdirty(new)); if (flags & SET_MEMORY_NX) new = set_pte_bit(new, __pgprot(_PAGE_NOEXEC)); else if (flags & SET_MEMORY_X) diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index b39f16c0d507..4f9fddcff2b9 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -364,11 +364,16 @@ static inline pte_t pte_mkyoung(pte_t pte) return pte_set_flags(pte, _PAGE_ACCESSED); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite_kernel(pte_t pte) { return pte_set_flags(pte, _PAGE_RW); } +static inline pte_t pte_mkwrite(pte_t pte) +{ + return pte_mkwrite_kernel(pte); +} + static inline pte_t pte_mkhuge(pte_t pte) { return pte_set_flags(pte, _PAGE_PSE); diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index ee29fb558f2e..a23f04243c19 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -150,7 +150,7 @@ void make_lowmem_page_readwrite(void *vaddr) if (pte == NULL) return; /* vaddr missing */ - ptev = pte_mkwrite(*pte); + ptev = pte_mkwrite_kernel(*pte); if (HYPERVISOR_update_va_mapping(address, ptev, 0)) BUG(); -- 2.17.1 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 3B510C61DA4 for ; Sat, 18 Feb 2023 22:17:30 +0000 (UTC) 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:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Atttqz+dqXhkYI+AsXzRZQQbzNQrxr8BVmrGV1TVM6M=; b=mGeSkmTNZCdRjw lTRjUyMjU4nATT8dfGbyGn0h0aIQ5BTuzc3w3avPbEjXEi2A5ue5a6Uo5VhE3qrWavH7tXirjAhYn MbkZaA2pymjrQJWC1sLG4ieDZyz1llv61ebGrOxRcXHwNIxf5OTh2fgeHEi4s40xSkQ/RqDXfVb8S gny1/DZxrcPXlmEp9Gw5hBcchlf7VuZhBtfDfV9QZYPzytKySSy8CN2LtcGV2QMhk66mz3m6mE0kh Qoo8ZmD7ZfY2dwLh8qSmVdOzkESCwYbkRumZYEtrKjQiWMtmHBUod3BWarZxK1DalUQXfT4rQltix 7fiZ36Qe/5FV0kFM29yQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pTVVT-000Ge4-Tw; Sat, 18 Feb 2023 22:16:36 +0000 Received: from mga05.intel.com ([192.55.52.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pTUYx-00092S-S7 for linux-arm-kernel@lists.infradead.org; Sat, 18 Feb 2023 21:16:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676754967; x=1708290967; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YUfVMdqaIDo5eYQ52v6BzSjW4FAE7LTxtjQ5YsNs8EI=; b=iInyu90TvSu9tOvqS9v6FApC1amTLvM0z5HYp9u/nKY4nRLwFMR0QOUp x+1yOX3L5rF8GPO2oXOExFgFpsNIByp+2LOKXdkiCXJQFJW3ZFPuwlaGA Vw+S7RlgRIEIt8vt9SNNfwu7h0KlQV9NbUJZGnFNqtG8caQneT6zXIarH T4ln9+TQiZrj/LxEiOQ1/s3yxAX0+DfUCVYPsH2Lh4Iah9i6sefsVC3Jc CLzgLscnu6/7Fk3S1L5yrD+uzaN6ip7O9jTpjLmFnfbzaLvbfxNH6eG5u qxdQArgE064AQHH2aR298MSi17rqEcqzSgbRfRozRZIo8V83t+KYLyE4F A==; X-IronPort-AV: E=McAfee;i="6500,9779,10625"; a="418427329" X-IronPort-AV: E=Sophos;i="5.97,309,1669104000"; d="scan'208";a="418427329" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2023 13:16:06 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10625"; a="664241624" X-IronPort-AV: E=Sophos;i="5.97,309,1669104000"; d="scan'208";a="664241624" Received: from adityava-mobl1.amr.corp.intel.com (HELO rpedgeco-desk.amr.corp.intel.com) ([10.209.80.223]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2023 13:16:04 -0800 From: Rick Edgecombe To: x86@kernel.org, "H . Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H . J . Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , Randy Dunlap , Weijiang Yang , "Kirill A . Shutemov" , John Allen , kcc@google.com, eranian@google.com, rppt@kernel.org, jamorris@linux.microsoft.com, dethoma@microsoft.com, akpm@linux-foundation.org, Andrew.Cooper3@citrix.com, christina.schimpe@intel.com, david@redhat.com, debug@rivosinc.com Cc: rick.p.edgecombe@intel.com, linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org, xen-devel@lists.xenproject.org Subject: [PATCH v6 11/41] mm: Introduce pte_mkwrite_kernel() Date: Sat, 18 Feb 2023 13:14:03 -0800 Message-Id: <20230218211433.26859-12-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230218211433.26859-1-rick.p.edgecombe@intel.com> References: <20230218211433.26859-1-rick.p.edgecombe@intel.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230218_131607_944657_50360460 X-CRM114-Status: GOOD ( 22.98 ) 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 VGhlIHg4NiBDb250cm9sLWZsb3cgRW5mb3JjZW1lbnQgVGVjaG5vbG9neSAoQ0VUKSBmZWF0dXJl IGluY2x1ZGVzIGEgbmV3CnR5cGUgb2YgbWVtb3J5IGNhbGxlZCBzaGFkb3cgc3RhY2suIFRoaXMg c2hhZG93IHN0YWNrIG1lbW9yeSBoYXMgc29tZQp1bnVzdWFsIHByb3BlcnRpZXMsIHdoaWNoIHJl cXVpcmVzIHNvbWUgY29yZSBtbSBjaGFuZ2VzIHRvIGZ1bmN0aW9uCnByb3Blcmx5LgoKT25lIG9m IHRoZXNlIGNoYW5nZXMgaXMgdG8gYWxsb3cgZm9yIHB0ZV9ta3dyaXRlKCkgdG8gY3JlYXRlIGRp ZmZlcmVudAp0eXBlcyBvZiB3cml0YWJsZSBtZW1vcnkgKHRoZSBleGlzdGluZyBjb252ZW50aW9u YWxseSB3cml0YWJsZSB0eXBlIGFuZAphbHNvIHRoZSBuZXcgc2hhZG93IHN0YWNrIHR5cGUpLiBG dXR1cmUgcGF0Y2hlcyB3aWxsIGNvbnZlcnQgcHRlX21rd3JpdGUoKQp0byB0YWtlIGEgVk1BIGlu IG9yZGVyIHRvIGZhY2lsaXRhdGUgdGhpcywgaG93ZXZlciB0aGVyZSBhcmUgcGxhY2VzIGluIHRo ZQprZXJuZWwgd2hlcmUgcHRlX21rd3JpdGUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiB0aGUgY29u dGV4dCBvZiBhIFZNQS4KVGhlc2UgYXJlIGZvciBrZXJuZWwgbWVtb3J5LiBTbyBjcmVhdGUgYSBu ZXcgdmFyaWFudCBjYWxsZWQKcHRlX21rd3JpdGVfa2VybmVsKCkgYW5kIHN3aXRjaCB0aGUga2Vy bmVsIHVzZXJzIG92ZXIgdG8gaXQuIEhhdmUKcHRlX21rd3JpdGUoKSBhbmQgcHRlX21rd3JpdGVf a2VybmVsKCkgYmUgdGhlIHNhbWUgZm9yIG5vdy4gRnV0dXJlIHBhdGNoZXMKd2lsbCBpbnRyb2R1 Y2UgY2hhbmdlcyB0byBtYWtlIHB0ZV9ta3dyaXRlKCkgdGFrZSBhIFZNQS4KCk9ubHkgZG8gdGhp cyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IG5lZWQgaXQgYmVjYXVzZSB0aGV5IGNhbGwgcHRlX21r d3JpdGUoKQppbiBhcmNoIGNvZGUgd2l0aG91dCBhbiBhc3NvY2lhdGVkIFZNQS4gU2luY2UgaXQg d2lsbCBvbmx5IGN1cnJlbnRseSBiZQp1c2VkIGluIGFyY2ggY29kZSwgc28gZG8gbm90IGluY2x1 ZGUgaXQgaW4gYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LgoKQ2M6IGxpbnV4LWRvY0B2Z2VyLmtl cm5lbC5vcmcKQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGlu dXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y ZwpDYzogbGludXgtYXJjaEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwpU ZXN0ZWQtYnk6IFBlbmdmZWkgWHUgPHBlbmdmZWkueHVAaW50ZWwuY29tPgpTdWdnZXN0ZWQtYnk6 IERhdmlkIEhpbGRlbmJyYW5kIDxkYXZpZEByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBSaWNr IEVkZ2Vjb21iZSA8cmljay5wLmVkZ2Vjb21iZUBpbnRlbC5jb20+CgotLS0KSGkgTm9uLXg4NiBB cmNo4oCZcywKCng4NiBoYXMgYSBmZWF0dXJlIHRoYXQgYWxsb3dzIGZvciB0aGUgY3JlYXRpb24g b2YgYSBzcGVjaWFsIHR5cGUgb2YKd3JpdGFibGUgbWVtb3J5IChzaGFkb3cgc3RhY2spIHRoYXQg aXMgb25seSB3cml0YWJsZSBpbiBsaW1pdGVkIHNwZWNpZmljCndheXMuIFByZXZpb3VzbHksIGNo YW5nZXMgd2VyZSBwcm9wb3NlZCB0byBjb3JlIE1NIGNvZGUgdG8gdGVhY2ggaXQgdG8KZGVjaWRl IHdoZW4gdG8gY3JlYXRlIG5vcm1hbGx5IHdyaXRhYmxlIG1lbW9yeSBvciB0aGUgc3BlY2lhbCBz aGFkb3cgc3RhY2sKd3JpdGFibGUgbWVtb3J5LCBidXQgRGF2aWQgSGlsZGVuYnJhbmQgc3VnZ2Vz dGVkWzBdIHRvIGNoYW5nZQpwWFhfbWt3cml0ZSgpIHRvIHRha2UgYSBWTUEsIHNvIGF3YXJlbmVz cyBvZiBzaGFkb3cgc3RhY2sgbWVtb3J5IGNhbiBiZQptb3ZlZCBpbnRvIHg4NiBjb2RlLgoKU2lu Y2UgcFhYX21rd3JpdGUoKSBpcyBkZWZpbmVkIGluIGV2ZXJ5IGFyY2gsIGl0IHJlcXVpcmVzIHNv bWUgdHJlZS13aWRlCmNoYW5nZXMuIFNvIHRoYXQgaXMgd2h5IHlvdSBhcmUgc2VlaW5nIHNvbWUg cGF0Y2hlcyBvdXQgb2YgYSBiaWcgeDg2CnNlcmllcyBwb3AgdXAgaW4geW91ciBhcmNoIG1haWxp bmcgbGlzdC4gVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCkFmdGVyIHRoaXMgcmVmYWN0 b3IsIHRoZSBzaGFkb3cgc3RhY2sgc2VyaWVzIGdvZXMgb24gdG8gdXNlIHRoZSBhcmNoCmhlbHBl cnMgdG8gcHVzaCBzaGFkb3cgc3RhY2sgbWVtb3J5IGRldGFpbHMgaW5zaWRlIGFyY2gveDg2LgoK VGVzdGluZyB3YXMganVzdCAwLWRheSBidWlsZCB0ZXN0aW5nLgoKSG9wZWZ1bGx5IHRoYXQgaXMg ZW5vdWdoIGNvbnRleHQuIFRoYW5rcyEKClswXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21s LzBlMjlhMmQwLTA4ZDgtYmNkNi1mZjI2LTRiZWEwZTQwMzdiMEByZWRoYXQuY29tLyN0Cgp2NjoK IC0gTmV3IHBhdGNoCi0tLQogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggfCA3ICsr KysrKy0KIGFyY2gvYXJtNjQvbW0vdHJhbnNfcGdkLmMgICAgICAgIHwgNCArKy0tCiBhcmNoL3Mz OTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oICB8IDcgKysrKysrLQogYXJjaC9zMzkwL21tL3BhZ2Vh dHRyLmMgICAgICAgICAgfCAyICstCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICB8 IDcgKysrKysrLQogYXJjaC94ODYveGVuL21tdV9wdi5jICAgICAgICAgICAgfCAyICstCiA2IGZp bGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCA2NWU3ODk5OWM3NWQuLmVkNTU1Zjk0NzY5NyAxMDA2NDQKLS0t IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4MCwxMyArMTgwLDE4IEBAIHN0YXRpYyBpbmxpbmUgcG1k X3Qgc2V0X3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KQogCXJldHVybiBwbWQ7CiB9 CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZV9rZXJuZWwocHRlX3QgcHRlKQogewogCXB0ZSA9IHNldF9w dGVfYml0KHB0ZSwgX19wZ3Byb3QoUFRFX1dSSVRFKSk7CiAJcHRlID0gY2xlYXJfcHRlX2JpdChw dGUsIF9fcGdwcm90KFBURV9SRE9OTFkpKTsKIAlyZXR1cm4gcHRlOwogfQogCitzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX21rd3JpdGVf a2VybmVsKHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3Qg cHRlKQogewogCXB0ZSA9IGNsZWFyX3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfRElSVFkpKTsK ZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vdHJhbnNfcGdkLmMgYi9hcmNoL2FybTY0L21tL3Ry YW5zX3BnZC5jCmluZGV4IDRlYTJlZWZiYzA1My4uNWMwN2U2OGQ4MGVhIDEwMDY0NAotLS0gYS9h cmNoL2FybTY0L21tL3RyYW5zX3BnZC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vdHJhbnNfcGdkLmMK QEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIHZvaWQgX2NvcHlfcHRlKHB0ZV90ICpkc3RfcHRlcCwg cHRlX3QgKnNyY19wdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJCSAqIHJlYWQgb25seSAoY29k ZSwgcm9kYXRhKS4gQ2xlYXIgdGhlIFJET05MWSBiaXQgZnJvbQogCQkgKiB0aGUgdGVtcG9yYXJ5 IG1hcHBpbmdzIHdlIHVzZSBkdXJpbmcgcmVzdG9yZS4KIAkJICovCi0JCXNldF9wdGUoZHN0X3B0 ZXAsIHB0ZV9ta3dyaXRlKHB0ZSkpOworCQlzZXRfcHRlKGRzdF9wdGVwLCBwdGVfbWt3cml0ZV9r ZXJuZWwocHRlKSk7CiAJfSBlbHNlIGlmIChkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpICYmICFw dGVfbm9uZShwdGUpKSB7CiAJCS8qCiAJCSAqIGRlYnVnX3BhZ2VhbGxvYyB3aWxsIHJlbW92ZWQg dGhlIFBURV9WQUxJRCBiaXQgaWYKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIHZvaWQgX2NvcHlf cHRlKHB0ZV90ICpkc3RfcHRlcCwgcHRlX3QgKnNyY19wdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIp CiAJCSAqLwogCQlCVUdfT04oIXBmbl92YWxpZChwdGVfcGZuKHB0ZSkpKTsKIAotCQlzZXRfcHRl KGRzdF9wdGVwLCBwdGVfbWtwcmVzZW50KHB0ZV9ta3dyaXRlKHB0ZSkpKTsKKwkJc2V0X3B0ZShk c3RfcHRlcCwgcHRlX21rcHJlc2VudChwdGVfbWt3cml0ZV9rZXJuZWwocHRlKSkpOwogCX0KIH0K IApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5 MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYjI2Y2JmMWM1MzNjLi4yOTUyMjQxOGI1ZjQg MTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9z MzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOTkxLDcgKzk5MSw3IEBAIHN0YXRpYyBpbmxp bmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCiAJcmV0dXJuIHNldF9wdGVfYml0KHB0 ZSwgX19wZ3Byb3QoX1BBR0VfUFJPVEVDVCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGVfa2Vy bmVsKHB0ZV90IHB0ZSkKIHsKIAlwdGUgPSBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdF X1dSSVRFKSk7CiAJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZKQpAQCAtOTk5LDYgKzk5 OSwxMSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKIAlyZXR1 cm4gcHRlOwogfQogCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkK K3sKKwlyZXR1cm4gcHRlX21rd3JpdGVfa2VybmVsKHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewogCXB0ZSA9IGNsZWFyX3B0ZV9iaXQocHRl LCBfX3BncHJvdChfUEFHRV9ESVJUWSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BhZ2Vh dHRyLmMgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwppbmRleCA4NTE5NWMxOGIyZTguLjRlZTVm ZTVjYWEyMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC9z MzkwL21tL3BhZ2VhdHRyLmMKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIGludCB3YWxrX3B0ZV9s ZXZlbChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwK IAkJaWYgKGZsYWdzICYgU0VUX01FTU9SWV9STykKIAkJCW5ldyA9IHB0ZV93cnByb3RlY3QobmV3 KTsKIAkJZWxzZSBpZiAoZmxhZ3MgJiBTRVRfTUVNT1JZX1JXKQotCQkJbmV3ID0gcHRlX21rd3Jp dGUocHRlX21rZGlydHkobmV3KSk7CisJCQluZXcgPSBwdGVfbWt3cml0ZV9rZXJuZWwocHRlX21r ZGlydHkobmV3KSk7CiAJCWlmIChmbGFncyAmIFNFVF9NRU1PUllfTlgpCiAJCQluZXcgPSBzZXRf cHRlX2JpdChuZXcsIF9fcGdwcm90KF9QQUdFX05PRVhFQykpOwogCQllbHNlIGlmIChmbGFncyAm IFNFVF9NRU1PUllfWCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUu aCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBiMzlmMTZjMGQ1MDcuLjRm OWZkZGNmZjJiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisr KyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzY0LDExICszNjQsMTYgQEAg c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZV9z ZXRfZmxhZ3MocHRlLCBfUEFHRV9BQ0NFU1NFRCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZV9r ZXJuZWwocHRlX3QgcHRlKQogewogCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfUlcp OwogfQogCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwly ZXR1cm4gcHRlX21rd3JpdGVfa2VybmVsKHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21raHVnZShwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIHB0ZV9zZXRfZmxhZ3MocHRlLCBfUEFH RV9QU0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdV9wdi5jIGIvYXJjaC94ODYveGVu L21tdV9wdi5jCmluZGV4IGVlMjlmYjU1OGYyZS4uYTIzZjA0MjQzYzE5IDEwMDY0NAotLS0gYS9h cmNoL3g4Ni94ZW4vbW11X3B2LmMKKysrIGIvYXJjaC94ODYveGVuL21tdV9wdi5jCkBAIC0xNTAs NyArMTUwLDcgQEAgdm9pZCBtYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSh2b2lkICp2YWRkcikK IAlpZiAocHRlID09IE5VTEwpCiAJCXJldHVybjsJCS8qIHZhZGRyIG1pc3NpbmcgKi8KIAotCXB0 ZXYgPSBwdGVfbWt3cml0ZSgqcHRlKTsKKwlwdGV2ID0gcHRlX21rd3JpdGVfa2VybmVsKCpwdGUp OwogCiAJaWYgKEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcoYWRkcmVzcywgcHRldiwgMCkp CiAJCUJVRygpOwotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=