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 B8C5DC7EE30 for ; Mon, 27 Feb 2023 22:32:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229762AbjB0WcD (ORCPT ); Mon, 27 Feb 2023 17:32:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230228AbjB0Wbp (ORCPT ); Mon, 27 Feb 2023 17:31:45 -0500 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 325AD29E11; Mon, 27 Feb 2023 14:31:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537096; x=1709073096; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h3g9dfsaSYOQw9Djcf7aO6npKOb7bN/WODuQBbF8SE0=; b=Ubt3Gx3414HK4ZAPqQUtqCrY0JJ1PRz/pqMyEujJszk+C6y1JlZrm5+T QwIAgj62FyaDRJpWfRZszQ1PAHUrVpe2OyM0tnrzkbLt7KpPMSYhV0XjQ +GPzDRqtxbJgblUy/fh/zsMoARk1aOnSX1wShQoyJNUEdW5Eu3rbObzuQ oeMoCoYZTRt3MAN0NFSRu+5JaFTDB+KAv76wkukKFmyfhMRIZrCrC3Sti Lv71oAIY2Thr+/Q1IqF67W61c44pl1w6hFd6jT5eITuxQwakahbOYPi64 EHDgeviIIASmf2Xco8s3VgN+fiY9jt7hREwB3HOUGd9eMHFqMZ+oLwIrV w==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657249" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657249" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2023 14:31:16 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024459" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024459" Received: from leonqu-mobl1.amr.corp.intel.com (HELO rpedgeco-desk.amr.corp.intel.com) ([10.209.72.19]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2023 14:31:15 -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 v7 11/41] mm: Introduce pte_mkwrite_kernel() Date: Mon, 27 Feb 2023 14:29:27 -0800 Message-Id: <20230227222957.24501-12-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230227222957.24501-1-rick.p.edgecombe@intel.com> References: <20230227222957.24501-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-api@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 Tested-by: John Allen Tested-by: Kees Cook Acked-by: Mike Rapoport (IBM) Acked-by: David Hildenbrand Reviewed-by: Kees Cook 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 b6ba466e2e8a..cccf8885792e 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 2c70b4d1263d..d4943f2d3f00 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -1005,7 +1005,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) @@ -1013,6 +1013,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 56eea96502c6..3607f2572f9e 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 3E213C64ED8 for ; Mon, 27 Feb 2023 22:33:39 +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=RzOOBrbUTPSnoerU9GRmrbX6jzD15mmxOywW1oo3PLc=; b=2StpBmnzVCLfLG 97Me2eloEM7WDn3kLWYaP4W341E7LN8OT8rCQ0XUfs1BU/VKE3bztsm/gyZoWjtQEdeKYNEm6mJFz 0M5ntQRFyX+AXPrxGgK/9O5L3n+1ockzkTj20pe/P5nRdwbxvvFENcjWhSiIqbnYTKFe99e6Rwxe8 KoiRJ5V4VSLa0bHDA9uslcq+cFH/2nUUjsGCLwgbHxS9AvP+ptnx+bqjDztcrlHNJFls/GnsdNyry CUTfZBrXMQPHuJUkFB+zJlFZvkQQqp2yy9NKmiaDdqJcqJhuFfN6xuZkX0KUn06PA9n3BgDUOB3uD C8oFH1ZmAHO6SSQmC+PQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pWm25-00BSeX-D3; Mon, 27 Feb 2023 22:31:45 +0000 Received: from mga12.intel.com ([192.55.52.136]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pWm1w-00BSYc-CG for linux-arm-kernel@lists.infradead.org; Mon, 27 Feb 2023 22:31:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537096; x=1709073096; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h3g9dfsaSYOQw9Djcf7aO6npKOb7bN/WODuQBbF8SE0=; b=Ubt3Gx3414HK4ZAPqQUtqCrY0JJ1PRz/pqMyEujJszk+C6y1JlZrm5+T QwIAgj62FyaDRJpWfRZszQ1PAHUrVpe2OyM0tnrzkbLt7KpPMSYhV0XjQ +GPzDRqtxbJgblUy/fh/zsMoARk1aOnSX1wShQoyJNUEdW5Eu3rbObzuQ oeMoCoYZTRt3MAN0NFSRu+5JaFTDB+KAv76wkukKFmyfhMRIZrCrC3Sti Lv71oAIY2Thr+/Q1IqF67W61c44pl1w6hFd6jT5eITuxQwakahbOYPi64 EHDgeviIIASmf2Xco8s3VgN+fiY9jt7hREwB3HOUGd9eMHFqMZ+oLwIrV w==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657265" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657265" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2023 14:31:16 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024459" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024459" Received: from leonqu-mobl1.amr.corp.intel.com (HELO rpedgeco-desk.amr.corp.intel.com) ([10.209.72.19]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2023 14:31:15 -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 v7 11/41] mm: Introduce pte_mkwrite_kernel() Date: Mon, 27 Feb 2023 14:29:27 -0800 Message-Id: <20230227222957.24501-12-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230227222957.24501-1-rick.p.edgecombe@intel.com> References: <20230227222957.24501-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-20230227_143136_489190_431BEDC9 X-CRM114-Status: GOOD ( 23.08 ) 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 ZXN0ZWQtYnk6IFBlbmdmZWkgWHUgPHBlbmdmZWkueHVAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IEpv aG4gQWxsZW4gPGpvaG4uYWxsZW5AYW1kLmNvbT4KVGVzdGVkLWJ5OiBLZWVzIENvb2sgPGtlZXNj b29rQGNocm9taXVtLm9yZz4KQWNrZWQtYnk6IE1pa2UgUmFwb3BvcnQgKElCTSkgPHJwcHRAa2Vy bmVsLm9yZz4KQWNrZWQtYnk6IERhdmlkIEhpbGRlbmJyYW5kIDxkYXZpZEByZWRoYXQuY29tPgpS ZXZpZXdlZC1ieTogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+ClN1Z2dlc3RlZC1i eTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhdmlkQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IFJp Y2sgRWRnZWNvbWJlIDxyaWNrLnAuZWRnZWNvbWJlQGludGVsLmNvbT4KCi0tLQpIaSBOb24teDg2 IEFyY2jigJlzLAoKeDg2IGhhcyBhIGZlYXR1cmUgdGhhdCBhbGxvd3MgZm9yIHRoZSBjcmVhdGlv biBvZiBhIHNwZWNpYWwgdHlwZSBvZgp3cml0YWJsZSBtZW1vcnkgKHNoYWRvdyBzdGFjaykgdGhh dCBpcyBvbmx5IHdyaXRhYmxlIGluIGxpbWl0ZWQgc3BlY2lmaWMKd2F5cy4gUHJldmlvdXNseSwg Y2hhbmdlcyB3ZXJlIHByb3Bvc2VkIHRvIGNvcmUgTU0gY29kZSB0byB0ZWFjaCBpdCB0bwpkZWNp ZGUgd2hlbiB0byBjcmVhdGUgbm9ybWFsbHkgd3JpdGFibGUgbWVtb3J5IG9yIHRoZSBzcGVjaWFs IHNoYWRvdyBzdGFjawp3cml0YWJsZSBtZW1vcnksIGJ1dCBEYXZpZCBIaWxkZW5icmFuZCBzdWdn ZXN0ZWRbMF0gdG8gY2hhbmdlCnBYWF9ta3dyaXRlKCkgdG8gdGFrZSBhIFZNQSwgc28gYXdhcmVu ZXNzIG9mIHNoYWRvdyBzdGFjayBtZW1vcnkgY2FuIGJlCm1vdmVkIGludG8geDg2IGNvZGUuCgpT aW5jZSBwWFhfbWt3cml0ZSgpIGlzIGRlZmluZWQgaW4gZXZlcnkgYXJjaCwgaXQgcmVxdWlyZXMg c29tZSB0cmVlLXdpZGUKY2hhbmdlcy4gU28gdGhhdCBpcyB3aHkgeW91IGFyZSBzZWVpbmcgc29t ZSBwYXRjaGVzIG91dCBvZiBhIGJpZyB4ODYKc2VyaWVzIHBvcCB1cCBpbiB5b3VyIGFyY2ggbWFp bGluZyBsaXN0LiBUaGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZS4KQWZ0ZXIgdGhpcyByZWZh Y3RvciwgdGhlIHNoYWRvdyBzdGFjayBzZXJpZXMgZ29lcyBvbiB0byB1c2UgdGhlIGFyY2gKaGVs cGVycyB0byBwdXNoIHNoYWRvdyBzdGFjayBtZW1vcnkgZGV0YWlscyBpbnNpZGUgYXJjaC94ODYu CgpUZXN0aW5nIHdhcyBqdXN0IDAtZGF5IGJ1aWxkIHRlc3RpbmcuCgpIb3BlZnVsbHkgdGhhdCBp cyBlbm91Z2ggY29udGV4dC4gVGhhbmtzIQoKWzBdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xr bWwvMGUyOWEyZDAtMDhkOC1iY2Q2LWZmMjYtNGJlYTBlNDAzN2IwQHJlZGhhdC5jb20vI3QKCnY2 OgogLSBOZXcgcGF0Y2gKLS0tCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCB8IDcg KysrKysrLQogYXJjaC9hcm02NC9tbS90cmFuc19wZ2QuYyAgICAgICAgfCA0ICsrLS0KIGFyY2gv czM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggIHwgNyArKysrKystCiBhcmNoL3MzOTAvbW0vcGFn ZWF0dHIuYyAgICAgICAgICB8IDIgKy0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCAg IHwgNyArKysrKystCiBhcmNoL3g4Ni94ZW4vbW11X3B2LmMgICAgICAgICAgICB8IDIgKy0KIDYg ZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCmluZGV4IGI2YmE0NjZlMmU4YS4uY2NjZjg4ODU3OTJlIDEwMDY0NAot LS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybTY0L2lu Y2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTgwLDEzICsxODAsMTggQEAgc3RhdGljIGlubGluZSBw bWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpCiAJcmV0dXJuIHBtZDsK IH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0 X3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfV1JJVEUpKTsKIAlwdGUgPSBjbGVhcl9wdGVfYml0 KHB0ZSwgX19wZ3Byb3QoUFRFX1JET05MWSkpOwogCXJldHVybiBwdGU7CiB9CiAKK3N0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfbWt3cml0 ZV9rZXJuZWwocHRlKTsKK30KKwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVf dCBwdGUpCiB7CiAJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KFBURV9ESVJUWSkp OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS90cmFuc19wZ2QuYyBiL2FyY2gvYXJtNjQvbW0v dHJhbnNfcGdkLmMKaW5kZXggNGVhMmVlZmJjMDUzLi41YzA3ZTY4ZDgwZWEgMTAwNjQ0Ci0tLSBh L2FyY2gvYXJtNjQvbW0vdHJhbnNfcGdkLmMKKysrIGIvYXJjaC9hcm02NC9tbS90cmFuc19wZ2Qu YwpAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgdm9pZCBfY29weV9wdGUocHRlX3QgKmRzdF9wdGVw LCBwdGVfdCAqc3JjX3B0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIAkJICogcmVhZCBvbmx5IChj b2RlLCByb2RhdGEpLiBDbGVhciB0aGUgUkRPTkxZIGJpdCBmcm9tCiAJCSAqIHRoZSB0ZW1wb3Jh cnkgbWFwcGluZ3Mgd2UgdXNlIGR1cmluZyByZXN0b3JlLgogCQkgKi8KLQkJc2V0X3B0ZShkc3Rf cHRlcCwgcHRlX21rd3JpdGUocHRlKSk7CisJCXNldF9wdGUoZHN0X3B0ZXAsIHB0ZV9ta3dyaXRl X2tlcm5lbChwdGUpKTsKIAl9IGVsc2UgaWYgKGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkgJiYg IXB0ZV9ub25lKHB0ZSkpIHsKIAkJLyoKIAkJICogZGVidWdfcGFnZWFsbG9jIHdpbGwgcmVtb3Zl ZCB0aGUgUFRFX1ZBTElEIGJpdCBpZgpAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgdm9pZCBfY29w eV9wdGUocHRlX3QgKmRzdF9wdGVwLCBwdGVfdCAqc3JjX3B0ZXAsIHVuc2lnbmVkIGxvbmcgYWRk cikKIAkJICovCiAJCUJVR19PTighcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkpOwogCi0JCXNldF9w dGUoZHN0X3B0ZXAsIHB0ZV9ta3ByZXNlbnQocHRlX21rd3JpdGUocHRlKSkpOworCQlzZXRfcHRl KGRzdF9wdGVwLCBwdGVfbWtwcmVzZW50KHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpKSk7CiAJfQog fQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9z MzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyYzcwYjRkMTI2M2QuLmQ0OTQzZjJkM2Yw MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNo L3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBzdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogCXJldHVybiBzZXRfcHRlX2Jp dChwdGUsIF9fcGdwcm90KF9QQUdFX1BST1RFQ1QpKTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRl X2tlcm5lbChwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0X3B0ZV9iaXQocHRlLCBfX3BncHJvdChf UEFHRV9XUklURSkpOwogCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWSkKQEAgLTEwMTMs NiArMTAxMywxMSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkK IAlyZXR1cm4gcHRlOwogfQogCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90 IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX21rd3JpdGVfa2VybmVsKHB0ZSk7Cit9CisKIHN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogewogCXB0ZSA9IGNsZWFyX3B0ZV9i aXQocHRlLCBfX3BncHJvdChfUEFHRV9ESVJUWSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21t L3BhZ2VhdHRyLmMgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwppbmRleCA4NTE5NWMxOGIyZTgu LjRlZTVmZTVjYWEyMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKKysrIGIv YXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIGludCB3YWxr X3B0ZV9sZXZlbChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25n IGVuZCwKIAkJaWYgKGZsYWdzICYgU0VUX01FTU9SWV9STykKIAkJCW5ldyA9IHB0ZV93cnByb3Rl Y3QobmV3KTsKIAkJZWxzZSBpZiAoZmxhZ3MgJiBTRVRfTUVNT1JZX1JXKQotCQkJbmV3ID0gcHRl X21rd3JpdGUocHRlX21rZGlydHkobmV3KSk7CisJCQluZXcgPSBwdGVfbWt3cml0ZV9rZXJuZWwo cHRlX21rZGlydHkobmV3KSk7CiAJCWlmIChmbGFncyAmIFNFVF9NRU1PUllfTlgpCiAJCQluZXcg PSBzZXRfcHRlX2JpdChuZXcsIF9fcGdwcm90KF9QQUdFX05PRVhFQykpOwogCQllbHNlIGlmIChm bGFncyAmIFNFVF9NRU1PUllfWCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bn dGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1NmVlYTk2NTAy YzYuLjM2MDdmMjU3MmY5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJs ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzY0LDExICszNjQs MTYgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiAJcmV0dXJu IHB0ZV9zZXRfZmxhZ3MocHRlLCBfUEFHRV9BQ0NFU1NFRCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3 cml0ZV9rZXJuZWwocHRlX3QgcHRlKQogewogCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BB R0VfUlcpOwogfQogCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkK K3sKKwlyZXR1cm4gcHRlX21rd3JpdGVfa2VybmVsKHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIHB0ZV9zZXRfZmxhZ3MocHRl LCBfUEFHRV9QU0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdV9wdi5jIGIvYXJjaC94 ODYveGVuL21tdV9wdi5jCmluZGV4IGVlMjlmYjU1OGYyZS4uYTIzZjA0MjQzYzE5IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni94ZW4vbW11X3B2LmMKKysrIGIvYXJjaC94ODYveGVuL21tdV9wdi5jCkBA IC0xNTAsNyArMTUwLDcgQEAgdm9pZCBtYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZSh2b2lkICp2 YWRkcikKIAlpZiAocHRlID09IE5VTEwpCiAJCXJldHVybjsJCS8qIHZhZGRyIG1pc3NpbmcgKi8K IAotCXB0ZXYgPSBwdGVfbWt3cml0ZSgqcHRlKTsKKwlwdGV2ID0gcHRlX21rd3JpdGVfa2VybmVs KCpwdGUpOwogCiAJaWYgKEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcoYWRkcmVzcywgcHRl diwgMCkpCiAJCUJVRygpOwotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=