From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 252BF33C5 for ; Mon, 27 Feb 2023 22:31:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537101; x=1709073101; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=Gd++Ss6FzJgVgLN+e7b1/Qj/XCssBYw8HMemTiMAFCDT2I0YJjp+vXfj s3DuuFNSVTpwLhkOWNYB+Y7YfxXN4B/SE0pdCLezc0JQLQ3T+lzThgBtU mkyCpB9DX90G2IhFoUFaNjYqmLhpj9ZRi8/rueexwktdAMpr6dgbAE9Lu PrYhte6wFSJjeai4GZl6L055aLyn62Amjzl2y3ZyYT6PTBuFgpwNgvqYo wxzY9fM3mUgsRwFi/wbkZYaJxv95pKLxzYOHUKkAwPzDnJMFDzWKyhDP7 aP9hiIs+a73LZ0xEvgu+kdcIC/f6A1j9OMWHD/lZ0J6P1KefdAOmxUr8D Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657338" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657338" 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:22 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024498" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024498" 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:16 -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-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-Id: <20230227222957.24501-14-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> Precedence: bulk X-Mailing-List: loongarch@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 unusual properties is that shadow stack memory is writable, but only in limited ways. These limits are applied via a specific PTE bit combination. Nevertheless, the memory is writable, and core mm code will need to apply the writable permissions in the typical paths that call pte_mkwrite(). In addition to VM_WRITE, the shadow stack VMA's will have a flag denoting that they are special shadow stack flavor of writable memory. So make pte_mkwrite() take a VMA, so that the x86 implementation of it can know to create regular writable memory or shadow stack memory. Apply the same changes for pmd_mkwrite() and huge_pte_mkwrite(). No functional change. Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-alpha@vger.kernel.org Cc: linux-snps-arc@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-csky@vger.kernel.org Cc: linux-hexagon@vger.kernel.org Cc: linux-ia64@vger.kernel.org Cc: loongarch@lists.linux.dev Cc: linux-m68k@lists.linux-m68k.org Cc: Michal Simek Cc: Dinh Nguyen Cc: linux-mips@vger.kernel.org Cc: linux-openrisc@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-um@lists.infradead.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: Michael Ellerman 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 --- Documentation/mm/arch_pgtable_helpers.rst | 9 ++++++--- arch/alpha/include/asm/pgtable.h | 6 +++++- arch/arc/include/asm/hugepage.h | 2 +- arch/arc/include/asm/pgtable-bits-arcv2.h | 7 ++++++- arch/arm/include/asm/pgtable-3level.h | 7 ++++++- arch/arm/include/asm/pgtable.h | 2 +- arch/arm64/include/asm/pgtable.h | 4 ++-- arch/csky/include/asm/pgtable.h | 2 +- arch/hexagon/include/asm/pgtable.h | 2 +- arch/ia64/include/asm/pgtable.h | 2 +- arch/loongarch/include/asm/pgtable.h | 4 ++-- arch/m68k/include/asm/mcf_pgtable.h | 2 +- arch/m68k/include/asm/motorola_pgtable.h | 6 +++++- arch/m68k/include/asm/sun3_pgtable.h | 6 +++++- arch/microblaze/include/asm/pgtable.h | 2 +- arch/mips/include/asm/pgtable.h | 6 +++--- arch/nios2/include/asm/pgtable.h | 2 +- arch/openrisc/include/asm/pgtable.h | 2 +- arch/parisc/include/asm/pgtable.h | 6 +++++- arch/powerpc/include/asm/book3s/32/pgtable.h | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 4 ++-- arch/powerpc/include/asm/nohash/32/pgtable.h | 2 +- arch/powerpc/include/asm/nohash/32/pte-8xx.h | 2 +- arch/powerpc/include/asm/nohash/64/pgtable.h | 2 +- arch/riscv/include/asm/pgtable.h | 6 +++--- arch/s390/include/asm/hugetlb.h | 4 ++-- arch/s390/include/asm/pgtable.h | 4 ++-- arch/sh/include/asm/pgtable_32.h | 10 ++++++++-- arch/sparc/include/asm/pgtable_32.h | 2 +- arch/sparc/include/asm/pgtable_64.h | 6 +++--- arch/um/include/asm/pgtable.h | 2 +- arch/x86/include/asm/pgtable.h | 6 ++++-- arch/xtensa/include/asm/pgtable.h | 2 +- include/asm-generic/hugetlb.h | 4 ++-- include/linux/mm.h | 2 +- mm/debug_vm_pgtable.c | 16 ++++++++-------- mm/huge_memory.c | 6 +++--- mm/hugetlb.c | 4 ++-- mm/memory.c | 4 ++-- mm/migrate_device.c | 2 +- mm/mprotect.c | 2 +- mm/userfaultfd.c | 2 +- 42 files changed, 106 insertions(+), 69 deletions(-) diff --git a/Documentation/mm/arch_pgtable_helpers.rst b/Documentation/mm/arch_pgtable_helpers.rst index 30d9a09f01f4..78ac3ff2fe1d 100644 --- a/Documentation/mm/arch_pgtable_helpers.rst +++ b/Documentation/mm/arch_pgtable_helpers.rst @@ -46,7 +46,8 @@ PTE Page Table Helpers +---------------------------+--------------------------------------------------+ | pte_mkclean | Creates a clean PTE | +---------------------------+--------------------------------------------------+ -| pte_mkwrite | Creates a writable PTE | +| pte_mkwrite | Creates a writable PTE of the type specified by | +| | the VMA. | +---------------------------+--------------------------------------------------+ | pte_wrprotect | Creates a write protected PTE | +---------------------------+--------------------------------------------------+ @@ -118,7 +119,8 @@ PMD Page Table Helpers +---------------------------+--------------------------------------------------+ | pmd_mkclean | Creates a clean PMD | +---------------------------+--------------------------------------------------+ -| pmd_mkwrite | Creates a writable PMD | +| pmd_mkwrite | Creates a writable PMD of the type specified by | +| | the VMA. | +---------------------------+--------------------------------------------------+ | pmd_wrprotect | Creates a write protected PMD | +---------------------------+--------------------------------------------------+ @@ -222,7 +224,8 @@ HugeTLB Page Table Helpers +---------------------------+--------------------------------------------------+ | huge_pte_mkdirty | Creates a dirty HugeTLB | +---------------------------+--------------------------------------------------+ -| huge_pte_mkwrite | Creates a writable HugeTLB | +| huge_pte_mkwrite | Creates a writable HugeTLB of the type specified | +| | by the VMA. | +---------------------------+--------------------------------------------------+ | huge_pte_wrprotect | Creates a write protected HugeTLB | +---------------------------+--------------------------------------------------+ diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgtable.h index ba43cb841d19..fb5d207c2a89 100644 --- a/arch/alpha/include/asm/pgtable.h +++ b/arch/alpha/include/asm/pgtable.h @@ -256,9 +256,13 @@ extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_FOW; return pte; } extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~(__DIRTY_BITS); return pte; } extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~(__ACCESS_BITS); return pte; } -extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_FOW; return pte; } extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= __DIRTY_BITS; return pte; } extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; return pte; } +extern inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &= ~_PAGE_FOW; + return pte; +} /* * The smp_rmb() in the following functions are required to order the load of diff --git a/arch/arc/include/asm/hugepage.h b/arch/arc/include/asm/hugepage.h index 5001b796fb8d..223a96967188 100644 --- a/arch/arc/include/asm/hugepage.h +++ b/arch/arc/include/asm/hugepage.h @@ -21,7 +21,7 @@ static inline pmd_t pte_pmd(pte_t pte) } #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/arc/include/asm/pgtable-bits-arcv2.h b/arch/arc/include/asm/pgtable-bits-arcv2.h index 6e9f8ca6d6a1..a5b8bc955015 100644 --- a/arch/arc/include/asm/pgtable-bits-arcv2.h +++ b/arch/arc/include/asm/pgtable-bits-arcv2.h @@ -87,7 +87,6 @@ PTE_BIT_FUNC(mknotpresent, &= ~(_PAGE_PRESENT)); PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE)); -PTE_BIT_FUNC(mkwrite, |= (_PAGE_WRITE)); PTE_BIT_FUNC(mkclean, &= ~(_PAGE_DIRTY)); PTE_BIT_FUNC(mkdirty, |= (_PAGE_DIRTY)); PTE_BIT_FUNC(mkold, &= ~(_PAGE_ACCESSED)); @@ -95,6 +94,12 @@ PTE_BIT_FUNC(mkyoung, |= (_PAGE_ACCESSED)); PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL)); PTE_BIT_FUNC(mkhuge, |= (_PAGE_HW_SZ)); +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= (_PAGE_WRITE); + return pte; +} + static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { return __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)); diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 106049791500..df071a807610 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -202,11 +202,16 @@ static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; } PMD_BIT_FUNC(wrprotect, |= L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF); -PMD_BIT_FUNC(mkwrite, &= ~L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkdirty, |= L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkclean, &= ~L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF); +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) +{ + pmd_val(pmd) |= L_PMD_SECT_RDONLY; + return pmd; +} + #define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT)) #define pmd_pfn(pmd) (((pmd_val(pmd) & PMD_MASK) & PHYS_MASK) >> PAGE_SHIFT) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index a58ccbb406ad..39ad1ae1308d 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -227,7 +227,7 @@ static inline pte_t pte_wrprotect(pte_t pte) return set_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return clear_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index cccf8885792e..913bf370f74a 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -187,7 +187,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -492,7 +492,7 @@ static inline int pmd_trans_huge(pmd_t pmd) #define pmd_cont(pmd) pte_cont(pmd_pte(pmd)) #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtable.h index d4042495febc..c2f92c991e37 100644 --- a/arch/csky/include/asm/pgtable.h +++ b/arch/csky/include/asm/pgtable.h @@ -176,7 +176,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) diff --git a/arch/hexagon/include/asm/pgtable.h b/arch/hexagon/include/asm/pgtable.h index 59393613d086..14ab9c789c0e 100644 --- a/arch/hexagon/include/asm/pgtable.h +++ b/arch/hexagon/include/asm/pgtable.h @@ -300,7 +300,7 @@ static inline pte_t pte_wrprotect(pte_t pte) } /* pte_mkwrite - mark page as writable */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h index 21c97e31a28a..f879dd626da6 100644 --- a/arch/ia64/include/asm/pgtable.h +++ b/arch/ia64/include/asm/pgtable.h @@ -268,7 +268,7 @@ ia64_phys_addr_valid (unsigned long addr) * access rights: */ #define pte_wrprotect(pte) (__pte(pte_val(pte) & ~_PAGE_AR_RW)) -#define pte_mkwrite(pte) (__pte(pte_val(pte) | _PAGE_AR_RW)) +#define pte_mkwrite(pte, vma) (__pte(pte_val(pte) | _PAGE_AR_RW)) #define pte_mkold(pte) (__pte(pte_val(pte) & ~_PAGE_A)) #define pte_mkyoung(pte) (__pte(pte_val(pte) | _PAGE_A)) #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h index d28fb9dbec59..ebf645f40298 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -390,7 +390,7 @@ static inline pte_t pte_mkdirty(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -490,7 +490,7 @@ static inline int pmd_write(pmd_t pmd) return !!(pmd_val(pmd) & _PAGE_WRITE); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |= _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/m68k/include/asm/mcf_pgtable.h b/arch/m68k/include/asm/mcf_pgtable.h index 13741c1245e1..37d77e055016 100644 --- a/arch/m68k/include/asm/mcf_pgtable.h +++ b/arch/m68k/include/asm/mcf_pgtable.h @@ -211,7 +211,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= CF_PAGE_WRITABLE; return pte; diff --git a/arch/m68k/include/asm/motorola_pgtable.h b/arch/m68k/include/asm/motorola_pgtable.h index ec0dc19ab834..c4e8eb76286d 100644 --- a/arch/m68k/include/asm/motorola_pgtable.h +++ b/arch/m68k/include/asm/motorola_pgtable.h @@ -155,7 +155,6 @@ static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_RONLY; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_RONLY; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) @@ -168,6 +167,11 @@ static inline pte_t pte_mkcache(pte_t pte) pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemode; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &= ~_PAGE_RONLY; + return pte; +} #define swapper_pg_dir kernel_pg_dir extern pgd_t kernel_pg_dir[128]; diff --git a/arch/m68k/include/asm/sun3_pgtable.h b/arch/m68k/include/asm/sun3_pgtable.h index e582b0484a55..2a06bea51a1e 100644 --- a/arch/m68k/include/asm/sun3_pgtable.h +++ b/arch/m68k/include/asm/sun3_pgtable.h @@ -143,10 +143,14 @@ static inline int pte_young(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESS static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_WRITEABLE; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_MODIFIED; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= SUN3_PAGE_WRITEABLE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= SUN3_PAGE_MODIFIED; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= SUN3_PAGE_ACCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) { pte_val(pte) |= SUN3_PAGE_NOCACHE; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= SUN3_PAGE_WRITEABLE; + return pte; +} // use this version when caches work... //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &= SUN3_PAGE_NOCACHE; return pte; } // until then, use: diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/include/asm/pgtable.h index d1b8272abcd9..5b83e82f8d7e 100644 --- a/arch/microblaze/include/asm/pgtable.h +++ b/arch/microblaze/include/asm/pgtable.h @@ -266,7 +266,7 @@ static inline pte_t pte_mkread(pte_t pte) \ { pte_val(pte) |= _PAGE_USER; return pte; } static inline pte_t pte_mkexec(pte_t pte) \ { pte_val(pte) |= _PAGE_USER | _PAGE_EXEC; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) \ +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) \ { pte_val(pte) |= _PAGE_RW; return pte; } static inline pte_t pte_mkdirty(pte_t pte) \ { pte_val(pte) |= _PAGE_DIRTY; return pte; } diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index 791389bf3c12..06efd567144a 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -309,7 +309,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte.pte_low |= _PAGE_WRITE; if (pte.pte_low & _PAGE_MODIFIED) { @@ -364,7 +364,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -626,7 +626,7 @@ static inline pmd_t pmd_wrprotect(pmd_t pmd) return pmd; } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |= _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgtable.h index 0f5c2564e9f5..edd458518e0e 100644 --- a/arch/nios2/include/asm/pgtable.h +++ b/arch/nios2/include/asm/pgtable.h @@ -129,7 +129,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/openrisc/include/asm/pgtable.h b/arch/openrisc/include/asm/pgtable.h index 3eb9b9555d0d..fd40aec189d1 100644 --- a/arch/openrisc/include/asm/pgtable.h +++ b/arch/openrisc/include/asm/pgtable.h @@ -250,7 +250,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h index e2950f5db7c9..89f62137e67f 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h @@ -331,8 +331,12 @@ static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; retu static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_WRITE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= _PAGE_WRITE; + return pte; +} /* * Huge pte definitions. diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/include/asm/book3s/32/pgtable.h index 7bf1fe7297c6..10d9a1d2aca9 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -498,7 +498,7 @@ static inline pte_t pte_mkpte(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h index 4acc9690f599..be0636522d36 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -600,7 +600,7 @@ static inline pte_t pte_mkexec(pte_t pte) return __pte_raw(pte_raw(pte) | cpu_to_be64(_PAGE_EXEC)); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { /* * write implies read, hence set both @@ -1071,7 +1071,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY #define pmd_soft_dirty(pmd) pte_soft_dirty(pmd_pte(pmd)) diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h index fec56d965f00..7bfbcb9ba55b 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -171,7 +171,7 @@ void unmap_kernel_page(unsigned long va); do { pte_update(mm, addr, ptep, ~0, 0, 0); } while (0) #ifndef pte_mkwrite -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/nohash/32/pte-8xx.h b/arch/powerpc/include/asm/nohash/32/pte-8xx.h index 1a89ebdc3acc..f32450eb270a 100644 --- a/arch/powerpc/include/asm/nohash/32/pte-8xx.h +++ b/arch/powerpc/include/asm/nohash/32/pte-8xx.h @@ -101,7 +101,7 @@ static inline int pte_write(pte_t pte) #define pte_write pte_write -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) & ~_PAGE_RO); } diff --git a/arch/powerpc/include/asm/nohash/64/pgtable.h b/arch/powerpc/include/asm/nohash/64/pgtable.h index 287e25864ffa..589009555877 100644 --- a/arch/powerpc/include/asm/nohash/64/pgtable.h +++ b/arch/powerpc/include/asm/nohash/64/pgtable.h @@ -85,7 +85,7 @@ #ifndef __ASSEMBLY__ /* pte_clear moved to later in this file */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index d8d8de0ded99..fed1b81fbe07 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -338,7 +338,7 @@ static inline pte_t pte_wrprotect(pte_t pte) /* static inline pte_t pte_mkread(pte_t pte) */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_WRITE); } @@ -624,9 +624,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pte_pmd(pte_mkyoung(pmd_pte(pmd))); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { - return pte_pmd(pte_mkwrite(pmd_pte(pmd))); + return pte_pmd(pte_mkwrite(pmd_pte(pmd), vma)); } static inline pmd_t pmd_wrprotect(pmd_t pmd) diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h index ccdbccfde148..558f7eef9c4d 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -102,9 +102,9 @@ static inline int huge_pte_dirty(pte_t pte) return pte_dirty(pte); } -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } static inline pte_t huge_pte_mkdirty(pte_t pte) diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index deeb918cae1d..8f2c743da0eb 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -1013,7 +1013,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -1499,7 +1499,7 @@ static inline pmd_t pmd_mkwrite_kernel(pmd_t pmd) return pmd; } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_mkwrite_kernel(pmd); } diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 21952b094650..9f2dcb9eafc8 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -351,6 +351,12 @@ static inline void set_pte(pte_t *ptep, pte_t pte) #define PTE_BIT_FUNC(h,fn,op) \ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } +#define PTE_BIT_FUNC_VMA(h,fn,op) \ +static inline pte_t pte_##fn(pte_t pte, struct vm_area_struct *vma) \ +{ \ + pte.pte_##h op; \ + return pte; \ +} #ifdef CONFIG_X2TLB /* @@ -359,11 +365,11 @@ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } * kernel permissions), we attempt to couple them a bit more sanely here. */ PTE_BIT_FUNC(high, wrprotect, &= ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE)); -PTE_BIT_FUNC(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); +PTE_BIT_FUNC_VMA(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); PTE_BIT_FUNC(high, mkhuge, |= _PAGE_SZHUGE); #else PTE_BIT_FUNC(low, wrprotect, &= ~_PAGE_RW); -PTE_BIT_FUNC(low, mkwrite, |= _PAGE_RW); +PTE_BIT_FUNC_VMA(low, mkwrite, |= _PAGE_RW); PTE_BIT_FUNC(low, mkhuge, |= _PAGE_SZHUGE); #endif diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h index d4330e3c57a6..3e8836179456 100644 --- a/arch/sparc/include/asm/pgtable_32.h +++ b/arch/sparc/include/asm/pgtable_32.h @@ -241,7 +241,7 @@ static inline pte_t pte_mkold(pte_t pte) return __pte(pte_val(pte) & ~SRMMU_REF); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | SRMMU_WRITE); } diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index 2dc8d4641734..c5cd5c03f557 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -466,7 +466,7 @@ static inline pte_t pte_mkclean(pte_t pte) return __pte(val); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { unsigned long val = pte_val(pte), mask; @@ -756,11 +756,11 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return __pmd(pte_val(pte)); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pte_t pte = __pte(pmd_val(pmd)); - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); return __pmd(pte_val(pte)); } diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index a70d1618eb35..963479c133b7 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h @@ -207,7 +207,7 @@ static inline pte_t pte_mkyoung(pte_t pte) return(pte); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (unlikely(pte_get_bits(pte, _PAGE_RW))) return pte; diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 3607f2572f9e..66c514808276 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -369,7 +369,9 @@ 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) +struct vm_area_struct; + +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -470,7 +472,7 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pmd_set_flags(pmd, _PAGE_ACCESSED); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_set_flags(pmd, _PAGE_RW); } diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pgtable.h index fc7a14884c6c..d72632d9c53c 100644 --- a/arch/xtensa/include/asm/pgtable.h +++ b/arch/xtensa/include/asm/pgtable.h @@ -262,7 +262,7 @@ static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITABLE; return pte; } #define pgprot_noncached(prot) \ diff --git a/include/asm-generic/hugetlb.h b/include/asm-generic/hugetlb.h index d7f6335d3999..e86c830728de 100644 --- a/include/asm-generic/hugetlb.h +++ b/include/asm-generic/hugetlb.h @@ -20,9 +20,9 @@ static inline unsigned long huge_pte_dirty(pte_t pte) return pte_dirty(pte); } -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT diff --git a/include/linux/mm.h b/include/linux/mm.h index 1f79667824eb..af652444fbba 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1163,7 +1163,7 @@ void free_compound_page(struct page *page); static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); return pte; } diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index af59cc7bd307..7bc5592900bc 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -109,10 +109,10 @@ static void __init pte_basic_tests(struct pgtable_debug_args *args, int idx) WARN_ON(!pte_same(pte, pte)); WARN_ON(!pte_young(pte_mkyoung(pte_mkold(pte)))); WARN_ON(!pte_dirty(pte_mkdirty(pte_mkclean(pte)))); - WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte)))); + WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte), args->vma))); WARN_ON(pte_young(pte_mkold(pte_mkyoung(pte)))); WARN_ON(pte_dirty(pte_mkclean(pte_mkdirty(pte)))); - WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); + WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte, args->vma)))); WARN_ON(pte_dirty(pte_wrprotect(pte_mkclean(pte)))); WARN_ON(!pte_dirty(pte_wrprotect(pte_mkdirty(pte)))); } @@ -153,7 +153,7 @@ static void __init pte_advanced_tests(struct pgtable_debug_args *args) pte = pte_mkclean(pte); set_pte_at(args->mm, args->vaddr, args->ptep, pte); flush_dcache_page(page); - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, args->vma); pte = pte_mkdirty(pte); ptep_set_access_flags(args->vma, args->vaddr, args->ptep, pte, 1); pte = ptep_get(args->ptep); @@ -199,10 +199,10 @@ static void __init pmd_basic_tests(struct pgtable_debug_args *args, int idx) WARN_ON(!pmd_same(pmd, pmd)); WARN_ON(!pmd_young(pmd_mkyoung(pmd_mkold(pmd)))); WARN_ON(!pmd_dirty(pmd_mkdirty(pmd_mkclean(pmd)))); - WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd)))); + WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd), args->vma))); WARN_ON(pmd_young(pmd_mkold(pmd_mkyoung(pmd)))); WARN_ON(pmd_dirty(pmd_mkclean(pmd_mkdirty(pmd)))); - WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd)))); + WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd, args->vma)))); WARN_ON(pmd_dirty(pmd_wrprotect(pmd_mkclean(pmd)))); WARN_ON(!pmd_dirty(pmd_wrprotect(pmd_mkdirty(pmd)))); /* @@ -253,7 +253,7 @@ static void __init pmd_advanced_tests(struct pgtable_debug_args *args) pmd = pmd_mkclean(pmd); set_pmd_at(args->mm, vaddr, args->pmdp, pmd); flush_dcache_page(page); - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, args->vma); pmd = pmd_mkdirty(pmd); pmdp_set_access_flags(args->vma, vaddr, args->pmdp, pmd, 1); pmd = READ_ONCE(*args->pmdp); @@ -928,8 +928,8 @@ static void __init hugetlb_basic_tests(struct pgtable_debug_args *args) pte = mk_huge_pte(page, args->page_prot); WARN_ON(!huge_pte_dirty(huge_pte_mkdirty(pte))); - WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte)))); - WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte)))); + WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte), args->vma))); + WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte, args->vma)))); #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB pte = pfn_pte(args->fixed_pmd_pfn, args->page_prot); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4fc43859e59a..aaf815838144 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -555,7 +555,7 @@ __setup("transparent_hugepage=", setup_transparent_hugepage); pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, vma); return pmd; } @@ -1580,7 +1580,7 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf) pmd = pmd_modify(oldpmd, vma->vm_page_prot); pmd = pmd_mkyoung(pmd); if (writable) - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, vma); set_pmd_at(vma->vm_mm, haddr, vmf->pmd, pmd); update_mmu_cache_pmd(vma, vmf->address, vmf->pmd); spin_unlock(vmf->ptl); @@ -1926,7 +1926,7 @@ int change_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, /* See change_pte_range(). */ if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pmd_write(entry) && can_change_pmd_writable(vma, addr, entry)) - entry = pmd_mkwrite(entry); + entry = pmd_mkwrite(entry, vma); ret = HPAGE_PMD_NR; set_pmd_at(mm, addr, pmd, entry); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 07abcb6eb203..6af471bdcff8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4900,7 +4900,7 @@ static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page, if (writable) { entry = huge_pte_mkwrite(huge_pte_mkdirty(mk_huge_pte(page, - vma->vm_page_prot))); + vma->vm_page_prot)), vma); } else { entry = huge_pte_wrprotect(mk_huge_pte(page, vma->vm_page_prot)); @@ -4916,7 +4916,7 @@ static void set_huge_ptep_writable(struct vm_area_struct *vma, { pte_t entry; - entry = huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep))); + entry = huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep)), vma); if (huge_ptep_set_access_flags(vma, address, ptep, entry, 1)) update_mmu_cache(vma, address, ptep); } diff --git a/mm/memory.c b/mm/memory.c index f456f3b5049c..d0972d2d6f36 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4067,7 +4067,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf) entry = mk_pte(&folio->page, vma->vm_page_prot); entry = pte_sw_mkyoung(entry); if (vma->vm_flags & VM_WRITE) - entry = pte_mkwrite(pte_mkdirty(entry)); + entry = pte_mkwrite(pte_mkdirty(entry), vma); vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); @@ -4755,7 +4755,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) pte = pte_modify(old_pte, vma->vm_page_prot); pte = pte_mkyoung(pte); if (writable) - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); update_mmu_cache(vma, vmf->address, vmf->pte); pte_unmap_unlock(vmf->pte, vmf->ptl); diff --git a/mm/migrate_device.c b/mm/migrate_device.c index d30c9de60b0d..df3f5e9d5f76 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -646,7 +646,7 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate, } entry = mk_pte(page, vma->vm_page_prot); if (vma->vm_flags & VM_WRITE) - entry = pte_mkwrite(pte_mkdirty(entry)); + entry = pte_mkwrite(pte_mkdirty(entry), vma); } ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl); diff --git a/mm/mprotect.c b/mm/mprotect.c index 1d4843c97c2a..381163a41e88 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -198,7 +198,7 @@ static long change_pte_range(struct mmu_gather *tlb, if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pte_write(ptent) && can_change_pte_writable(vma, addr, ptent)) - ptent = pte_mkwrite(ptent); + ptent = pte_mkwrite(ptent, vma); ptep_modify_prot_commit(vma, addr, pte, oldpte, ptent); if (pte_needs_flush(oldpte, ptent)) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 53c3d916ff66..3db6f87c0aca 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -75,7 +75,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, if (page_in_cache && !vm_shared) writable = false; if (writable) - _dst_pte = pte_mkwrite(_dst_pte); + _dst_pte = pte_mkwrite(_dst_pte, dst_vma); if (wp_copy) _dst_pte = pte_mkuffd_wp(_dst_pte); -- 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 9DA7AC83004 for ; Mon, 27 Feb 2023 22:32:00 +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=gW9mEGXlFO7K++gMRLfIzJt9HVe+rfLCDXhOF6xWAAY=; b=qHm244yheVGAAj bDRzgUrJfuAIvr97vl07rFKeR+qd4GLgbeLIRVPOlea2UXSEDPPGqdqSLqz3YGOJPh3vQwryeb4WZ DlzEObgYeBoM1DyHF1C7ejlnDkSNMDu+lIslCgsgVTPNH0+vM8uyLSTyE22MglW1MEz2RBNSO7Tii l/+ZJvI7Z5LQGjTsluFvvwMIWodhP1BUEfzouGQEUJMtkq0CXkNLZ/C2UQJIuKV9zDk5km61jTz1X 6q3OW1HtYQAka+vhwj9PGl4K89ed6vcCzprE2UKxdqG86/LKiqBnurBdj1tB2TJJN/wNKnaINpNst BKNjdMfRYnUs5hajMBtw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pWm2I-00BSq3-Mt; Mon, 27 Feb 2023 22:31:58 +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 1pWm21-00BSc7-2O; Mon, 27 Feb 2023 22:31:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537101; x=1709073101; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=Gd++Ss6FzJgVgLN+e7b1/Qj/XCssBYw8HMemTiMAFCDT2I0YJjp+vXfj s3DuuFNSVTpwLhkOWNYB+Y7YfxXN4B/SE0pdCLezc0JQLQ3T+lzThgBtU mkyCpB9DX90G2IhFoUFaNjYqmLhpj9ZRi8/rueexwktdAMpr6dgbAE9Lu PrYhte6wFSJjeai4GZl6L055aLyn62Amjzl2y3ZyYT6PTBuFgpwNgvqYo wxzY9fM3mUgsRwFi/wbkZYaJxv95pKLxzYOHUKkAwPzDnJMFDzWKyhDP7 aP9hiIs+a73LZ0xEvgu+kdcIC/f6A1j9OMWHD/lZ0J6P1KefdAOmxUr8D Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657340" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657340" 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:22 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024498" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024498" 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:16 -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-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-Id: <20230227222957.24501-14-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_143141_236167_D79B9E4E X-CRM114-Status: GOOD ( 20.85 ) X-BeenThere: linux-um@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-um" Errors-To: linux-um-bounces+linux-um=archiver.kernel.org@lists.infradead.org VGhlIHg4NiBDb250cm9sLWZsb3cgRW5mb3JjZW1lbnQgVGVjaG5vbG9neSAoQ0VUKSBmZWF0dXJl IGluY2x1ZGVzIGEgbmV3CnR5cGUgb2YgbWVtb3J5IGNhbGxlZCBzaGFkb3cgc3RhY2suIFRoaXMg c2hhZG93IHN0YWNrIG1lbW9yeSBoYXMgc29tZQp1bnVzdWFsIHByb3BlcnRpZXMsIHdoaWNoIHJl cXVpcmVzIHNvbWUgY29yZSBtbSBjaGFuZ2VzIHRvIGZ1bmN0aW9uCnByb3Blcmx5LgoKT25lIG9m IHRoZXNlIHVudXN1YWwgcHJvcGVydGllcyBpcyB0aGF0IHNoYWRvdyBzdGFjayBtZW1vcnkgaXMg d3JpdGFibGUsCmJ1dCBvbmx5IGluIGxpbWl0ZWQgd2F5cy4gVGhlc2UgbGltaXRzIGFyZSBhcHBs aWVkIHZpYSBhIHNwZWNpZmljIFBURQpiaXQgY29tYmluYXRpb24uIE5ldmVydGhlbGVzcywgdGhl IG1lbW9yeSBpcyB3cml0YWJsZSwgYW5kIGNvcmUgbW0gY29kZQp3aWxsIG5lZWQgdG8gYXBwbHkg dGhlIHdyaXRhYmxlIHBlcm1pc3Npb25zIGluIHRoZSB0eXBpY2FsIHBhdGhzIHRoYXQKY2FsbCBw dGVfbWt3cml0ZSgpLgoKSW4gYWRkaXRpb24gdG8gVk1fV1JJVEUsIHRoZSBzaGFkb3cgc3RhY2sg Vk1BJ3Mgd2lsbCBoYXZlIGEgZmxhZyBkZW5vdGluZwp0aGF0IHRoZXkgYXJlIHNwZWNpYWwgc2hh ZG93IHN0YWNrIGZsYXZvciBvZiB3cml0YWJsZSBtZW1vcnkuIFNvIG1ha2UKcHRlX21rd3JpdGUo KSB0YWtlIGEgVk1BLCBzbyB0aGF0IHRoZSB4ODYgaW1wbGVtZW50YXRpb24gb2YgaXQgY2FuIGtu b3cgdG8KY3JlYXRlIHJlZ3VsYXIgd3JpdGFibGUgbWVtb3J5IG9yIHNoYWRvdyBzdGFjayBtZW1v cnkuCgpBcHBseSB0aGUgc2FtZSBjaGFuZ2VzIGZvciBwbWRfbWt3cml0ZSgpIGFuZCBodWdlX3B0 ZV9ta3dyaXRlKCkuCgpObyBmdW5jdGlvbmFsIGNoYW5nZS4KCkNjOiBsaW51eC1kb2NAdmdlci5r ZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1hbHBo YUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNucHMtYXJjQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgtY3NreUB2 Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWhleGFnb25Admdlci5rZXJuZWwub3JnCkNjOiBsaW51 eC1pYTY0QHZnZXIua2VybmVsLm9yZwpDYzogbG9vbmdhcmNoQGxpc3RzLmxpbnV4LmRldgpDYzog bGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwpDYzogTWljaGFsIFNpbWVrIDxtb25zdHJA bW9uc3RyLmV1PgpDYzogRGluaCBOZ3V5ZW4gPGRpbmd1eWVuQGtlcm5lbC5vcmc+CkNjOiBsaW51 eC1taXBzQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtb3BlbnJpc2NAdmdlci5rZXJuZWwub3Jn CkNjOiBsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eHBwYy1kZXZAbGlzdHMu b3psYWJzLm9yZwpDYzogbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgt czM5MEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNoQHZnZXIua2VybmVsLm9yZwpDYzogc3Bh cmNsaW51eEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogbGludXgtYXJjaEB2Z2VyLmtl cm5lbC5vcmcKQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwpUZXN0ZWQtYnk6IFBlbmdmZWkgWHUgPHBl bmdmZWkueHVAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IEpvaG4gQWxsZW4gPGpvaG4uYWxsZW5AYW1k LmNvbT4KVGVzdGVkLWJ5OiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KQWNrZWQt Ynk6IE1pa2UgUmFwb3BvcnQgKElCTSkgPHJwcHRAa2VybmVsLm9yZz4KQWNrZWQtYnk6IE1pY2hh ZWwgRWxsZXJtYW4gPG1wZUBlbGxlcm1hbi5pZC5hdT4KQWNrZWQtYnk6IERhdmlkIEhpbGRlbmJy YW5kIDxkYXZpZEByZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogS2VlcyBDb29rIDxrZWVzY29va0Bj aHJvbWl1bS5vcmc+ClN1Z2dlc3RlZC1ieTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhdmlkQHJlZGhh dC5jb20+ClNpZ25lZC1vZmYtYnk6IFJpY2sgRWRnZWNvbWJlIDxyaWNrLnAuZWRnZWNvbWJlQGlu dGVsLmNvbT4KCi0tLQpIaSBOb24teDg2IEFyY2jigJlzLAoKeDg2IGhhcyBhIGZlYXR1cmUgdGhh dCBhbGxvd3MgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHNwZWNpYWwgdHlwZSBvZgp3cml0YWJsZSBt ZW1vcnkgKHNoYWRvdyBzdGFjaykgdGhhdCBpcyBvbmx5IHdyaXRhYmxlIGluIGxpbWl0ZWQgc3Bl Y2lmaWMKd2F5cy4gUHJldmlvdXNseSwgY2hhbmdlcyB3ZXJlIHByb3Bvc2VkIHRvIGNvcmUgTU0g Y29kZSB0byB0ZWFjaCBpdCB0bwpkZWNpZGUgd2hlbiB0byBjcmVhdGUgbm9ybWFsbHkgd3JpdGFi bGUgbWVtb3J5IG9yIHRoZSBzcGVjaWFsIHNoYWRvdyBzdGFjawp3cml0YWJsZSBtZW1vcnksIGJ1 dCBEYXZpZCBIaWxkZW5icmFuZCBzdWdnZXN0ZWRbMF0gdG8gY2hhbmdlCnBYWF9ta3dyaXRlKCkg dG8gdGFrZSBhIFZNQSwgc28gYXdhcmVuZXNzIG9mIHNoYWRvdyBzdGFjayBtZW1vcnkgY2FuIGJl Cm1vdmVkIGludG8geDg2IGNvZGUuCgpTaW5jZSBwWFhfbWt3cml0ZSgpIGlzIGRlZmluZWQgaW4g ZXZlcnkgYXJjaCwgaXQgcmVxdWlyZXMgc29tZSB0cmVlLXdpZGUKY2hhbmdlcy4gU28gdGhhdCBp cyB3aHkgeW91IGFyZSBzZWVpbmcgc29tZSBwYXRjaGVzIG91dCBvZiBhIGJpZyB4ODYKc2VyaWVz IHBvcCB1cCBpbiB5b3VyIGFyY2ggbWFpbGluZyBsaXN0LiBUaGVyZSBpcyBubyBmdW5jdGlvbmFs IGNoYW5nZS4KQWZ0ZXIgdGhpcyByZWZhY3RvciwgdGhlIHNoYWRvdyBzdGFjayBzZXJpZXMgZ29l cyBvbiB0byB1c2UgdGhlIGFyY2gKaGVscGVycyB0byBwdXNoIHNoYWRvdyBzdGFjayBtZW1vcnkg ZGV0YWlscyBpbnNpZGUgYXJjaC94ODYuCgpUZXN0aW5nIHdhcyBqdXN0IDAtZGF5IGJ1aWxkIHRl c3RpbmcuCgpIb3BlZnVsbHkgdGhhdCBpcyBlbm91Z2ggY29udGV4dC4gVGhhbmtzIQoKWzBdIGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMGUyOWEyZDAtMDhkOC1iY2Q2LWZmMjYtNGJlYTBl NDAzN2IwQHJlZGhhdC5jb20vI3QKCnY2OgogLSBOZXcgcGF0Y2gKLS0tCiBEb2N1bWVudGF0aW9u L21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdCAgICB8ICA5ICsrKysrKy0tLQogYXJjaC9hbHBo YS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvYXJj L2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvYXJjL2lu Y2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oICAgIHwgIDcgKysrKysrLQogYXJjaC9hcm0v aW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCAgICAgICAgfCAgNyArKysrKystCiBhcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgICB8ICAyICstCiBhcmNoL2FybTY0 L2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAgICB8ICA0ICsrLS0KIGFyY2gvY3NreS9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaGV4YWdvbi9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaWE2NC9pbmNsdWRl L2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvbG9vbmdhcmNoL2luY2x1 ZGUvYXNtL3BndGFibGUuaCAgICAgICAgIHwgIDQgKystLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNt L21jZl9wZ3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21v dG9yb2xhX3BndGFibGUuaCAgICAgfCAgNiArKysrKy0KIGFyY2gvbTY4ay9pbmNsdWRlL2FzbS9z dW4zX3BndGFibGUuaCAgICAgICAgIHwgIDYgKysrKystCiBhcmNoL21pY3JvYmxhemUvaW5jbHVk ZS9hc20vcGd0YWJsZS5oICAgICAgICB8ICAyICstCiBhcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0 YWJsZS5oICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgICAgfCAgMiArLQogYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJs ZS5oICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29r M3MvMzIvcGd0YWJsZS5oIHwgIDIgKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3Mv NjQvcGd0YWJsZS5oIHwgIDQgKystLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8z Mi9wZ3RhYmxlLmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9w dGUtOHh4LmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3Rh YmxlLmggfCAgMiArLQogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAg ICAgfCAgNiArKystLS0KIGFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmggICAgICAgICAg ICAgIHwgIDQgKystLQogYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgfCAgNCArKy0tCiBhcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCAgICAgICAgICAg ICB8IDEwICsrKysrKysrLS0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oICAg ICAgICAgIHwgIDIgKy0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oICAgICAg ICAgIHwgIDYgKysrLS0tCiBhcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgICB8ICAyICstCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAg ICB8ICA2ICsrKystLQogYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oICAgICAgICAg ICAgfCAgMiArLQogaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmggICAgICAgICAgICAgICAg fCAgNCArKy0tCiBpbmNsdWRlL2xpbnV4L21tLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAyICstCiBtbS9kZWJ1Z192bV9wZ3RhYmxlLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE2 ICsrKysrKysrLS0tLS0tLS0KIG1tL2h1Z2VfbWVtb3J5LmMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDYgKysrLS0tCiBtbS9odWdldGxiLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA0ICsrLS0KIG1tL21lbW9yeS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDQgKystLQogbW0vbWlncmF0ZV9kZXZpY2UuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMiArLQogbW0vbXByb3RlY3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMiArLQogbW0vdXNlcmZhdWx0ZmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMiArLQogNDIgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMu cnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QKaW5kZXggMzBk OWEwOWYwMWY0Li43OGFjM2ZmMmZlMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vYXJj aF9wZ3RhYmxlX2hlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxl X2hlbHBlcnMucnN0CkBAIC00Niw3ICs0Niw4IEBAIFBURSBQYWdlIFRhYmxlIEhlbHBlcnMKICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHB0ZV9ta2NsZWFuICAgICAgICAgICAgICAgfCBDcmVh dGVzIGEgY2xlYW4gUFRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKLXwgcHRlX21rd3JpdGUgICAgICAgICAgICAgICB8IENyZWF0ZXMgYSB3 cml0YWJsZSBQVEUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHB0ZV9ta3dyaXRlICAg ICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUFRFIG9mIHRoZSB0eXBlIHNwZWNpZmll ZCBieSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIFZNQS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CiB8IHB0ZV93cnByb3RlY3QgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVk IFBURSAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEx OCw3ICsxMTksOCBAQCBQTUQgUGFnZSBUYWJsZSBIZWxwZXJzCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwogfCBwbWRfbWtjbGVhbiAgICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIGNsZWFuIFBNRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18 IHBtZF9ta3dyaXRlICAgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUE1EICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorfCBwbWRfbWt3cml0ZSAgICAgICAgICAgICAgIHwgQ3Jl YXRlcyBhIHdyaXRhYmxlIFBNRCBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgIHwKK3wgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHRoZSBWTUEuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBwbWRfd3Jwcm90ZWN0 ICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIHdyaXRlIHByb3RlY3RlZCBQTUQgICAgICAgICAgICAg ICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMjIsNyArMjI0LDggQEAgSHVn ZVRMQiBQYWdlIFRhYmxlIEhlbHBlcnMKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2Vf cHRlX21rZGlydHkgICAgICAgICAgfCBDcmVhdGVzIGEgZGlydHkgSHVnZVRMQiAgICAgICAgICAg ICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaHVnZV9wdGVfbWt3 cml0ZSAgICAgICAgICB8IENyZWF0ZXMgYSB3cml0YWJsZSBIdWdlVExCICAgICAgICAgICAgICAg ICAgICAgICB8Cit8IGh1Z2VfcHRlX21rd3JpdGUgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFi bGUgSHVnZVRMQiBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgfAorfCAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgYnkgdGhlIFZNQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2VfcHRlX3dycHJvdGVjdCAgICAgICAg fCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVkIEh1Z2VUTEIgICAgICAgICAgICAgICAgfAogKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYmE0M2Ni ODQxZDE5Li5mYjVkMjA3YzJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNTYs OSArMjU2LDEzIEBAIGV4dGVybiBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJl dHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsKIGV4dGVybiBpbmxpbmUgcHRlX3Qg cHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0ZPVzsgcmV0 dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsg cHRlX3ZhbChwdGUpICY9IH4oX19ESVJUWV9CSVRTKTsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+KF9fQUND RVNTX0JJVFMpOyByZXR1cm4gcHRlOyB9Ci1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRl KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsgcmV0dXJuIHB0ZTsgfQog ZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUp IHw9IF9fRElSVFlfQklUUzsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVf bWt5b3VuZyhwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9fQUNDRVNTX0JJVFM7IHJldHVy biBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsK KwlyZXR1cm4gcHRlOworfQogCiAvKgogICogVGhlIHNtcF9ybWIoKSBpbiB0aGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgdG8gb3JkZXIgdGhlIGxvYWQgb2YKZGlmZiAtLWdpdCBh L2FyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9o dWdlcGFnZS5oCmluZGV4IDUwMDFiNzk2ZmI4ZC4uMjIzYTk2OTY3MTg4IDEwMDY0NAotLS0gYS9h cmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNt L2h1Z2VwYWdlLmgKQEAgLTIxLDcgKzIxLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwdGVfcG1k KHB0ZV90IHB0ZSkKIH0KIAogI2RlZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVf d3Jwcm90ZWN0KHBtZF9wdGUocG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3Bt ZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZt YSkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKICNkZWZpbmUgcG1k X21rZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9ta2RpcnR5KHBtZF9wdGUocG1kKSkpCiAjZGVmaW5l IHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBtZCkpKQogI2RlZmlu ZSBwbWRfbWt5b3VuZyhwbWQpCXB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSkKZGlm ZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oIGIvYXJj aC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLWFyY3YyLmgKaW5kZXggNmU5ZjhjYTZkNmEx Li5hNWI4YmM5NTUwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUt Yml0cy1hcmN2Mi5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2 Mi5oCkBAIC04Nyw3ICs4Nyw2IEBACiAKIFBURV9CSVRfRlVOQyhta25vdHByZXNlbnQsICAgICAm PSB+KF9QQUdFX1BSRVNFTlQpKTsKIFBURV9CSVRfRlVOQyh3cnByb3RlY3QsCSY9IH4oX1BBR0Vf V1JJVEUpKTsKLVBURV9CSVRfRlVOQyhta3dyaXRlLAl8PSAoX1BBR0VfV1JJVEUpKTsKIFBURV9C SVRfRlVOQyhta2NsZWFuLAkmPSB+KF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtkaXJ0 eSwJfD0gKF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtvbGQsCSY9IH4oX1BBR0VfQUND RVNTRUQpKTsKQEAgLTk1LDYgKzk0LDEyIEBAIFBURV9CSVRfRlVOQyhta3lvdW5nLAl8PSAoX1BB R0VfQUNDRVNTRUQpKTsKIFBURV9CSVRfRlVOQyhta3NwZWNpYWwsCXw9IChfUEFHRV9TUEVDSUFM KSk7CiBQVEVfQklUX0ZVTkMobWtodWdlLAl8PSAoX1BBR0VfSFdfU1opKTsKIAorc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQoreworCXB0ZV92YWwocHRlKSB8PSAoX1BBR0VfV1JJVEUpOworCXJldHVybiBwdGU7Cit9 CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5l d3Byb3QpCiB7CiAJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykg fCBwZ3Byb3RfdmFsKG5ld3Byb3QpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNt L3BndGFibGUtM2xldmVsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5o CmluZGV4IDEwNjA0OTc5MTUwMC4uZGYwNzFhODA3NjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9p bmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Bn dGFibGUtM2xldmVsLmgKQEAgLTIwMiwxMSArMjAyLDE2IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qg cG1kXyMjZm4ocG1kX3QgcG1kKSB7IHBtZF92YWwocG1kKSBvcDsgcmV0dXJuIHBtZDsgfQogCiBQ TURfQklUX0ZVTkMod3Jwcm90ZWN0LAl8PSBMX1BNRF9TRUNUX1JET05MWSk7CiBQTURfQklUX0ZV TkMobWtvbGQsCSY9IH5QTURfU0VDVF9BRik7Ci1QTURfQklUX0ZVTkMobWt3cml0ZSwgICAmPSB+ TF9QTURfU0VDVF9SRE9OTFkpOwogUE1EX0JJVF9GVU5DKG1rZGlydHksICAgfD0gTF9QTURfU0VD VF9ESVJUWSk7CiBQTURfQklUX0ZVTkMobWtjbGVhbiwgICAmPSB+TF9QTURfU0VDVF9ESVJUWSk7 CiBQTURfQklUX0ZVTkMobWt5b3VuZywgICB8PSBQTURfU0VDVF9BRik7CiAKK3N0YXRpYyBpbmxp bmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlwbWRfdmFsKHBtZCkgfD0gTF9QTURfU0VDVF9SRE9OTFk7CisJcmV0dXJuIHBtZDsK K30KKwogI2RlZmluZSBwbWRfbWtodWdlKHBtZCkJCShfX3BtZChwbWRfdmFsKHBtZCkgJiB+UE1E X1RBQkxFX0JJVCkpCiAKICNkZWZpbmUgcG1kX3BmbihwbWQpCQkoKChwbWRfdmFsKHBtZCkgJiBQ TURfTUFTSykgJiBQSFlTX01BU0spID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK aW5kZXggYTU4Y2NiYjQwNmFkLi4zOWFkMWFlMTMwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK QEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRl X3QgcHRlKQogCXJldHVybiBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JET05MWSkp OwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlyZXR1cm4gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JE T05MWSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgg Yi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjY2NmODg4NTc5MmUuLjkx M2JmMzcwZjc0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4Nyw3ICsxODcsNyBA QCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0 dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUp CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpA QCAtNDkyLDcgKzQ5Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90 IHBtZCkKICNkZWZpbmUgcG1kX2NvbnQocG1kKQkJcHRlX2NvbnQocG1kX3B0ZShwbWQpKQogI2Rl ZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVfd3Jwcm90ZWN0KHBtZF9wdGUocG1k KSkpCiAjZGVmaW5lIHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBt ZCkpKQotI2RlZmluZSBwbWRfbWt3cml0ZShwbWQpCXB0ZV9wbWQocHRlX21rd3JpdGUocG1kX3B0 ZShwbWQpKSkKKyNkZWZpbmUgcG1kX21rd3JpdGUocG1kLCB2bWEpCXB0ZV9wbWQocHRlX21rd3Jp dGUocG1kX3B0ZShwbWQpLCAodm1hKSkpCiAjZGVmaW5lIHBtZF9ta2NsZWFuKHBtZCkJcHRlX3Bt ZChwdGVfbWtjbGVhbihwbWRfcHRlKHBtZCkpKQogI2RlZmluZSBwbWRfbWtkaXJ0eShwbWQpCXB0 ZV9wbWQocHRlX21rZGlydHkocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX21reW91bmcocG1k KQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUocG1kKSkpCmRpZmYgLS1naXQgYS9hcmNoL2Nz a3kvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jc2t5L2luY2x1ZGUvYXNtL3BndGFibGUu aAppbmRleCBkNDA0MjQ5NWZlYmMuLmMyZjkyYzk5MWUzNyAxMDA2NDQKLS0tIGEvYXJjaC9jc2t5 L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2Nza3kvaW5jbHVkZS9hc20vcGd0YWJs ZS5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9X UklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQpCmRpZmYgLS1naXQgYS9h cmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9oZXhhZ29uL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCA1OTM5MzYxM2QwODYuLjE0YWI5Yzc4OWMwZSAxMDA2NDQKLS0t IGEvYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2hleGFnb24v aW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGlubGluZSBw dGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIH0KIAogLyogcHRlX21rd3JpdGUgLSBtYXJr IHBhZ2UgYXMgd3JpdGFibGUgKi8KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsK IAlyZXR1cm4gcHRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUu aCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjFjOTdlMzFhMjhhLi5m ODc5ZGQ2MjZkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjY4LDcgKzI2OCw3IEBA IGlhNjRfcGh5c19hZGRyX3ZhbGlkICh1bnNpZ25lZCBsb25nIGFkZHIpCiAgKiBhY2Nlc3Mgcmln aHRzOgogICovCiAjZGVmaW5lIHB0ZV93cnByb3RlY3QocHRlKQkoX19wdGUocHRlX3ZhbChwdGUp ICYgfl9QQUdFX0FSX1JXKSkKLSNkZWZpbmUgcHRlX21rd3JpdGUocHRlKQkoX19wdGUocHRlX3Zh bChwdGUpIHwgX1BBR0VfQVJfUlcpKQorI2RlZmluZSBwdGVfbWt3cml0ZShwdGUsIHZtYSkJKF9f cHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FSX1JXKSkKICNkZWZpbmUgcHRlX21rb2xkKHB0ZSkJ CShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQSkpCiAjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0 ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0EpKQogI2RlZmluZSBwdGVfbWtjbGVhbihw dGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRCkpCmRpZmYgLS1naXQgYS9hcmNoL2xv b25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmgKaW5kZXggZDI4ZmI5ZGJlYzU5Li5lYmY2NDVmNDAyOTggMTAwNjQ0Ci0tLSBh L2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2xvb25nYXJj aC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX01P RElGSUVEKQpAQCAtNDkwLDcgKzQ5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShw bWRfdCBwbWQpCiAJcmV0dXJuICEhKHBtZF92YWwocG1kKSAmIF9QQUdFX1dSSVRFKTsKIH0KIAot c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5l IHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp CiB7CiAJcG1kX3ZhbChwbWQpIHw9IF9QQUdFX1dSSVRFOwogCWlmIChwbWRfdmFsKHBtZCkgJiBf UEFHRV9NT0RJRklFRCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0 YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ3RhYmxlLmgKaW5kZXggMTM3NDFj MTI0NWUxLi4zN2Q3N2UwNTUwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9t Y2ZfcGd0YWJsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCkBA IC0yMTEsNyArMjExLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRl KQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBDRl9QQUdFX1dSSVRB QkxFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90 b3JvbGFfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUu aAppbmRleCBlYzBkYzE5YWI4MzQuLmM0ZThlYjc2Mjg2ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9h c20vbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0xNTUsNyArMTU1LDYgQEAgc3RhdGljIGlubGluZSBp bnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FD Q0VTU0VEOwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfUk9OTFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRElS VFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0 aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0g fl9QQUdFX1JPTkxZOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2Rp cnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWtub2NhY2hlKHB0ZV90IHB0ZSkKQEAgLTE2OCw2ICsxNjcsMTEgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUpCiAJcHRlX3ZhbChwdGUpID0gKHB0ZV92 YWwocHRlKSAmIF9DQUNIRU1BU0swNDApIHwgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZTsKIAly ZXR1cm4gcHRlOwogfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0Vf Uk9OTFk7CisJcmV0dXJuIHB0ZTsKK30KIAogI2RlZmluZSBzd2FwcGVyX3BnX2RpciBrZXJuZWxf cGdfZGlyCiBleHRlcm4gcGdkX3Qga2VybmVsX3BnX2RpclsxMjhdOwpkaWZmIC0tZ2l0IGEvYXJj aC9tNjhrL2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNt L3N1bjNfcGd0YWJsZS5oCmluZGV4IGU1ODJiMDQ4NGE1NS4uMmEwNmJlYTUxYTFlIDEwMDY0NAot LS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3VuM19wZ3RhYmxlLmgKKysrIGIvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oCkBAIC0xNDMsMTAgKzE0MywxNCBAQCBzdGF0aWMg aW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYg U1VOM19QQUdFX0FDQ0VTUwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90 IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSAmPSB+U1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5TVU4zX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfV1JJVEVBQkxFOyByZXR1cm4g cHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVf dmFsKHB0ZSkgfD0gU1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19Q QUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25v Y2FjaGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfTk9DQUNIRTsgcmV0 dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0Vf V1JJVEVBQkxFOworCXJldHVybiBwdGU7Cit9CiAvLyB1c2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2Fj aGVzIHdvcmsuLi4KIC8vc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUp CXsgcHRlX3ZhbChwdGUpICY9IFNVTjNfUEFHRV9OT0NBQ0hFOyByZXR1cm4gcHRlOyB9CiAvLyB1 bnRpbCB0aGVuLCB1c2U6CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBk MWI4MjcyYWJjZDkuLjViODNlODJmOGQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0 YWJsZS5oCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFk KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VTRVI7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIFwKIAl7IHB0ZV92 YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIFwKK3N0YXRpYyBpbmxpbmUgcHRl X3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkgXAog CXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X0RJUlRZOyByZXR1cm4gcHRlOyB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA3OTEzODli ZjNjMTIuLjA2ZWZkNTY3MTQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDksNyAr MzA5LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVy biBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQor c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXB0ZS5wdGVfbG93IHw9IF9QQUdFX1dSSVRFOwogCWlmIChwdGUu cHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0Vf TU9ESUZJRUQpCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfd3Jw cm90ZWN0KHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90 IHBtZF9ta3dyaXRlKHBtZF90IHBtZCkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUo cG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwbWRfdmFsKHBtZCkg fD0gX1BBR0VfV1JJVEU7CiAJaWYgKHBtZF92YWwocG1kKSAmIF9QQUdFX01PRElGSUVEKQpkaWZm IC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL25pb3MyL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwZjVjMjU2NGU5ZjUuLmVkZDQ1ODUxOGUwZSAxMDA2 NDQKLS0tIGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9uaW9z Mi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcHRl X3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNo L29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9h c20vcGd0YWJsZS5oCmluZGV4IDNlYjliOTU1NWQwZC4uZmQ0MGFlYzE4OWQxIDEwMDY0NAotLS0g YS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL29wZW5yaXNj L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwdGVf dmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKZGlmZiAtLWdpdCBhL2FyY2gv cGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAppbmRleCBlMjk1MGY1ZGI3YzkuLjg5ZjYyMTM3ZTY3ZiAxMDA2NDQKLS0tIGEvYXJj aC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUv YXNtL3BndGFibGUuaApAQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0 dQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFs KHB0ZSkgJj0gfl9QQUdFX1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJl dHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9 CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOworCXJldHVy biBwdGU7Cit9CiAKIC8qCiAgKiBIdWdlIHB0ZSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBj L2luY2x1ZGUvYXNtL2Jvb2szcy8zMi9wZ3RhYmxlLmgKaW5kZXggN2JmMWZlNzI5N2M2Li4xMGQ5 YTFkMmFjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIv cGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJs ZS5oCkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtwdGUocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0 ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v Ym9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQv cGd0YWJsZS5oCmluZGV4IDRhY2M5NjkwZjU5OS4uYmUwNjM2NTIyZDM2IDEwMDY0NAotLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaAorKysgYi9hcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaApAQCAtNjAwLDcgKzYwMCw3IEBA IHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCiAJcmV0dXJuIF9fcHRl X3JhdyhwdGVfcmF3KHB0ZSkgfCBjcHVfdG9fYmU2NChfUEFHRV9FWEVDKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CS8qCiAJICogd3JpdGUgaW1wbGllcyByZWFkLCBoZW5jZSBzZXQgYm90aApAQCAtMTA3MSw3ICsx MDcxLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpCiAjZGVm aW5lIHBtZF9ta2RpcnR5KHBtZCkJcHRlX3BtZChwdGVfbWtkaXJ0eShwbWRfcHRlKHBtZCkpKQog I2RlZmluZSBwbWRfbWtjbGVhbihwbWQpCXB0ZV9wbWQocHRlX21rY2xlYW4ocG1kX3B0ZShwbWQp KSkKICNkZWZpbmUgcG1kX21reW91bmcocG1kKQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUo cG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRf cHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZtYSkJcHRlX3BtZChwdGVfbWt3 cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKIAogI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09G VF9ESVJUWQogI2RlZmluZSBwbWRfc29mdF9kaXJ0eShwbWQpICAgIHB0ZV9zb2Z0X2RpcnR5KHBt ZF9wdGUocG1kKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wZ3RhYmxl LmgKaW5kZXggZmVjNTZkOTY1ZjAwLi43YmZiY2I5YmE1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9p bmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCB1 bm1hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIHZhKTsKIAlkbyB7IHB0ZV91cGRhdGUobW0s IGFkZHIsIHB0ZXAsIH4wLCAwLCAwKTsgfSB3aGlsZSAoMCkKIAogI2lmbmRlZiBwdGVfbWt3cml0 ZQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCiB7CiAJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKIH0KZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcHRlLTh4eC5oIGIvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wdGUtOHh4LmgKaW5kZXggMWE4OWViZGMz YWNjLi5mMzI0NTBlYjI3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9u b2hhc2gvMzIvcHRlLTh4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcHRlLTh4eC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcHRlX3dy aXRlKHB0ZV90IHB0ZSkKIAogI2RlZmluZSBwdGVfd3JpdGUgcHRlX3dyaXRlCiAKLXN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJl dHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUk8pOwogfQpkaWZmIC0tZ2l0IGEvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaAppbmRleCAyODdlMjU4NjRmZmEuLjU4OTAw OTU1NTg3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9w Z3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxl LmgKQEAgLTg1LDcgKzg1LDcgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKiBwdGVfY2xlYXIg bW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVf dCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVf dmFsKHB0ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGQ4 ZDhkZTBkZWQ5OS4uZmVkMWI4MWZiZTA3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAt MzM4LDcgKzMzOCw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBw dGUpCiAKIC8qIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpICovCiAK LXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9XUklURSk7CiB9CkBAIC02 MjQsOSArNjI0LDkgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBwbWQp CiAJcmV0dXJuIHB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRf dCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewot CXJldHVybiBwdGVfcG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSkpOworCXJldHVybiBwdGVf cG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSwgdm1hKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg cG1kX3QgcG1kX3dycHJvdGVjdChwbWRfdCBwbWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5j bHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAppbmRl eCBjY2RiY2NmZGUxNDguLjU1OGY3ZWVmOWM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1 ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBA IC0xMDIsOSArMTAyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfZGlydHkocHRlX3Qg cHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBo dWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVf bWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXJldHVy biBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVfbWt3cml0ZShwdGUsIHZtYSk7CiB9CiAK IHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWtkaXJ0eShwdGVfdCBwdGUpCmRpZmYgLS1n aXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCBkZWViOTE4Y2FlMWQuLjhmMmM3NDNkYTBlYiAxMDA2NDQKLS0t IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJ cmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAg c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZV9rZXJuZWwocG1kX3QgcG1kKQogCXJldHVy biBwbWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQor c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXJldHVybiBwbWRfbWt3cml0ZV9rZXJuZWwocG1kKTsKIH0KZGlm ZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zaC9pbmNs dWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggMjE5NTJiMDk0NjUwLi45ZjJkY2I5ZWFmYzggMTAw NjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gv aW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0zNTEsNiArMzUxLDEyIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiAKICNkZWZpbmUgUFRFX0JJ VF9GVU5DKGgsZm4sb3ApIFwKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRl KSB7IHB0ZS5wdGVfIyNoIG9wOyByZXR1cm4gcHRlOyB9CisjZGVmaW5lIFBURV9CSVRfRlVOQ19W TUEoaCxmbixvcCkgXAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfIyNmbihwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSBcCit7IFwKKwlwdGUucHRlXyMjaCBvcDsgXAorCXJl dHVybiBwdGU7IFwKK30KIAogI2lmZGVmIENPTkZJR19YMlRMQgogLyoKQEAgLTM1OSwxMSArMzY1 LDExIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRlKSB7IHB0ZS5wdGVf IyNoIG9wOyByZXR1cm4gcHRlOyB9CiAgKiBrZXJuZWwgcGVybWlzc2lvbnMpLCB3ZSBhdHRlbXB0 IHRvIGNvdXBsZSB0aGVtIGEgYml0IG1vcmUgc2FuZWx5IGhlcmUuCiAgKi8KIFBURV9CSVRfRlVO QyhoaWdoLCB3cnByb3RlY3QsICY9IH4oX1BBR0VfRVhUX1VTRVJfV1JJVEUgfCBfUEFHRV9FWFRf S0VSTl9XUklURSkpOwotUFRFX0JJVF9GVU5DKGhpZ2gsIG1rd3JpdGUsIHw9IF9QQUdFX0VYVF9V U0VSX1dSSVRFIHwgX1BBR0VfRVhUX0tFUk5fV1JJVEUpOworUFRFX0JJVF9GVU5DX1ZNQShoaWdo LCBta3dyaXRlLCB8PSBfUEFHRV9FWFRfVVNFUl9XUklURSB8IF9QQUdFX0VYVF9LRVJOX1dSSVRF KTsKIFBURV9CSVRfRlVOQyhoaWdoLCBta2h1Z2UsIHw9IF9QQUdFX1NaSFVHRSk7CiAjZWxzZQog UFRFX0JJVF9GVU5DKGxvdywgd3Jwcm90ZWN0LCAmPSB+X1BBR0VfUlcpOwotUFRFX0JJVF9GVU5D KGxvdywgbWt3cml0ZSwgfD0gX1BBR0VfUlcpOworUFRFX0JJVF9GVU5DX1ZNQShsb3csIG1rd3Jp dGUsIHw9IF9QQUdFX1JXKTsKIFBURV9CSVRfRlVOQyhsb3csIG1raHVnZSwgfD0gX1BBR0VfU1pI VUdFKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFi bGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGQ0MzMw ZTNjNTdhNi4uM2U4ODM2MTc5NDU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNt L3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApA QCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkKIAlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgflNSTU1VX1JFRik7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBTUk1NVV9XUklURSk7CiB9CmRpZmYgLS1naXQg YS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVk ZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDJkYzhkNDY0MTczNC4uYzVjZDVjMDNmNTU3IDEwMDY0 NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3Nw YXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogCXJldHVybiBfX3B0ZSh2YWwpOwog fQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgbWFzazsKIApAQCAt NzU2LDExICs3NTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBw bWQpCiAJcmV0dXJuIF9fcG1kKHB0ZV92YWwocHRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1k X3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV90IHB0ZSA9 IF9fcHRlKHBtZF92YWwocG1kKSk7CiAKLQlwdGUgPSBwdGVfbWt3cml0ZShwdGUpOworCXB0ZSA9 IHB0ZV9ta3dyaXRlKHB0ZSwgdm1hKTsKIAogCXJldHVybiBfX3BtZChwdGVfdmFsKHB0ZSkpOwog fQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3VtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNzBkMTYxOGViMzUuLjk2MzQ3OWMxMzNiNyAxMDA2 NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC91bS9pbmNs dWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIAlyZXR1cm4ocHRlKTsKIH0KIAotc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9t a3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHVu bGlrZWx5KHB0ZV9nZXRfYml0cyhwdGUsICBfUEFHRV9SVykpKQogCQlyZXR1cm4gcHRlOwpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCmluZGV4IDM2MDdmMjU3MmY5ZS4uNjZjNTE0ODA4Mjc2IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0zNjksNyArMzY5LDkgQEAgc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZV9rZXJuZWwocHRlX3QgcHRlKQogCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwg X1BBR0VfUlcpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0 ZSkKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3 cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBw dGVfbWt3cml0ZV9rZXJuZWwocHRlKTsKIH0KQEAgLTQ3MCw3ICs0NzIsNyBAQCBzdGF0aWMgaW5s aW5lIHBtZF90IHBtZF9ta3lvdW5nKHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kX3NldF9mbGFncyhw bWQsIF9QQUdFX0FDQ0VTU0VEKTsKIH0KIAotc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHBtZF9zZXRfZmxhZ3MocG1k LCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmM3YTE0ODg0 YzZjLi5kNzI2MzJkOWM1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI2Miw3 ICsyNjIsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiAJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRB QkxFOyByZXR1cm4gcHRlOyB9CiAKICNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KSBcCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdl bmVyaWMvaHVnZXRsYi5oCmluZGV4IGQ3ZjYzMzVkMzk5OS4uZTg2YzgzMDcyOGRlIDEwMDY0NAot LS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5l cmljL2h1Z2V0bGIuaApAQCAtMjAsOSArMjAsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcgaHVnZV9wdGVfZGlydHkocHRlX3QgcHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0K IAotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewotCXJldHVybiBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVf bWt3cml0ZShwdGUsIHZtYSk7CiB9CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfSFVHRV9QVEVfV1JQ Uk9URUNUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21t LmgKaW5kZXggMWY3OTY2NzgyNGViLi5hZjY1MjQ0NGZiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv bGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTExNjMsNyArMTE2Myw3IEBA IHZvaWQgZnJlZV9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIHN0YXRpYyBpbmxp bmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQogewogCWlmIChsaWtlbHkodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJcHRlID0g cHRlX21rd3JpdGUocHRlKTsKKwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXJldHVy biBwdGU7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVn X3ZtX3BndGFibGUuYwppbmRleCBhZjU5Y2M3YmQzMDcuLjdiYzU1OTI5MDBiYyAxMDA2NDQKLS0t IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwpAQCAt MTA5LDEwICsxMDksMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHB0ZV9iYXNpY190ZXN0cyhzdHJ1 Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KQogCVdBUk5fT04oIXB0ZV9zYW1l KHB0ZSwgcHRlKSk7CiAJV0FSTl9PTighcHRlX3lvdW5nKHB0ZV9ta3lvdW5nKHB0ZV9ta29sZChw dGUpKSkpOwogCVdBUk5fT04oIXB0ZV9kaXJ0eShwdGVfbWtkaXJ0eShwdGVfbWtjbGVhbihwdGUp KSkpOwotCVdBUk5fT04oIXB0ZV93cml0ZShwdGVfbWt3cml0ZShwdGVfd3Jwcm90ZWN0KHB0ZSkp KSk7CisJV0FSTl9PTighcHRlX3dyaXRlKHB0ZV9ta3dyaXRlKHB0ZV93cnByb3RlY3QocHRlKSwg YXJncy0+dm1hKSkpOwogCVdBUk5fT04ocHRlX3lvdW5nKHB0ZV9ta29sZChwdGVfbWt5b3VuZyhw dGUpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV9ta2NsZWFuKHB0ZV9ta2RpcnR5KHB0ZSkp KSk7Ci0JV0FSTl9PTihwdGVfd3JpdGUocHRlX3dycHJvdGVjdChwdGVfbWt3cml0ZShwdGUpKSkp OworCVdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3JpdGUocHRlLCBhcmdz LT52bWEpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV93cnByb3RlY3QocHRlX21rY2xlYW4o cHRlKSkpKTsKIAlXQVJOX09OKCFwdGVfZGlydHkocHRlX3dycHJvdGVjdChwdGVfbWtkaXJ0eShw dGUpKSkpOwogfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwdGVfYWR2 YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBwdGVf bWtjbGVhbihwdGUpOwogCXNldF9wdGVfYXQoYXJncy0+bW0sIGFyZ3MtPnZhZGRyLCBhcmdzLT5w dGVwLCBwdGUpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCXB0ZSA9IHB0ZV9ta3dyaXRl KHB0ZSk7CisJcHRlID0gcHRlX21rd3JpdGUocHRlLCBhcmdzLT52bWEpOwogCXB0ZSA9IHB0ZV9t a2RpcnR5KHB0ZSk7CiAJcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKGFyZ3MtPnZtYSwgYXJncy0+dmFk ZHIsIGFyZ3MtPnB0ZXAsIHB0ZSwgMSk7CiAJcHRlID0gcHRlcF9nZXQoYXJncy0+cHRlcCk7CkBA IC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0 cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpCiAJV0FSTl9PTighcG1kX3Nh bWUocG1kLCBwbWQpKTsKIAlXQVJOX09OKCFwbWRfeW91bmcocG1kX21reW91bmcocG1kX21rb2xk KHBtZCkpKSk7CiAJV0FSTl9PTighcG1kX2RpcnR5KHBtZF9ta2RpcnR5KHBtZF9ta2NsZWFuKHBt ZCkpKSk7Ci0JV0FSTl9PTighcG1kX3dyaXRlKHBtZF9ta3dyaXRlKHBtZF93cnByb3RlY3QocG1k KSkpKTsKKwlXQVJOX09OKCFwbWRfd3JpdGUocG1kX21rd3JpdGUocG1kX3dycHJvdGVjdChwbWQp LCBhcmdzLT52bWEpKSk7CiAJV0FSTl9PTihwbWRfeW91bmcocG1kX21rb2xkKHBtZF9ta3lvdW5n KHBtZCkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX21rY2xlYW4ocG1kX21rZGlydHkocG1k KSkpKTsKLQlXQVJOX09OKHBtZF93cml0ZShwbWRfd3Jwcm90ZWN0KHBtZF9ta3dyaXRlKHBtZCkp KSk7CisJV0FSTl9PTihwbWRfd3JpdGUocG1kX3dycHJvdGVjdChwbWRfbWt3cml0ZShwbWQsIGFy Z3MtPnZtYSkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX3dycHJvdGVjdChwbWRfbWtjbGVh bihwbWQpKSkpOwogCVdBUk5fT04oIXBtZF9kaXJ0eShwbWRfd3Jwcm90ZWN0KHBtZF9ta2RpcnR5 KHBtZCkpKSk7CiAJLyoKQEAgLTI1Myw3ICsyNTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiAJcG1kID0g cG1kX21rY2xlYW4ocG1kKTsKIAlzZXRfcG1kX2F0KGFyZ3MtPm1tLCB2YWRkciwgYXJncy0+cG1k cCwgcG1kKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQlwbWQgPSBwbWRfbWt3cml0ZShw bWQpOworCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgYXJncy0+dm1hKTsKIAlwbWQgPSBwbWRfbWtk aXJ0eShwbWQpOwogCXBtZHBfc2V0X2FjY2Vzc19mbGFncyhhcmdzLT52bWEsIHZhZGRyLCBhcmdz LT5wbWRwLCBwbWQsIDEpOwogCXBtZCA9IFJFQURfT05DRSgqYXJncy0+cG1kcCk7CkBAIC05Mjgs OCArOTI4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0 IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBta19odWdlX3B0ZShwYWdlLCBhcmdz LT5wYWdlX3Byb3QpOwogCiAJV0FSTl9PTighaHVnZV9wdGVfZGlydHkoaHVnZV9wdGVfbWtkaXJ0 eShwdGUpKSk7Ci0JV0FSTl9PTighaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdl X3B0ZV93cnByb3RlY3QocHRlKSkpKTsKLQlXQVJOX09OKGh1Z2VfcHRlX3dyaXRlKGh1Z2VfcHRl X3dycHJvdGVjdChodWdlX3B0ZV9ta3dyaXRlKHB0ZSkpKSk7CisJV0FSTl9PTighaHVnZV9wdGVf d3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV93cnByb3RlY3QocHRlKSwgYXJncy0+dm1h KSkpOworCVdBUk5fT04oaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfd3Jwcm90ZWN0KGh1Z2VfcHRl X21rd3JpdGUocHRlLCBhcmdzLT52bWEpKSkpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfV0FOVF9H RU5FUkFMX0hVR0VUTEIKIAlwdGUgPSBwZm5fcHRlKGFyZ3MtPmZpeGVkX3BtZF9wZm4sIGFyZ3Mt PnBhZ2VfcHJvdCk7CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1v cnkuYwppbmRleCA0ZmM0Mzg1OWU1OWEuLmFhZjgxNTgzODE0NCAxMDA2NDQKLS0tIGEvbW0vaHVn ZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC01NTUsNyArNTU1LDcgQEAgX19z ZXR1cCgidHJhbnNwYXJlbnRfaHVnZXBhZ2U9Iiwgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Up OwogcG1kX3QgbWF5YmVfcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlpZiAobGlrZWx5KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCXBt ZCA9IHBtZF9ta3dyaXRlKHBtZCk7CisJCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgdm1hKTsKIAly ZXR1cm4gcG1kOwogfQogCkBAIC0xNTgwLDcgKzE1ODAsNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2Vf cG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlwbWQgPSBwbWRfbW9kaWZ5KG9s ZHBtZCwgdm1hLT52bV9wYWdlX3Byb3QpOwogCXBtZCA9IHBtZF9ta3lvdW5nKHBtZCk7CiAJaWYg KHdyaXRhYmxlKQotCQlwbWQgPSBwbWRfbWt3cml0ZShwbWQpOworCQlwbWQgPSBwbWRfbWt3cml0 ZShwbWQsIHZtYSk7CiAJc2V0X3BtZF9hdCh2bWEtPnZtX21tLCBoYWRkciwgdm1mLT5wbWQsIHBt ZCk7CiAJdXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCB2bWYtPmFkZHJlc3MsIHZtZi0+cG1kKTsK IAlzcGluX3VubG9jayh2bWYtPnB0bCk7CkBAIC0xOTI2LDcgKzE5MjYsNyBAQCBpbnQgY2hhbmdl X2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLAogCS8qIFNlZSBjaGFuZ2VfcHRlX3JhbmdlKCkuICovCiAJaWYgKChjcF9mbGFncyAmIE1N X0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmICFwbWRfd3JpdGUoZW50cnkpICYmCiAJICAgIGNh bl9jaGFuZ2VfcG1kX3dyaXRhYmxlKHZtYSwgYWRkciwgZW50cnkpKQotCQllbnRyeSA9IHBtZF9t a3dyaXRlKGVudHJ5KTsKKwkJZW50cnkgPSBwbWRfbWt3cml0ZShlbnRyeSwgdm1hKTsKIAogCXJl dCA9IEhQQUdFX1BNRF9OUjsKIAlzZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWQsIGVudHJ5KTsKZGlm ZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAwN2FiY2I2ZWIyMDMu LjZhZjQ3MWJkY2ZmOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIu YwpAQCAtNDkwMCw3ICs0OTAwLDcgQEAgc3RhdGljIHB0ZV90IG1ha2VfaHVnZV9wdGUoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAogCiAJaWYgKHdyaXRhYmxl KSB7CiAJCWVudHJ5ID0gaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV9ta2RpcnR5KG1rX2h1Z2Vf cHRlKHBhZ2UsCi0JCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKKwkJCQkJIHZtYS0+dm1fcGFn ZV9wcm90KSksIHZtYSk7CiAJfSBlbHNlIHsKIAkJZW50cnkgPSBodWdlX3B0ZV93cnByb3RlY3Qo bWtfaHVnZV9wdGUocGFnZSwKIAkJCQkJICAgdm1hLT52bV9wYWdlX3Byb3QpKTsKQEAgLTQ5MTYs NyArNDkxNiw3IEBAIHN0YXRpYyB2b2lkIHNldF9odWdlX3B0ZXBfd3JpdGFibGUoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCiB7CiAJcHRlX3QgZW50cnk7CiAKLQllbnRyeSA9IGh1Z2VfcHRl X21rd3JpdGUoaHVnZV9wdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CisJZW50cnkg PSBodWdlX3B0ZV9ta3dyaXRlKGh1Z2VfcHRlX21rZGlydHkoaHVnZV9wdGVwX2dldChwdGVwKSks IHZtYSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRl cCwgZW50cnksIDEpKQogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiB9 CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGY0NTZmM2I1MDQ5 Yy4uZDA5NzJkMmQ2ZjM2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnku YwpAQCAtNDA2Nyw3ICs0MDY3LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3Bh Z2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJZW50cnkgPSBta19wdGUoJmZvbGlvLT5wYWdlLCB2 bWEtPnZtX3BhZ2VfcHJvdCk7CiAJZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7CiAJaWYg KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtk aXJ0eShlbnRyeSkpOworCQllbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwg dm1hKTsKIAogCXZtZi0+cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCB2bWYt PnBtZCwgdm1mLT5hZGRyZXNzLAogCQkJJnZtZi0+cHRsKTsKQEAgLTQ3NTUsNyArNDc1NSw3IEBA IHN0YXRpYyB2bV9mYXVsdF90IGRvX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlw dGUgPSBwdGVfbW9kaWZ5KG9sZF9wdGUsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAlwdGUgPSBwdGVf bWt5b3VuZyhwdGUpOwogCWlmICh3cml0YWJsZSkKLQkJcHRlID0gcHRlX21rd3JpdGUocHRlKTsK KwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0 KHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSwgb2xkX3B0ZSwgcHRlKTsKIAl1cGRhdGVfbW11 X2NhY2hlKHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSk7CiAJcHRlX3VubWFwX3VubG9jayh2 bWYtPnB0ZSwgdm1mLT5wdGwpOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21t L21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggZDMwYzlkZTYwYjBkLi5kZjNmNWU5ZDVmNzYgMTAwNjQ0 Ci0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmMKKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwpAQCAt NjQ2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVj dCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIAkJfQogCQllbnRyeSA9IG1rX3B0ZShwYWdlLCB2bWEt PnZtX3BhZ2VfcHJvdCk7CiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCi0JCQllbnRy eSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSk7CisJCQllbnRyeSA9IHB0ZV9ta3dy aXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKIAl9CiAKIAlwdGVwID0gcHRlX29mZnNldF9t YXBfbG9jayhtbSwgcG1kcCwgYWRkciwgJnB0bCk7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5j IGIvbW0vbXByb3RlY3QuYwppbmRleCAxZDQ4NDNjOTdjMmEuLjM4MTE2M2E0MWU4OCAxMDA2NDQK LS0tIGEvbW0vbXByb3RlY3QuYworKysgYi9tbS9tcHJvdGVjdC5jCkBAIC0xOTgsNyArMTk4LDcg QEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAog CQkJaWYgKChjcF9mbGFncyAmIE1NX0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmCiAJCQkgICAg IXB0ZV93cml0ZShwdGVudCkgJiYKIAkJCSAgICBjYW5fY2hhbmdlX3B0ZV93cml0YWJsZSh2bWEs IGFkZHIsIHB0ZW50KSkKLQkJCQlwdGVudCA9IHB0ZV9ta3dyaXRlKHB0ZW50KTsKKwkJCQlwdGVu dCA9IHB0ZV9ta3dyaXRlKHB0ZW50LCB2bWEpOwogCiAJCQlwdGVwX21vZGlmeV9wcm90X2NvbW1p dCh2bWEsIGFkZHIsIHB0ZSwgb2xkcHRlLCBwdGVudCk7CiAJCQlpZiAocHRlX25lZWRzX2ZsdXNo KG9sZHB0ZSwgcHRlbnQpKQpkaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJm YXVsdGZkLmMKaW5kZXggNTNjM2Q5MTZmZjY2Li4zZGI2Zjg3YzBhY2EgMTAwNjQ0Ci0tLSBhL21t L3VzZXJmYXVsdGZkLmMKKysrIGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtNzUsNyArNzUsNyBAQCBp bnQgbWZpbGxfYXRvbWljX2luc3RhbGxfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgcG1k X3QgKmRzdF9wbWQsCiAJaWYgKHBhZ2VfaW5fY2FjaGUgJiYgIXZtX3NoYXJlZCkKIAkJd3JpdGFi bGUgPSBmYWxzZTsKIAlpZiAod3JpdGFibGUpCi0JCV9kc3RfcHRlID0gcHRlX21rd3JpdGUoX2Rz dF9wdGUpOworCQlfZHN0X3B0ZSA9IHB0ZV9ta3dyaXRlKF9kc3RfcHRlLCBkc3Rfdm1hKTsKIAlp ZiAod3BfY29weSkKIAkJX2RzdF9wdGUgPSBwdGVfbWt1ZmZkX3dwKF9kc3RfcHRlKTsKIAotLSAK Mi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtdW0gbWFpbGluZyBsaXN0CmxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC11bQo= 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 lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (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 10E36C64ED6 for ; Mon, 27 Feb 2023 23:06:21 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4PQbhr26wFz3cJq for ; Tue, 28 Feb 2023 10:06:20 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=gKxdluDQ; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=intel.com (client-ip=192.55.52.136; helo=mga12.intel.com; envelope-from=rick.p.edgecombe@intel.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=gKxdluDQ; dkim-atps=neutral Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4PQZwx4WMLz3bjd for ; Tue, 28 Feb 2023 09:31:44 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537105; x=1709073105; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=gKxdluDQp78zjiscTDmjZcOKRPTCvCR85cD/8DVcmrDkI9aKQBKQvh50 UfXLj1GinQpuMMoQKYknEbbf2nbNG4q1bWnGDhlT0uTQmRVDUaPbMPfov 92A6la7K2cppbbsexupFERjGrMgxaoik3zlJY9CVUS7Yz51Yb1sr6czxW PrqL5ZGW0dhKOHRx7Qr9ku+EstMVVVYnDMDBFLsRMhE8q+4lAIDz05lZ7 VYoMurSg2VhS+9qcPZaK6ZBUxNCVRnpI6P0PvFhjyijgjW9dr6aOauM+1 uunwFT2xk/775qM52CeXLw9hlBpkE6VxcZO9UdnYn1OgdqI0y7dj6duXG A==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657342" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657342" 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:22 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024498" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024498" 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:16 -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 Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-Id: <20230227222957.24501-14-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 X-Mailman-Approved-At: Tue, 28 Feb 2023 10:05:27 +1100 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-s390@vger.kernel.org, Michal Simek , rick.p.edgecombe@intel.com, linux-ia64@vger.kernel.org, linux-parisc@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-sh@vger.kernel.org, linux-um@lists.infradead.org, linux-mips@vger.kernel.org, linux-csky@vger.kernel.org, Dinh Nguyen , linux-m68k@lists.linux-m68k.org, loongarch@lists.linux.dev, linux-alpha@vger.kernel.org, sparclinux@vger.kernel.org, xen-devel@lists.xenproject.org, linux-riscv@lists.infradead.org, linux-snps-arc@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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 unusual properties is that shadow stack memory is writable, but only in limited ways. These limits are applied via a specific PTE bit combination. Nevertheless, the memory is writable, and core mm code will need to apply the writable permissions in the typical paths that call pte_mkwrite(). In addition to VM_WRITE, the shadow stack VMA's will have a flag denoting that they are special shadow stack flavor of writable memory. So make pte_mkwrite() take a VMA, so that the x86 implementation of it can know to create regular writable memory or shadow stack memory. Apply the same changes for pmd_mkwrite() and huge_pte_mkwrite(). No functional change. Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-alpha@vger.kernel.org Cc: linux-snps-arc@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-csky@vger.kernel.org Cc: linux-hexagon@vger.kernel.org Cc: linux-ia64@vger.kernel.org Cc: loongarch@lists.linux.dev Cc: linux-m68k@lists.linux-m68k.org Cc: Michal Simek Cc: Dinh Nguyen Cc: linux-mips@vger.kernel.org Cc: linux-openrisc@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-um@lists.infradead.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: Michael Ellerman 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 --- Documentation/mm/arch_pgtable_helpers.rst | 9 ++++++--- arch/alpha/include/asm/pgtable.h | 6 +++++- arch/arc/include/asm/hugepage.h | 2 +- arch/arc/include/asm/pgtable-bits-arcv2.h | 7 ++++++- arch/arm/include/asm/pgtable-3level.h | 7 ++++++- arch/arm/include/asm/pgtable.h | 2 +- arch/arm64/include/asm/pgtable.h | 4 ++-- arch/csky/include/asm/pgtable.h | 2 +- arch/hexagon/include/asm/pgtable.h | 2 +- arch/ia64/include/asm/pgtable.h | 2 +- arch/loongarch/include/asm/pgtable.h | 4 ++-- arch/m68k/include/asm/mcf_pgtable.h | 2 +- arch/m68k/include/asm/motorola_pgtable.h | 6 +++++- arch/m68k/include/asm/sun3_pgtable.h | 6 +++++- arch/microblaze/include/asm/pgtable.h | 2 +- arch/mips/include/asm/pgtable.h | 6 +++--- arch/nios2/include/asm/pgtable.h | 2 +- arch/openrisc/include/asm/pgtable.h | 2 +- arch/parisc/include/asm/pgtable.h | 6 +++++- arch/powerpc/include/asm/book3s/32/pgtable.h | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 4 ++-- arch/powerpc/include/asm/nohash/32/pgtable.h | 2 +- arch/powerpc/include/asm/nohash/32/pte-8xx.h | 2 +- arch/powerpc/include/asm/nohash/64/pgtable.h | 2 +- arch/riscv/include/asm/pgtable.h | 6 +++--- arch/s390/include/asm/hugetlb.h | 4 ++-- arch/s390/include/asm/pgtable.h | 4 ++-- arch/sh/include/asm/pgtable_32.h | 10 ++++++++-- arch/sparc/include/asm/pgtable_32.h | 2 +- arch/sparc/include/asm/pgtable_64.h | 6 +++--- arch/um/include/asm/pgtable.h | 2 +- arch/x86/include/asm/pgtable.h | 6 ++++-- arch/xtensa/include/asm/pgtable.h | 2 +- include/asm-generic/hugetlb.h | 4 ++-- include/linux/mm.h | 2 +- mm/debug_vm_pgtable.c | 16 ++++++++-------- mm/huge_memory.c | 6 +++--- mm/hugetlb.c | 4 ++-- mm/memory.c | 4 ++-- mm/migrate_device.c | 2 +- mm/mprotect.c | 2 +- mm/userfaultfd.c | 2 +- 42 files changed, 106 insertions(+), 69 deletions(-) diff --git a/Documentation/mm/arch_pgtable_helpers.rst b/Documentation/mm/arch_pgtable_helpers.rst index 30d9a09f01f4..78ac3ff2fe1d 100644 --- a/Documentation/mm/arch_pgtable_helpers.rst +++ b/Documentation/mm/arch_pgtable_helpers.rst @@ -46,7 +46,8 @@ PTE Page Table Helpers +---------------------------+--------------------------------------------------+ | pte_mkclean | Creates a clean PTE | +---------------------------+--------------------------------------------------+ -| pte_mkwrite | Creates a writable PTE | +| pte_mkwrite | Creates a writable PTE of the type specified by | +| | the VMA. | +---------------------------+--------------------------------------------------+ | pte_wrprotect | Creates a write protected PTE | +---------------------------+--------------------------------------------------+ @@ -118,7 +119,8 @@ PMD Page Table Helpers +---------------------------+--------------------------------------------------+ | pmd_mkclean | Creates a clean PMD | +---------------------------+--------------------------------------------------+ -| pmd_mkwrite | Creates a writable PMD | +| pmd_mkwrite | Creates a writable PMD of the type specified by | +| | the VMA. | +---------------------------+--------------------------------------------------+ | pmd_wrprotect | Creates a write protected PMD | +---------------------------+--------------------------------------------------+ @@ -222,7 +224,8 @@ HugeTLB Page Table Helpers +---------------------------+--------------------------------------------------+ | huge_pte_mkdirty | Creates a dirty HugeTLB | +---------------------------+--------------------------------------------------+ -| huge_pte_mkwrite | Creates a writable HugeTLB | +| huge_pte_mkwrite | Creates a writable HugeTLB of the type specified | +| | by the VMA. | +---------------------------+--------------------------------------------------+ | huge_pte_wrprotect | Creates a write protected HugeTLB | +---------------------------+--------------------------------------------------+ diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgtable.h index ba43cb841d19..fb5d207c2a89 100644 --- a/arch/alpha/include/asm/pgtable.h +++ b/arch/alpha/include/asm/pgtable.h @@ -256,9 +256,13 @@ extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_FOW; return pte; } extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~(__DIRTY_BITS); return pte; } extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~(__ACCESS_BITS); return pte; } -extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_FOW; return pte; } extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= __DIRTY_BITS; return pte; } extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; return pte; } +extern inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &= ~_PAGE_FOW; + return pte; +} /* * The smp_rmb() in the following functions are required to order the load of diff --git a/arch/arc/include/asm/hugepage.h b/arch/arc/include/asm/hugepage.h index 5001b796fb8d..223a96967188 100644 --- a/arch/arc/include/asm/hugepage.h +++ b/arch/arc/include/asm/hugepage.h @@ -21,7 +21,7 @@ static inline pmd_t pte_pmd(pte_t pte) } #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/arc/include/asm/pgtable-bits-arcv2.h b/arch/arc/include/asm/pgtable-bits-arcv2.h index 6e9f8ca6d6a1..a5b8bc955015 100644 --- a/arch/arc/include/asm/pgtable-bits-arcv2.h +++ b/arch/arc/include/asm/pgtable-bits-arcv2.h @@ -87,7 +87,6 @@ PTE_BIT_FUNC(mknotpresent, &= ~(_PAGE_PRESENT)); PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE)); -PTE_BIT_FUNC(mkwrite, |= (_PAGE_WRITE)); PTE_BIT_FUNC(mkclean, &= ~(_PAGE_DIRTY)); PTE_BIT_FUNC(mkdirty, |= (_PAGE_DIRTY)); PTE_BIT_FUNC(mkold, &= ~(_PAGE_ACCESSED)); @@ -95,6 +94,12 @@ PTE_BIT_FUNC(mkyoung, |= (_PAGE_ACCESSED)); PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL)); PTE_BIT_FUNC(mkhuge, |= (_PAGE_HW_SZ)); +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= (_PAGE_WRITE); + return pte; +} + static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { return __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)); diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 106049791500..df071a807610 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -202,11 +202,16 @@ static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; } PMD_BIT_FUNC(wrprotect, |= L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF); -PMD_BIT_FUNC(mkwrite, &= ~L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkdirty, |= L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkclean, &= ~L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF); +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) +{ + pmd_val(pmd) |= L_PMD_SECT_RDONLY; + return pmd; +} + #define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT)) #define pmd_pfn(pmd) (((pmd_val(pmd) & PMD_MASK) & PHYS_MASK) >> PAGE_SHIFT) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index a58ccbb406ad..39ad1ae1308d 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -227,7 +227,7 @@ static inline pte_t pte_wrprotect(pte_t pte) return set_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return clear_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index cccf8885792e..913bf370f74a 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -187,7 +187,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -492,7 +492,7 @@ static inline int pmd_trans_huge(pmd_t pmd) #define pmd_cont(pmd) pte_cont(pmd_pte(pmd)) #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtable.h index d4042495febc..c2f92c991e37 100644 --- a/arch/csky/include/asm/pgtable.h +++ b/arch/csky/include/asm/pgtable.h @@ -176,7 +176,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) diff --git a/arch/hexagon/include/asm/pgtable.h b/arch/hexagon/include/asm/pgtable.h index 59393613d086..14ab9c789c0e 100644 --- a/arch/hexagon/include/asm/pgtable.h +++ b/arch/hexagon/include/asm/pgtable.h @@ -300,7 +300,7 @@ static inline pte_t pte_wrprotect(pte_t pte) } /* pte_mkwrite - mark page as writable */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h index 21c97e31a28a..f879dd626da6 100644 --- a/arch/ia64/include/asm/pgtable.h +++ b/arch/ia64/include/asm/pgtable.h @@ -268,7 +268,7 @@ ia64_phys_addr_valid (unsigned long addr) * access rights: */ #define pte_wrprotect(pte) (__pte(pte_val(pte) & ~_PAGE_AR_RW)) -#define pte_mkwrite(pte) (__pte(pte_val(pte) | _PAGE_AR_RW)) +#define pte_mkwrite(pte, vma) (__pte(pte_val(pte) | _PAGE_AR_RW)) #define pte_mkold(pte) (__pte(pte_val(pte) & ~_PAGE_A)) #define pte_mkyoung(pte) (__pte(pte_val(pte) | _PAGE_A)) #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h index d28fb9dbec59..ebf645f40298 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -390,7 +390,7 @@ static inline pte_t pte_mkdirty(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -490,7 +490,7 @@ static inline int pmd_write(pmd_t pmd) return !!(pmd_val(pmd) & _PAGE_WRITE); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |= _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/m68k/include/asm/mcf_pgtable.h b/arch/m68k/include/asm/mcf_pgtable.h index 13741c1245e1..37d77e055016 100644 --- a/arch/m68k/include/asm/mcf_pgtable.h +++ b/arch/m68k/include/asm/mcf_pgtable.h @@ -211,7 +211,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= CF_PAGE_WRITABLE; return pte; diff --git a/arch/m68k/include/asm/motorola_pgtable.h b/arch/m68k/include/asm/motorola_pgtable.h index ec0dc19ab834..c4e8eb76286d 100644 --- a/arch/m68k/include/asm/motorola_pgtable.h +++ b/arch/m68k/include/asm/motorola_pgtable.h @@ -155,7 +155,6 @@ static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_RONLY; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_RONLY; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) @@ -168,6 +167,11 @@ static inline pte_t pte_mkcache(pte_t pte) pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemode; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &= ~_PAGE_RONLY; + return pte; +} #define swapper_pg_dir kernel_pg_dir extern pgd_t kernel_pg_dir[128]; diff --git a/arch/m68k/include/asm/sun3_pgtable.h b/arch/m68k/include/asm/sun3_pgtable.h index e582b0484a55..2a06bea51a1e 100644 --- a/arch/m68k/include/asm/sun3_pgtable.h +++ b/arch/m68k/include/asm/sun3_pgtable.h @@ -143,10 +143,14 @@ static inline int pte_young(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESS static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_WRITEABLE; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_MODIFIED; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= SUN3_PAGE_WRITEABLE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= SUN3_PAGE_MODIFIED; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= SUN3_PAGE_ACCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) { pte_val(pte) |= SUN3_PAGE_NOCACHE; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= SUN3_PAGE_WRITEABLE; + return pte; +} // use this version when caches work... //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &= SUN3_PAGE_NOCACHE; return pte; } // until then, use: diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/include/asm/pgtable.h index d1b8272abcd9..5b83e82f8d7e 100644 --- a/arch/microblaze/include/asm/pgtable.h +++ b/arch/microblaze/include/asm/pgtable.h @@ -266,7 +266,7 @@ static inline pte_t pte_mkread(pte_t pte) \ { pte_val(pte) |= _PAGE_USER; return pte; } static inline pte_t pte_mkexec(pte_t pte) \ { pte_val(pte) |= _PAGE_USER | _PAGE_EXEC; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) \ +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) \ { pte_val(pte) |= _PAGE_RW; return pte; } static inline pte_t pte_mkdirty(pte_t pte) \ { pte_val(pte) |= _PAGE_DIRTY; return pte; } diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index 791389bf3c12..06efd567144a 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -309,7 +309,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte.pte_low |= _PAGE_WRITE; if (pte.pte_low & _PAGE_MODIFIED) { @@ -364,7 +364,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -626,7 +626,7 @@ static inline pmd_t pmd_wrprotect(pmd_t pmd) return pmd; } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |= _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgtable.h index 0f5c2564e9f5..edd458518e0e 100644 --- a/arch/nios2/include/asm/pgtable.h +++ b/arch/nios2/include/asm/pgtable.h @@ -129,7 +129,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/openrisc/include/asm/pgtable.h b/arch/openrisc/include/asm/pgtable.h index 3eb9b9555d0d..fd40aec189d1 100644 --- a/arch/openrisc/include/asm/pgtable.h +++ b/arch/openrisc/include/asm/pgtable.h @@ -250,7 +250,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITE; return pte; diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h index e2950f5db7c9..89f62137e67f 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h @@ -331,8 +331,12 @@ static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; retu static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_WRITE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |= _PAGE_WRITE; + return pte; +} /* * Huge pte definitions. diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/include/asm/book3s/32/pgtable.h index 7bf1fe7297c6..10d9a1d2aca9 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -498,7 +498,7 @@ static inline pte_t pte_mkpte(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h index 4acc9690f599..be0636522d36 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -600,7 +600,7 @@ static inline pte_t pte_mkexec(pte_t pte) return __pte_raw(pte_raw(pte) | cpu_to_be64(_PAGE_EXEC)); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { /* * write implies read, hence set both @@ -1071,7 +1071,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY #define pmd_soft_dirty(pmd) pte_soft_dirty(pmd_pte(pmd)) diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h index fec56d965f00..7bfbcb9ba55b 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -171,7 +171,7 @@ void unmap_kernel_page(unsigned long va); do { pte_update(mm, addr, ptep, ~0, 0, 0); } while (0) #ifndef pte_mkwrite -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/nohash/32/pte-8xx.h b/arch/powerpc/include/asm/nohash/32/pte-8xx.h index 1a89ebdc3acc..f32450eb270a 100644 --- a/arch/powerpc/include/asm/nohash/32/pte-8xx.h +++ b/arch/powerpc/include/asm/nohash/32/pte-8xx.h @@ -101,7 +101,7 @@ static inline int pte_write(pte_t pte) #define pte_write pte_write -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) & ~_PAGE_RO); } diff --git a/arch/powerpc/include/asm/nohash/64/pgtable.h b/arch/powerpc/include/asm/nohash/64/pgtable.h index 287e25864ffa..589009555877 100644 --- a/arch/powerpc/include/asm/nohash/64/pgtable.h +++ b/arch/powerpc/include/asm/nohash/64/pgtable.h @@ -85,7 +85,7 @@ #ifndef __ASSEMBLY__ /* pte_clear moved to later in this file */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index d8d8de0ded99..fed1b81fbe07 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -338,7 +338,7 @@ static inline pte_t pte_wrprotect(pte_t pte) /* static inline pte_t pte_mkread(pte_t pte) */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_WRITE); } @@ -624,9 +624,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pte_pmd(pte_mkyoung(pmd_pte(pmd))); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { - return pte_pmd(pte_mkwrite(pmd_pte(pmd))); + return pte_pmd(pte_mkwrite(pmd_pte(pmd), vma)); } static inline pmd_t pmd_wrprotect(pmd_t pmd) diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h index ccdbccfde148..558f7eef9c4d 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -102,9 +102,9 @@ static inline int huge_pte_dirty(pte_t pte) return pte_dirty(pte); } -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } static inline pte_t huge_pte_mkdirty(pte_t pte) diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index deeb918cae1d..8f2c743da0eb 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -1013,7 +1013,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -1499,7 +1499,7 @@ static inline pmd_t pmd_mkwrite_kernel(pmd_t pmd) return pmd; } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_mkwrite_kernel(pmd); } diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 21952b094650..9f2dcb9eafc8 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -351,6 +351,12 @@ static inline void set_pte(pte_t *ptep, pte_t pte) #define PTE_BIT_FUNC(h,fn,op) \ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } +#define PTE_BIT_FUNC_VMA(h,fn,op) \ +static inline pte_t pte_##fn(pte_t pte, struct vm_area_struct *vma) \ +{ \ + pte.pte_##h op; \ + return pte; \ +} #ifdef CONFIG_X2TLB /* @@ -359,11 +365,11 @@ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } * kernel permissions), we attempt to couple them a bit more sanely here. */ PTE_BIT_FUNC(high, wrprotect, &= ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE)); -PTE_BIT_FUNC(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); +PTE_BIT_FUNC_VMA(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); PTE_BIT_FUNC(high, mkhuge, |= _PAGE_SZHUGE); #else PTE_BIT_FUNC(low, wrprotect, &= ~_PAGE_RW); -PTE_BIT_FUNC(low, mkwrite, |= _PAGE_RW); +PTE_BIT_FUNC_VMA(low, mkwrite, |= _PAGE_RW); PTE_BIT_FUNC(low, mkhuge, |= _PAGE_SZHUGE); #endif diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h index d4330e3c57a6..3e8836179456 100644 --- a/arch/sparc/include/asm/pgtable_32.h +++ b/arch/sparc/include/asm/pgtable_32.h @@ -241,7 +241,7 @@ static inline pte_t pte_mkold(pte_t pte) return __pte(pte_val(pte) & ~SRMMU_REF); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | SRMMU_WRITE); } diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index 2dc8d4641734..c5cd5c03f557 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -466,7 +466,7 @@ static inline pte_t pte_mkclean(pte_t pte) return __pte(val); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { unsigned long val = pte_val(pte), mask; @@ -756,11 +756,11 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return __pmd(pte_val(pte)); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pte_t pte = __pte(pmd_val(pmd)); - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); return __pmd(pte_val(pte)); } diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index a70d1618eb35..963479c133b7 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h @@ -207,7 +207,7 @@ static inline pte_t pte_mkyoung(pte_t pte) return(pte); } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (unlikely(pte_get_bits(pte, _PAGE_RW))) return pte; diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 3607f2572f9e..66c514808276 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -369,7 +369,9 @@ 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) +struct vm_area_struct; + +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -470,7 +472,7 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pmd_set_flags(pmd, _PAGE_ACCESSED); } -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_set_flags(pmd, _PAGE_RW); } diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pgtable.h index fc7a14884c6c..d72632d9c53c 100644 --- a/arch/xtensa/include/asm/pgtable.h +++ b/arch/xtensa/include/asm/pgtable.h @@ -262,7 +262,7 @@ static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |= _PAGE_WRITABLE; return pte; } #define pgprot_noncached(prot) \ diff --git a/include/asm-generic/hugetlb.h b/include/asm-generic/hugetlb.h index d7f6335d3999..e86c830728de 100644 --- a/include/asm-generic/hugetlb.h +++ b/include/asm-generic/hugetlb.h @@ -20,9 +20,9 @@ static inline unsigned long huge_pte_dirty(pte_t pte) return pte_dirty(pte); } -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT diff --git a/include/linux/mm.h b/include/linux/mm.h index 1f79667824eb..af652444fbba 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1163,7 +1163,7 @@ void free_compound_page(struct page *page); static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); return pte; } diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index af59cc7bd307..7bc5592900bc 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -109,10 +109,10 @@ static void __init pte_basic_tests(struct pgtable_debug_args *args, int idx) WARN_ON(!pte_same(pte, pte)); WARN_ON(!pte_young(pte_mkyoung(pte_mkold(pte)))); WARN_ON(!pte_dirty(pte_mkdirty(pte_mkclean(pte)))); - WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte)))); + WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte), args->vma))); WARN_ON(pte_young(pte_mkold(pte_mkyoung(pte)))); WARN_ON(pte_dirty(pte_mkclean(pte_mkdirty(pte)))); - WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); + WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte, args->vma)))); WARN_ON(pte_dirty(pte_wrprotect(pte_mkclean(pte)))); WARN_ON(!pte_dirty(pte_wrprotect(pte_mkdirty(pte)))); } @@ -153,7 +153,7 @@ static void __init pte_advanced_tests(struct pgtable_debug_args *args) pte = pte_mkclean(pte); set_pte_at(args->mm, args->vaddr, args->ptep, pte); flush_dcache_page(page); - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, args->vma); pte = pte_mkdirty(pte); ptep_set_access_flags(args->vma, args->vaddr, args->ptep, pte, 1); pte = ptep_get(args->ptep); @@ -199,10 +199,10 @@ static void __init pmd_basic_tests(struct pgtable_debug_args *args, int idx) WARN_ON(!pmd_same(pmd, pmd)); WARN_ON(!pmd_young(pmd_mkyoung(pmd_mkold(pmd)))); WARN_ON(!pmd_dirty(pmd_mkdirty(pmd_mkclean(pmd)))); - WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd)))); + WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd), args->vma))); WARN_ON(pmd_young(pmd_mkold(pmd_mkyoung(pmd)))); WARN_ON(pmd_dirty(pmd_mkclean(pmd_mkdirty(pmd)))); - WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd)))); + WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd, args->vma)))); WARN_ON(pmd_dirty(pmd_wrprotect(pmd_mkclean(pmd)))); WARN_ON(!pmd_dirty(pmd_wrprotect(pmd_mkdirty(pmd)))); /* @@ -253,7 +253,7 @@ static void __init pmd_advanced_tests(struct pgtable_debug_args *args) pmd = pmd_mkclean(pmd); set_pmd_at(args->mm, vaddr, args->pmdp, pmd); flush_dcache_page(page); - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, args->vma); pmd = pmd_mkdirty(pmd); pmdp_set_access_flags(args->vma, vaddr, args->pmdp, pmd, 1); pmd = READ_ONCE(*args->pmdp); @@ -928,8 +928,8 @@ static void __init hugetlb_basic_tests(struct pgtable_debug_args *args) pte = mk_huge_pte(page, args->page_prot); WARN_ON(!huge_pte_dirty(huge_pte_mkdirty(pte))); - WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte)))); - WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte)))); + WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte), args->vma))); + WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte, args->vma)))); #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB pte = pfn_pte(args->fixed_pmd_pfn, args->page_prot); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4fc43859e59a..aaf815838144 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -555,7 +555,7 @@ __setup("transparent_hugepage=", setup_transparent_hugepage); pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, vma); return pmd; } @@ -1580,7 +1580,7 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf) pmd = pmd_modify(oldpmd, vma->vm_page_prot); pmd = pmd_mkyoung(pmd); if (writable) - pmd = pmd_mkwrite(pmd); + pmd = pmd_mkwrite(pmd, vma); set_pmd_at(vma->vm_mm, haddr, vmf->pmd, pmd); update_mmu_cache_pmd(vma, vmf->address, vmf->pmd); spin_unlock(vmf->ptl); @@ -1926,7 +1926,7 @@ int change_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, /* See change_pte_range(). */ if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pmd_write(entry) && can_change_pmd_writable(vma, addr, entry)) - entry = pmd_mkwrite(entry); + entry = pmd_mkwrite(entry, vma); ret = HPAGE_PMD_NR; set_pmd_at(mm, addr, pmd, entry); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 07abcb6eb203..6af471bdcff8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4900,7 +4900,7 @@ static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page, if (writable) { entry = huge_pte_mkwrite(huge_pte_mkdirty(mk_huge_pte(page, - vma->vm_page_prot))); + vma->vm_page_prot)), vma); } else { entry = huge_pte_wrprotect(mk_huge_pte(page, vma->vm_page_prot)); @@ -4916,7 +4916,7 @@ static void set_huge_ptep_writable(struct vm_area_struct *vma, { pte_t entry; - entry = huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep))); + entry = huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep)), vma); if (huge_ptep_set_access_flags(vma, address, ptep, entry, 1)) update_mmu_cache(vma, address, ptep); } diff --git a/mm/memory.c b/mm/memory.c index f456f3b5049c..d0972d2d6f36 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4067,7 +4067,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf) entry = mk_pte(&folio->page, vma->vm_page_prot); entry = pte_sw_mkyoung(entry); if (vma->vm_flags & VM_WRITE) - entry = pte_mkwrite(pte_mkdirty(entry)); + entry = pte_mkwrite(pte_mkdirty(entry), vma); vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); @@ -4755,7 +4755,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) pte = pte_modify(old_pte, vma->vm_page_prot); pte = pte_mkyoung(pte); if (writable) - pte = pte_mkwrite(pte); + pte = pte_mkwrite(pte, vma); ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); update_mmu_cache(vma, vmf->address, vmf->pte); pte_unmap_unlock(vmf->pte, vmf->ptl); diff --git a/mm/migrate_device.c b/mm/migrate_device.c index d30c9de60b0d..df3f5e9d5f76 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -646,7 +646,7 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate, } entry = mk_pte(page, vma->vm_page_prot); if (vma->vm_flags & VM_WRITE) - entry = pte_mkwrite(pte_mkdirty(entry)); + entry = pte_mkwrite(pte_mkdirty(entry), vma); } ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl); diff --git a/mm/mprotect.c b/mm/mprotect.c index 1d4843c97c2a..381163a41e88 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -198,7 +198,7 @@ static long change_pte_range(struct mmu_gather *tlb, if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pte_write(ptent) && can_change_pte_writable(vma, addr, ptent)) - ptent = pte_mkwrite(ptent); + ptent = pte_mkwrite(ptent, vma); ptep_modify_prot_commit(vma, addr, pte, oldpte, ptent); if (pte_needs_flush(oldpte, ptent)) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 53c3d916ff66..3db6f87c0aca 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -75,7 +75,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, if (page_in_cache && !vm_shared) writable = false; if (writable) - _dst_pte = pte_mkwrite(_dst_pte); + _dst_pte = pte_mkwrite(_dst_pte, dst_vma); if (wp_copy) _dst_pte = pte_mkuffd_wp(_dst_pte); -- 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 26CFAC64ED6 for ; Mon, 27 Feb 2023 23:45:28 +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=nT3cwNCaaFp7c57CcP1TKvEQV+gvVO+V0AXdHu0CAk4=; b=aPu0tl5zcVkHE1 4shnPpUXTbkrXWDsWCyL+NDBRMDaaYUa5HPxumC7iQEE/ITl3H5Iyk2i1tDpAL9TOCGI3NCZjNkUG oRMqsf3Th7CLz3835KdG6RacFaamf1JRZ+FDyc9XMqJCE0jcxhVUuGp+p1T/cUnJs7jiFiTRcOwcR h6mL1EasqmL7FsQOoDmYO6lSeSuyJVLwb5u395EYDIga5NGBh/fWw0IkbYZ/a1IaByBZWN7D2Bs0M G3XCzxM3QQrUpeYPqd6w/j7Sig9+lcLDtidnUwpvUUa1J4QT8eRKfnJch2iXBGodr7Wq6Cc/+6rBe EVukpDgL3VtN1NQeRQiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pWnBM-00BaO6-VU; Mon, 27 Feb 2023 23:45:24 +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 1pWm21-00BSc7-2O; Mon, 27 Feb 2023 22:31:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537101; x=1709073101; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=Gd++Ss6FzJgVgLN+e7b1/Qj/XCssBYw8HMemTiMAFCDT2I0YJjp+vXfj s3DuuFNSVTpwLhkOWNYB+Y7YfxXN4B/SE0pdCLezc0JQLQ3T+lzThgBtU mkyCpB9DX90G2IhFoUFaNjYqmLhpj9ZRi8/rueexwktdAMpr6dgbAE9Lu PrYhte6wFSJjeai4GZl6L055aLyn62Amjzl2y3ZyYT6PTBuFgpwNgvqYo wxzY9fM3mUgsRwFi/wbkZYaJxv95pKLxzYOHUKkAwPzDnJMFDzWKyhDP7 aP9hiIs+a73LZ0xEvgu+kdcIC/f6A1j9OMWHD/lZ0J6P1KefdAOmxUr8D Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657340" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657340" 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:22 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024498" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024498" 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:16 -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-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-Id: <20230227222957.24501-14-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_143141_236167_D79B9E4E X-CRM114-Status: GOOD ( 20.85 ) X-BeenThere: linux-snps-arc@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux on Synopsys ARC Processors List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-snps-arc" Errors-To: linux-snps-arc-bounces+linux-snps-arc=archiver.kernel.org@lists.infradead.org VGhlIHg4NiBDb250cm9sLWZsb3cgRW5mb3JjZW1lbnQgVGVjaG5vbG9neSAoQ0VUKSBmZWF0dXJl IGluY2x1ZGVzIGEgbmV3CnR5cGUgb2YgbWVtb3J5IGNhbGxlZCBzaGFkb3cgc3RhY2suIFRoaXMg c2hhZG93IHN0YWNrIG1lbW9yeSBoYXMgc29tZQp1bnVzdWFsIHByb3BlcnRpZXMsIHdoaWNoIHJl cXVpcmVzIHNvbWUgY29yZSBtbSBjaGFuZ2VzIHRvIGZ1bmN0aW9uCnByb3Blcmx5LgoKT25lIG9m IHRoZXNlIHVudXN1YWwgcHJvcGVydGllcyBpcyB0aGF0IHNoYWRvdyBzdGFjayBtZW1vcnkgaXMg d3JpdGFibGUsCmJ1dCBvbmx5IGluIGxpbWl0ZWQgd2F5cy4gVGhlc2UgbGltaXRzIGFyZSBhcHBs aWVkIHZpYSBhIHNwZWNpZmljIFBURQpiaXQgY29tYmluYXRpb24uIE5ldmVydGhlbGVzcywgdGhl IG1lbW9yeSBpcyB3cml0YWJsZSwgYW5kIGNvcmUgbW0gY29kZQp3aWxsIG5lZWQgdG8gYXBwbHkg dGhlIHdyaXRhYmxlIHBlcm1pc3Npb25zIGluIHRoZSB0eXBpY2FsIHBhdGhzIHRoYXQKY2FsbCBw dGVfbWt3cml0ZSgpLgoKSW4gYWRkaXRpb24gdG8gVk1fV1JJVEUsIHRoZSBzaGFkb3cgc3RhY2sg Vk1BJ3Mgd2lsbCBoYXZlIGEgZmxhZyBkZW5vdGluZwp0aGF0IHRoZXkgYXJlIHNwZWNpYWwgc2hh ZG93IHN0YWNrIGZsYXZvciBvZiB3cml0YWJsZSBtZW1vcnkuIFNvIG1ha2UKcHRlX21rd3JpdGUo KSB0YWtlIGEgVk1BLCBzbyB0aGF0IHRoZSB4ODYgaW1wbGVtZW50YXRpb24gb2YgaXQgY2FuIGtu b3cgdG8KY3JlYXRlIHJlZ3VsYXIgd3JpdGFibGUgbWVtb3J5IG9yIHNoYWRvdyBzdGFjayBtZW1v cnkuCgpBcHBseSB0aGUgc2FtZSBjaGFuZ2VzIGZvciBwbWRfbWt3cml0ZSgpIGFuZCBodWdlX3B0 ZV9ta3dyaXRlKCkuCgpObyBmdW5jdGlvbmFsIGNoYW5nZS4KCkNjOiBsaW51eC1kb2NAdmdlci5r ZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1hbHBo YUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNucHMtYXJjQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgtY3NreUB2 Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWhleGFnb25Admdlci5rZXJuZWwub3JnCkNjOiBsaW51 eC1pYTY0QHZnZXIua2VybmVsLm9yZwpDYzogbG9vbmdhcmNoQGxpc3RzLmxpbnV4LmRldgpDYzog bGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwpDYzogTWljaGFsIFNpbWVrIDxtb25zdHJA bW9uc3RyLmV1PgpDYzogRGluaCBOZ3V5ZW4gPGRpbmd1eWVuQGtlcm5lbC5vcmc+CkNjOiBsaW51 eC1taXBzQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtb3BlbnJpc2NAdmdlci5rZXJuZWwub3Jn CkNjOiBsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eHBwYy1kZXZAbGlzdHMu b3psYWJzLm9yZwpDYzogbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgt czM5MEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNoQHZnZXIua2VybmVsLm9yZwpDYzogc3Bh cmNsaW51eEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogbGludXgtYXJjaEB2Z2VyLmtl cm5lbC5vcmcKQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwpUZXN0ZWQtYnk6IFBlbmdmZWkgWHUgPHBl bmdmZWkueHVAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IEpvaG4gQWxsZW4gPGpvaG4uYWxsZW5AYW1k LmNvbT4KVGVzdGVkLWJ5OiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KQWNrZWQt Ynk6IE1pa2UgUmFwb3BvcnQgKElCTSkgPHJwcHRAa2VybmVsLm9yZz4KQWNrZWQtYnk6IE1pY2hh ZWwgRWxsZXJtYW4gPG1wZUBlbGxlcm1hbi5pZC5hdT4KQWNrZWQtYnk6IERhdmlkIEhpbGRlbmJy YW5kIDxkYXZpZEByZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogS2VlcyBDb29rIDxrZWVzY29va0Bj aHJvbWl1bS5vcmc+ClN1Z2dlc3RlZC1ieTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhdmlkQHJlZGhh dC5jb20+ClNpZ25lZC1vZmYtYnk6IFJpY2sgRWRnZWNvbWJlIDxyaWNrLnAuZWRnZWNvbWJlQGlu dGVsLmNvbT4KCi0tLQpIaSBOb24teDg2IEFyY2jigJlzLAoKeDg2IGhhcyBhIGZlYXR1cmUgdGhh dCBhbGxvd3MgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHNwZWNpYWwgdHlwZSBvZgp3cml0YWJsZSBt ZW1vcnkgKHNoYWRvdyBzdGFjaykgdGhhdCBpcyBvbmx5IHdyaXRhYmxlIGluIGxpbWl0ZWQgc3Bl Y2lmaWMKd2F5cy4gUHJldmlvdXNseSwgY2hhbmdlcyB3ZXJlIHByb3Bvc2VkIHRvIGNvcmUgTU0g Y29kZSB0byB0ZWFjaCBpdCB0bwpkZWNpZGUgd2hlbiB0byBjcmVhdGUgbm9ybWFsbHkgd3JpdGFi bGUgbWVtb3J5IG9yIHRoZSBzcGVjaWFsIHNoYWRvdyBzdGFjawp3cml0YWJsZSBtZW1vcnksIGJ1 dCBEYXZpZCBIaWxkZW5icmFuZCBzdWdnZXN0ZWRbMF0gdG8gY2hhbmdlCnBYWF9ta3dyaXRlKCkg dG8gdGFrZSBhIFZNQSwgc28gYXdhcmVuZXNzIG9mIHNoYWRvdyBzdGFjayBtZW1vcnkgY2FuIGJl Cm1vdmVkIGludG8geDg2IGNvZGUuCgpTaW5jZSBwWFhfbWt3cml0ZSgpIGlzIGRlZmluZWQgaW4g ZXZlcnkgYXJjaCwgaXQgcmVxdWlyZXMgc29tZSB0cmVlLXdpZGUKY2hhbmdlcy4gU28gdGhhdCBp cyB3aHkgeW91IGFyZSBzZWVpbmcgc29tZSBwYXRjaGVzIG91dCBvZiBhIGJpZyB4ODYKc2VyaWVz IHBvcCB1cCBpbiB5b3VyIGFyY2ggbWFpbGluZyBsaXN0LiBUaGVyZSBpcyBubyBmdW5jdGlvbmFs IGNoYW5nZS4KQWZ0ZXIgdGhpcyByZWZhY3RvciwgdGhlIHNoYWRvdyBzdGFjayBzZXJpZXMgZ29l cyBvbiB0byB1c2UgdGhlIGFyY2gKaGVscGVycyB0byBwdXNoIHNoYWRvdyBzdGFjayBtZW1vcnkg ZGV0YWlscyBpbnNpZGUgYXJjaC94ODYuCgpUZXN0aW5nIHdhcyBqdXN0IDAtZGF5IGJ1aWxkIHRl c3RpbmcuCgpIb3BlZnVsbHkgdGhhdCBpcyBlbm91Z2ggY29udGV4dC4gVGhhbmtzIQoKWzBdIGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMGUyOWEyZDAtMDhkOC1iY2Q2LWZmMjYtNGJlYTBl NDAzN2IwQHJlZGhhdC5jb20vI3QKCnY2OgogLSBOZXcgcGF0Y2gKLS0tCiBEb2N1bWVudGF0aW9u L21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdCAgICB8ICA5ICsrKysrKy0tLQogYXJjaC9hbHBo YS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvYXJj L2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvYXJjL2lu Y2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oICAgIHwgIDcgKysrKysrLQogYXJjaC9hcm0v aW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCAgICAgICAgfCAgNyArKysrKystCiBhcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgICB8ICAyICstCiBhcmNoL2FybTY0 L2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAgICB8ICA0ICsrLS0KIGFyY2gvY3NreS9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaGV4YWdvbi9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaWE2NC9pbmNsdWRl L2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvbG9vbmdhcmNoL2luY2x1 ZGUvYXNtL3BndGFibGUuaCAgICAgICAgIHwgIDQgKystLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNt L21jZl9wZ3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21v dG9yb2xhX3BndGFibGUuaCAgICAgfCAgNiArKysrKy0KIGFyY2gvbTY4ay9pbmNsdWRlL2FzbS9z dW4zX3BndGFibGUuaCAgICAgICAgIHwgIDYgKysrKystCiBhcmNoL21pY3JvYmxhemUvaW5jbHVk ZS9hc20vcGd0YWJsZS5oICAgICAgICB8ICAyICstCiBhcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0 YWJsZS5oICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgICAgfCAgMiArLQogYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJs ZS5oICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29r M3MvMzIvcGd0YWJsZS5oIHwgIDIgKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3Mv NjQvcGd0YWJsZS5oIHwgIDQgKystLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8z Mi9wZ3RhYmxlLmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9w dGUtOHh4LmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3Rh YmxlLmggfCAgMiArLQogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAg ICAgfCAgNiArKystLS0KIGFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmggICAgICAgICAg ICAgIHwgIDQgKystLQogYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgfCAgNCArKy0tCiBhcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCAgICAgICAgICAg ICB8IDEwICsrKysrKysrLS0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oICAg ICAgICAgIHwgIDIgKy0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oICAgICAg ICAgIHwgIDYgKysrLS0tCiBhcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgICB8ICAyICstCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAg ICB8ICA2ICsrKystLQogYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oICAgICAgICAg ICAgfCAgMiArLQogaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmggICAgICAgICAgICAgICAg fCAgNCArKy0tCiBpbmNsdWRlL2xpbnV4L21tLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAyICstCiBtbS9kZWJ1Z192bV9wZ3RhYmxlLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE2 ICsrKysrKysrLS0tLS0tLS0KIG1tL2h1Z2VfbWVtb3J5LmMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDYgKysrLS0tCiBtbS9odWdldGxiLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA0ICsrLS0KIG1tL21lbW9yeS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDQgKystLQogbW0vbWlncmF0ZV9kZXZpY2UuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMiArLQogbW0vbXByb3RlY3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMiArLQogbW0vdXNlcmZhdWx0ZmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMiArLQogNDIgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMu cnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QKaW5kZXggMzBk OWEwOWYwMWY0Li43OGFjM2ZmMmZlMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vYXJj aF9wZ3RhYmxlX2hlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxl X2hlbHBlcnMucnN0CkBAIC00Niw3ICs0Niw4IEBAIFBURSBQYWdlIFRhYmxlIEhlbHBlcnMKICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHB0ZV9ta2NsZWFuICAgICAgICAgICAgICAgfCBDcmVh dGVzIGEgY2xlYW4gUFRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKLXwgcHRlX21rd3JpdGUgICAgICAgICAgICAgICB8IENyZWF0ZXMgYSB3 cml0YWJsZSBQVEUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHB0ZV9ta3dyaXRlICAg ICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUFRFIG9mIHRoZSB0eXBlIHNwZWNpZmll ZCBieSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIFZNQS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CiB8IHB0ZV93cnByb3RlY3QgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVk IFBURSAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEx OCw3ICsxMTksOCBAQCBQTUQgUGFnZSBUYWJsZSBIZWxwZXJzCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwogfCBwbWRfbWtjbGVhbiAgICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIGNsZWFuIFBNRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18 IHBtZF9ta3dyaXRlICAgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUE1EICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorfCBwbWRfbWt3cml0ZSAgICAgICAgICAgICAgIHwgQ3Jl YXRlcyBhIHdyaXRhYmxlIFBNRCBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgIHwKK3wgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHRoZSBWTUEuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBwbWRfd3Jwcm90ZWN0 ICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIHdyaXRlIHByb3RlY3RlZCBQTUQgICAgICAgICAgICAg ICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMjIsNyArMjI0LDggQEAgSHVn ZVRMQiBQYWdlIFRhYmxlIEhlbHBlcnMKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2Vf cHRlX21rZGlydHkgICAgICAgICAgfCBDcmVhdGVzIGEgZGlydHkgSHVnZVRMQiAgICAgICAgICAg ICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaHVnZV9wdGVfbWt3 cml0ZSAgICAgICAgICB8IENyZWF0ZXMgYSB3cml0YWJsZSBIdWdlVExCICAgICAgICAgICAgICAg ICAgICAgICB8Cit8IGh1Z2VfcHRlX21rd3JpdGUgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFi bGUgSHVnZVRMQiBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgfAorfCAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgYnkgdGhlIFZNQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2VfcHRlX3dycHJvdGVjdCAgICAgICAg fCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVkIEh1Z2VUTEIgICAgICAgICAgICAgICAgfAogKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYmE0M2Ni ODQxZDE5Li5mYjVkMjA3YzJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNTYs OSArMjU2LDEzIEBAIGV4dGVybiBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJl dHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsKIGV4dGVybiBpbmxpbmUgcHRlX3Qg cHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0ZPVzsgcmV0 dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsg cHRlX3ZhbChwdGUpICY9IH4oX19ESVJUWV9CSVRTKTsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+KF9fQUND RVNTX0JJVFMpOyByZXR1cm4gcHRlOyB9Ci1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRl KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsgcmV0dXJuIHB0ZTsgfQog ZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUp IHw9IF9fRElSVFlfQklUUzsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVf bWt5b3VuZyhwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9fQUNDRVNTX0JJVFM7IHJldHVy biBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsK KwlyZXR1cm4gcHRlOworfQogCiAvKgogICogVGhlIHNtcF9ybWIoKSBpbiB0aGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgdG8gb3JkZXIgdGhlIGxvYWQgb2YKZGlmZiAtLWdpdCBh L2FyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9o dWdlcGFnZS5oCmluZGV4IDUwMDFiNzk2ZmI4ZC4uMjIzYTk2OTY3MTg4IDEwMDY0NAotLS0gYS9h cmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNt L2h1Z2VwYWdlLmgKQEAgLTIxLDcgKzIxLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwdGVfcG1k KHB0ZV90IHB0ZSkKIH0KIAogI2RlZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVf d3Jwcm90ZWN0KHBtZF9wdGUocG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3Bt ZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZt YSkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKICNkZWZpbmUgcG1k X21rZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9ta2RpcnR5KHBtZF9wdGUocG1kKSkpCiAjZGVmaW5l IHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBtZCkpKQogI2RlZmlu ZSBwbWRfbWt5b3VuZyhwbWQpCXB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSkKZGlm ZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oIGIvYXJj aC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLWFyY3YyLmgKaW5kZXggNmU5ZjhjYTZkNmEx Li5hNWI4YmM5NTUwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUt Yml0cy1hcmN2Mi5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2 Mi5oCkBAIC04Nyw3ICs4Nyw2IEBACiAKIFBURV9CSVRfRlVOQyhta25vdHByZXNlbnQsICAgICAm PSB+KF9QQUdFX1BSRVNFTlQpKTsKIFBURV9CSVRfRlVOQyh3cnByb3RlY3QsCSY9IH4oX1BBR0Vf V1JJVEUpKTsKLVBURV9CSVRfRlVOQyhta3dyaXRlLAl8PSAoX1BBR0VfV1JJVEUpKTsKIFBURV9C SVRfRlVOQyhta2NsZWFuLAkmPSB+KF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtkaXJ0 eSwJfD0gKF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtvbGQsCSY9IH4oX1BBR0VfQUND RVNTRUQpKTsKQEAgLTk1LDYgKzk0LDEyIEBAIFBURV9CSVRfRlVOQyhta3lvdW5nLAl8PSAoX1BB R0VfQUNDRVNTRUQpKTsKIFBURV9CSVRfRlVOQyhta3NwZWNpYWwsCXw9IChfUEFHRV9TUEVDSUFM KSk7CiBQVEVfQklUX0ZVTkMobWtodWdlLAl8PSAoX1BBR0VfSFdfU1opKTsKIAorc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQoreworCXB0ZV92YWwocHRlKSB8PSAoX1BBR0VfV1JJVEUpOworCXJldHVybiBwdGU7Cit9 CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5l d3Byb3QpCiB7CiAJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykg fCBwZ3Byb3RfdmFsKG5ld3Byb3QpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNt L3BndGFibGUtM2xldmVsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5o CmluZGV4IDEwNjA0OTc5MTUwMC4uZGYwNzFhODA3NjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9p bmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Bn dGFibGUtM2xldmVsLmgKQEAgLTIwMiwxMSArMjAyLDE2IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qg cG1kXyMjZm4ocG1kX3QgcG1kKSB7IHBtZF92YWwocG1kKSBvcDsgcmV0dXJuIHBtZDsgfQogCiBQ TURfQklUX0ZVTkMod3Jwcm90ZWN0LAl8PSBMX1BNRF9TRUNUX1JET05MWSk7CiBQTURfQklUX0ZV TkMobWtvbGQsCSY9IH5QTURfU0VDVF9BRik7Ci1QTURfQklUX0ZVTkMobWt3cml0ZSwgICAmPSB+ TF9QTURfU0VDVF9SRE9OTFkpOwogUE1EX0JJVF9GVU5DKG1rZGlydHksICAgfD0gTF9QTURfU0VD VF9ESVJUWSk7CiBQTURfQklUX0ZVTkMobWtjbGVhbiwgICAmPSB+TF9QTURfU0VDVF9ESVJUWSk7 CiBQTURfQklUX0ZVTkMobWt5b3VuZywgICB8PSBQTURfU0VDVF9BRik7CiAKK3N0YXRpYyBpbmxp bmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlwbWRfdmFsKHBtZCkgfD0gTF9QTURfU0VDVF9SRE9OTFk7CisJcmV0dXJuIHBtZDsK K30KKwogI2RlZmluZSBwbWRfbWtodWdlKHBtZCkJCShfX3BtZChwbWRfdmFsKHBtZCkgJiB+UE1E X1RBQkxFX0JJVCkpCiAKICNkZWZpbmUgcG1kX3BmbihwbWQpCQkoKChwbWRfdmFsKHBtZCkgJiBQ TURfTUFTSykgJiBQSFlTX01BU0spID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK aW5kZXggYTU4Y2NiYjQwNmFkLi4zOWFkMWFlMTMwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK QEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRl X3QgcHRlKQogCXJldHVybiBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JET05MWSkp OwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlyZXR1cm4gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JE T05MWSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgg Yi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjY2NmODg4NTc5MmUuLjkx M2JmMzcwZjc0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4Nyw3ICsxODcsNyBA QCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0 dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUp CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpA QCAtNDkyLDcgKzQ5Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90 IHBtZCkKICNkZWZpbmUgcG1kX2NvbnQocG1kKQkJcHRlX2NvbnQocG1kX3B0ZShwbWQpKQogI2Rl ZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVfd3Jwcm90ZWN0KHBtZF9wdGUocG1k KSkpCiAjZGVmaW5lIHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBt ZCkpKQotI2RlZmluZSBwbWRfbWt3cml0ZShwbWQpCXB0ZV9wbWQocHRlX21rd3JpdGUocG1kX3B0 ZShwbWQpKSkKKyNkZWZpbmUgcG1kX21rd3JpdGUocG1kLCB2bWEpCXB0ZV9wbWQocHRlX21rd3Jp dGUocG1kX3B0ZShwbWQpLCAodm1hKSkpCiAjZGVmaW5lIHBtZF9ta2NsZWFuKHBtZCkJcHRlX3Bt ZChwdGVfbWtjbGVhbihwbWRfcHRlKHBtZCkpKQogI2RlZmluZSBwbWRfbWtkaXJ0eShwbWQpCXB0 ZV9wbWQocHRlX21rZGlydHkocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX21reW91bmcocG1k KQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUocG1kKSkpCmRpZmYgLS1naXQgYS9hcmNoL2Nz a3kvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jc2t5L2luY2x1ZGUvYXNtL3BndGFibGUu aAppbmRleCBkNDA0MjQ5NWZlYmMuLmMyZjkyYzk5MWUzNyAxMDA2NDQKLS0tIGEvYXJjaC9jc2t5 L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2Nza3kvaW5jbHVkZS9hc20vcGd0YWJs ZS5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9X UklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQpCmRpZmYgLS1naXQgYS9h cmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9oZXhhZ29uL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCA1OTM5MzYxM2QwODYuLjE0YWI5Yzc4OWMwZSAxMDA2NDQKLS0t IGEvYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2hleGFnb24v aW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGlubGluZSBw dGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIH0KIAogLyogcHRlX21rd3JpdGUgLSBtYXJr IHBhZ2UgYXMgd3JpdGFibGUgKi8KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsK IAlyZXR1cm4gcHRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUu aCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjFjOTdlMzFhMjhhLi5m ODc5ZGQ2MjZkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjY4LDcgKzI2OCw3IEBA IGlhNjRfcGh5c19hZGRyX3ZhbGlkICh1bnNpZ25lZCBsb25nIGFkZHIpCiAgKiBhY2Nlc3Mgcmln aHRzOgogICovCiAjZGVmaW5lIHB0ZV93cnByb3RlY3QocHRlKQkoX19wdGUocHRlX3ZhbChwdGUp ICYgfl9QQUdFX0FSX1JXKSkKLSNkZWZpbmUgcHRlX21rd3JpdGUocHRlKQkoX19wdGUocHRlX3Zh bChwdGUpIHwgX1BBR0VfQVJfUlcpKQorI2RlZmluZSBwdGVfbWt3cml0ZShwdGUsIHZtYSkJKF9f cHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FSX1JXKSkKICNkZWZpbmUgcHRlX21rb2xkKHB0ZSkJ CShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQSkpCiAjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0 ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0EpKQogI2RlZmluZSBwdGVfbWtjbGVhbihw dGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRCkpCmRpZmYgLS1naXQgYS9hcmNoL2xv b25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmgKaW5kZXggZDI4ZmI5ZGJlYzU5Li5lYmY2NDVmNDAyOTggMTAwNjQ0Ci0tLSBh L2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2xvb25nYXJj aC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX01P RElGSUVEKQpAQCAtNDkwLDcgKzQ5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShw bWRfdCBwbWQpCiAJcmV0dXJuICEhKHBtZF92YWwocG1kKSAmIF9QQUdFX1dSSVRFKTsKIH0KIAot c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5l IHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp CiB7CiAJcG1kX3ZhbChwbWQpIHw9IF9QQUdFX1dSSVRFOwogCWlmIChwbWRfdmFsKHBtZCkgJiBf UEFHRV9NT0RJRklFRCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0 YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ3RhYmxlLmgKaW5kZXggMTM3NDFj MTI0NWUxLi4zN2Q3N2UwNTUwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9t Y2ZfcGd0YWJsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCkBA IC0yMTEsNyArMjExLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRl KQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBDRl9QQUdFX1dSSVRB QkxFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90 b3JvbGFfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUu aAppbmRleCBlYzBkYzE5YWI4MzQuLmM0ZThlYjc2Mjg2ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9h c20vbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0xNTUsNyArMTU1LDYgQEAgc3RhdGljIGlubGluZSBp bnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FD Q0VTU0VEOwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfUk9OTFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRElS VFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0 aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0g fl9QQUdFX1JPTkxZOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2Rp cnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWtub2NhY2hlKHB0ZV90IHB0ZSkKQEAgLTE2OCw2ICsxNjcsMTEgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUpCiAJcHRlX3ZhbChwdGUpID0gKHB0ZV92 YWwocHRlKSAmIF9DQUNIRU1BU0swNDApIHwgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZTsKIAly ZXR1cm4gcHRlOwogfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0Vf Uk9OTFk7CisJcmV0dXJuIHB0ZTsKK30KIAogI2RlZmluZSBzd2FwcGVyX3BnX2RpciBrZXJuZWxf cGdfZGlyCiBleHRlcm4gcGdkX3Qga2VybmVsX3BnX2RpclsxMjhdOwpkaWZmIC0tZ2l0IGEvYXJj aC9tNjhrL2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNt L3N1bjNfcGd0YWJsZS5oCmluZGV4IGU1ODJiMDQ4NGE1NS4uMmEwNmJlYTUxYTFlIDEwMDY0NAot LS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3VuM19wZ3RhYmxlLmgKKysrIGIvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oCkBAIC0xNDMsMTAgKzE0MywxNCBAQCBzdGF0aWMg aW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYg U1VOM19QQUdFX0FDQ0VTUwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90 IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSAmPSB+U1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5TVU4zX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfV1JJVEVBQkxFOyByZXR1cm4g cHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVf dmFsKHB0ZSkgfD0gU1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19Q QUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25v Y2FjaGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfTk9DQUNIRTsgcmV0 dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0Vf V1JJVEVBQkxFOworCXJldHVybiBwdGU7Cit9CiAvLyB1c2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2Fj aGVzIHdvcmsuLi4KIC8vc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUp CXsgcHRlX3ZhbChwdGUpICY9IFNVTjNfUEFHRV9OT0NBQ0hFOyByZXR1cm4gcHRlOyB9CiAvLyB1 bnRpbCB0aGVuLCB1c2U6CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBk MWI4MjcyYWJjZDkuLjViODNlODJmOGQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0 YWJsZS5oCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFk KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VTRVI7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIFwKIAl7IHB0ZV92 YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIFwKK3N0YXRpYyBpbmxpbmUgcHRl X3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkgXAog CXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X0RJUlRZOyByZXR1cm4gcHRlOyB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA3OTEzODli ZjNjMTIuLjA2ZWZkNTY3MTQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDksNyAr MzA5LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVy biBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQor c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXB0ZS5wdGVfbG93IHw9IF9QQUdFX1dSSVRFOwogCWlmIChwdGUu cHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0Vf TU9ESUZJRUQpCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfd3Jw cm90ZWN0KHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90 IHBtZF9ta3dyaXRlKHBtZF90IHBtZCkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUo cG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwbWRfdmFsKHBtZCkg fD0gX1BBR0VfV1JJVEU7CiAJaWYgKHBtZF92YWwocG1kKSAmIF9QQUdFX01PRElGSUVEKQpkaWZm IC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL25pb3MyL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwZjVjMjU2NGU5ZjUuLmVkZDQ1ODUxOGUwZSAxMDA2 NDQKLS0tIGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9uaW9z Mi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcHRl X3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNo L29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9h c20vcGd0YWJsZS5oCmluZGV4IDNlYjliOTU1NWQwZC4uZmQ0MGFlYzE4OWQxIDEwMDY0NAotLS0g YS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL29wZW5yaXNj L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwdGVf dmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKZGlmZiAtLWdpdCBhL2FyY2gv cGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAppbmRleCBlMjk1MGY1ZGI3YzkuLjg5ZjYyMTM3ZTY3ZiAxMDA2NDQKLS0tIGEvYXJj aC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUv YXNtL3BndGFibGUuaApAQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0 dQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFs KHB0ZSkgJj0gfl9QQUdFX1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJl dHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9 CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOworCXJldHVy biBwdGU7Cit9CiAKIC8qCiAgKiBIdWdlIHB0ZSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBj L2luY2x1ZGUvYXNtL2Jvb2szcy8zMi9wZ3RhYmxlLmgKaW5kZXggN2JmMWZlNzI5N2M2Li4xMGQ5 YTFkMmFjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIv cGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJs ZS5oCkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtwdGUocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0 ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v Ym9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQv cGd0YWJsZS5oCmluZGV4IDRhY2M5NjkwZjU5OS4uYmUwNjM2NTIyZDM2IDEwMDY0NAotLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaAorKysgYi9hcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaApAQCAtNjAwLDcgKzYwMCw3IEBA IHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCiAJcmV0dXJuIF9fcHRl X3JhdyhwdGVfcmF3KHB0ZSkgfCBjcHVfdG9fYmU2NChfUEFHRV9FWEVDKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CS8qCiAJICogd3JpdGUgaW1wbGllcyByZWFkLCBoZW5jZSBzZXQgYm90aApAQCAtMTA3MSw3ICsx MDcxLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpCiAjZGVm aW5lIHBtZF9ta2RpcnR5KHBtZCkJcHRlX3BtZChwdGVfbWtkaXJ0eShwbWRfcHRlKHBtZCkpKQog I2RlZmluZSBwbWRfbWtjbGVhbihwbWQpCXB0ZV9wbWQocHRlX21rY2xlYW4ocG1kX3B0ZShwbWQp KSkKICNkZWZpbmUgcG1kX21reW91bmcocG1kKQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUo cG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRf cHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZtYSkJcHRlX3BtZChwdGVfbWt3 cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKIAogI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09G VF9ESVJUWQogI2RlZmluZSBwbWRfc29mdF9kaXJ0eShwbWQpICAgIHB0ZV9zb2Z0X2RpcnR5KHBt ZF9wdGUocG1kKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wZ3RhYmxl LmgKaW5kZXggZmVjNTZkOTY1ZjAwLi43YmZiY2I5YmE1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9p bmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCB1 bm1hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIHZhKTsKIAlkbyB7IHB0ZV91cGRhdGUobW0s IGFkZHIsIHB0ZXAsIH4wLCAwLCAwKTsgfSB3aGlsZSAoMCkKIAogI2lmbmRlZiBwdGVfbWt3cml0 ZQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCiB7CiAJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKIH0KZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcHRlLTh4eC5oIGIvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wdGUtOHh4LmgKaW5kZXggMWE4OWViZGMz YWNjLi5mMzI0NTBlYjI3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9u b2hhc2gvMzIvcHRlLTh4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcHRlLTh4eC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcHRlX3dy aXRlKHB0ZV90IHB0ZSkKIAogI2RlZmluZSBwdGVfd3JpdGUgcHRlX3dyaXRlCiAKLXN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJl dHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUk8pOwogfQpkaWZmIC0tZ2l0IGEvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaAppbmRleCAyODdlMjU4NjRmZmEuLjU4OTAw OTU1NTg3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9w Z3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxl LmgKQEAgLTg1LDcgKzg1LDcgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKiBwdGVfY2xlYXIg bW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVf dCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVf dmFsKHB0ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGQ4 ZDhkZTBkZWQ5OS4uZmVkMWI4MWZiZTA3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAt MzM4LDcgKzMzOCw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBw dGUpCiAKIC8qIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpICovCiAK LXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9XUklURSk7CiB9CkBAIC02 MjQsOSArNjI0LDkgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBwbWQp CiAJcmV0dXJuIHB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRf dCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewot CXJldHVybiBwdGVfcG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSkpOworCXJldHVybiBwdGVf cG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSwgdm1hKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg cG1kX3QgcG1kX3dycHJvdGVjdChwbWRfdCBwbWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5j bHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAppbmRl eCBjY2RiY2NmZGUxNDguLjU1OGY3ZWVmOWM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1 ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBA IC0xMDIsOSArMTAyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfZGlydHkocHRlX3Qg cHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBo dWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVf bWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXJldHVy biBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVfbWt3cml0ZShwdGUsIHZtYSk7CiB9CiAK IHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWtkaXJ0eShwdGVfdCBwdGUpCmRpZmYgLS1n aXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCBkZWViOTE4Y2FlMWQuLjhmMmM3NDNkYTBlYiAxMDA2NDQKLS0t IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJ cmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAg c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZV9rZXJuZWwocG1kX3QgcG1kKQogCXJldHVy biBwbWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQor c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXJldHVybiBwbWRfbWt3cml0ZV9rZXJuZWwocG1kKTsKIH0KZGlm ZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zaC9pbmNs dWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggMjE5NTJiMDk0NjUwLi45ZjJkY2I5ZWFmYzggMTAw NjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gv aW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0zNTEsNiArMzUxLDEyIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiAKICNkZWZpbmUgUFRFX0JJ VF9GVU5DKGgsZm4sb3ApIFwKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRl KSB7IHB0ZS5wdGVfIyNoIG9wOyByZXR1cm4gcHRlOyB9CisjZGVmaW5lIFBURV9CSVRfRlVOQ19W TUEoaCxmbixvcCkgXAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfIyNmbihwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSBcCit7IFwKKwlwdGUucHRlXyMjaCBvcDsgXAorCXJl dHVybiBwdGU7IFwKK30KIAogI2lmZGVmIENPTkZJR19YMlRMQgogLyoKQEAgLTM1OSwxMSArMzY1 LDExIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRlKSB7IHB0ZS5wdGVf IyNoIG9wOyByZXR1cm4gcHRlOyB9CiAgKiBrZXJuZWwgcGVybWlzc2lvbnMpLCB3ZSBhdHRlbXB0 IHRvIGNvdXBsZSB0aGVtIGEgYml0IG1vcmUgc2FuZWx5IGhlcmUuCiAgKi8KIFBURV9CSVRfRlVO QyhoaWdoLCB3cnByb3RlY3QsICY9IH4oX1BBR0VfRVhUX1VTRVJfV1JJVEUgfCBfUEFHRV9FWFRf S0VSTl9XUklURSkpOwotUFRFX0JJVF9GVU5DKGhpZ2gsIG1rd3JpdGUsIHw9IF9QQUdFX0VYVF9V U0VSX1dSSVRFIHwgX1BBR0VfRVhUX0tFUk5fV1JJVEUpOworUFRFX0JJVF9GVU5DX1ZNQShoaWdo LCBta3dyaXRlLCB8PSBfUEFHRV9FWFRfVVNFUl9XUklURSB8IF9QQUdFX0VYVF9LRVJOX1dSSVRF KTsKIFBURV9CSVRfRlVOQyhoaWdoLCBta2h1Z2UsIHw9IF9QQUdFX1NaSFVHRSk7CiAjZWxzZQog UFRFX0JJVF9GVU5DKGxvdywgd3Jwcm90ZWN0LCAmPSB+X1BBR0VfUlcpOwotUFRFX0JJVF9GVU5D KGxvdywgbWt3cml0ZSwgfD0gX1BBR0VfUlcpOworUFRFX0JJVF9GVU5DX1ZNQShsb3csIG1rd3Jp dGUsIHw9IF9QQUdFX1JXKTsKIFBURV9CSVRfRlVOQyhsb3csIG1raHVnZSwgfD0gX1BBR0VfU1pI VUdFKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFi bGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGQ0MzMw ZTNjNTdhNi4uM2U4ODM2MTc5NDU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNt L3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApA QCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkKIAlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgflNSTU1VX1JFRik7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBTUk1NVV9XUklURSk7CiB9CmRpZmYgLS1naXQg YS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVk ZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDJkYzhkNDY0MTczNC4uYzVjZDVjMDNmNTU3IDEwMDY0 NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3Nw YXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogCXJldHVybiBfX3B0ZSh2YWwpOwog fQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgbWFzazsKIApAQCAt NzU2LDExICs3NTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBw bWQpCiAJcmV0dXJuIF9fcG1kKHB0ZV92YWwocHRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1k X3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV90IHB0ZSA9 IF9fcHRlKHBtZF92YWwocG1kKSk7CiAKLQlwdGUgPSBwdGVfbWt3cml0ZShwdGUpOworCXB0ZSA9 IHB0ZV9ta3dyaXRlKHB0ZSwgdm1hKTsKIAogCXJldHVybiBfX3BtZChwdGVfdmFsKHB0ZSkpOwog fQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3VtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNzBkMTYxOGViMzUuLjk2MzQ3OWMxMzNiNyAxMDA2 NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC91bS9pbmNs dWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIAlyZXR1cm4ocHRlKTsKIH0KIAotc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9t a3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHVu bGlrZWx5KHB0ZV9nZXRfYml0cyhwdGUsICBfUEFHRV9SVykpKQogCQlyZXR1cm4gcHRlOwpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCmluZGV4IDM2MDdmMjU3MmY5ZS4uNjZjNTE0ODA4Mjc2IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0zNjksNyArMzY5LDkgQEAgc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZV9rZXJuZWwocHRlX3QgcHRlKQogCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwg X1BBR0VfUlcpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0 ZSkKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3 cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBw dGVfbWt3cml0ZV9rZXJuZWwocHRlKTsKIH0KQEAgLTQ3MCw3ICs0NzIsNyBAQCBzdGF0aWMgaW5s aW5lIHBtZF90IHBtZF9ta3lvdW5nKHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kX3NldF9mbGFncyhw bWQsIF9QQUdFX0FDQ0VTU0VEKTsKIH0KIAotc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHBtZF9zZXRfZmxhZ3MocG1k LCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmM3YTE0ODg0 YzZjLi5kNzI2MzJkOWM1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI2Miw3 ICsyNjIsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiAJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRB QkxFOyByZXR1cm4gcHRlOyB9CiAKICNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KSBcCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdl bmVyaWMvaHVnZXRsYi5oCmluZGV4IGQ3ZjYzMzVkMzk5OS4uZTg2YzgzMDcyOGRlIDEwMDY0NAot LS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5l cmljL2h1Z2V0bGIuaApAQCAtMjAsOSArMjAsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcgaHVnZV9wdGVfZGlydHkocHRlX3QgcHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0K IAotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewotCXJldHVybiBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVf bWt3cml0ZShwdGUsIHZtYSk7CiB9CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfSFVHRV9QVEVfV1JQ Uk9URUNUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21t LmgKaW5kZXggMWY3OTY2NzgyNGViLi5hZjY1MjQ0NGZiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv bGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTExNjMsNyArMTE2Myw3IEBA IHZvaWQgZnJlZV9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIHN0YXRpYyBpbmxp bmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQogewogCWlmIChsaWtlbHkodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJcHRlID0g cHRlX21rd3JpdGUocHRlKTsKKwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXJldHVy biBwdGU7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVn X3ZtX3BndGFibGUuYwppbmRleCBhZjU5Y2M3YmQzMDcuLjdiYzU1OTI5MDBiYyAxMDA2NDQKLS0t IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwpAQCAt MTA5LDEwICsxMDksMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHB0ZV9iYXNpY190ZXN0cyhzdHJ1 Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KQogCVdBUk5fT04oIXB0ZV9zYW1l KHB0ZSwgcHRlKSk7CiAJV0FSTl9PTighcHRlX3lvdW5nKHB0ZV9ta3lvdW5nKHB0ZV9ta29sZChw dGUpKSkpOwogCVdBUk5fT04oIXB0ZV9kaXJ0eShwdGVfbWtkaXJ0eShwdGVfbWtjbGVhbihwdGUp KSkpOwotCVdBUk5fT04oIXB0ZV93cml0ZShwdGVfbWt3cml0ZShwdGVfd3Jwcm90ZWN0KHB0ZSkp KSk7CisJV0FSTl9PTighcHRlX3dyaXRlKHB0ZV9ta3dyaXRlKHB0ZV93cnByb3RlY3QocHRlKSwg YXJncy0+dm1hKSkpOwogCVdBUk5fT04ocHRlX3lvdW5nKHB0ZV9ta29sZChwdGVfbWt5b3VuZyhw dGUpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV9ta2NsZWFuKHB0ZV9ta2RpcnR5KHB0ZSkp KSk7Ci0JV0FSTl9PTihwdGVfd3JpdGUocHRlX3dycHJvdGVjdChwdGVfbWt3cml0ZShwdGUpKSkp OworCVdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3JpdGUocHRlLCBhcmdz LT52bWEpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV93cnByb3RlY3QocHRlX21rY2xlYW4o cHRlKSkpKTsKIAlXQVJOX09OKCFwdGVfZGlydHkocHRlX3dycHJvdGVjdChwdGVfbWtkaXJ0eShw dGUpKSkpOwogfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwdGVfYWR2 YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBwdGVf bWtjbGVhbihwdGUpOwogCXNldF9wdGVfYXQoYXJncy0+bW0sIGFyZ3MtPnZhZGRyLCBhcmdzLT5w dGVwLCBwdGUpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCXB0ZSA9IHB0ZV9ta3dyaXRl KHB0ZSk7CisJcHRlID0gcHRlX21rd3JpdGUocHRlLCBhcmdzLT52bWEpOwogCXB0ZSA9IHB0ZV9t a2RpcnR5KHB0ZSk7CiAJcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKGFyZ3MtPnZtYSwgYXJncy0+dmFk ZHIsIGFyZ3MtPnB0ZXAsIHB0ZSwgMSk7CiAJcHRlID0gcHRlcF9nZXQoYXJncy0+cHRlcCk7CkBA IC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0 cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpCiAJV0FSTl9PTighcG1kX3Nh bWUocG1kLCBwbWQpKTsKIAlXQVJOX09OKCFwbWRfeW91bmcocG1kX21reW91bmcocG1kX21rb2xk KHBtZCkpKSk7CiAJV0FSTl9PTighcG1kX2RpcnR5KHBtZF9ta2RpcnR5KHBtZF9ta2NsZWFuKHBt ZCkpKSk7Ci0JV0FSTl9PTighcG1kX3dyaXRlKHBtZF9ta3dyaXRlKHBtZF93cnByb3RlY3QocG1k KSkpKTsKKwlXQVJOX09OKCFwbWRfd3JpdGUocG1kX21rd3JpdGUocG1kX3dycHJvdGVjdChwbWQp LCBhcmdzLT52bWEpKSk7CiAJV0FSTl9PTihwbWRfeW91bmcocG1kX21rb2xkKHBtZF9ta3lvdW5n KHBtZCkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX21rY2xlYW4ocG1kX21rZGlydHkocG1k KSkpKTsKLQlXQVJOX09OKHBtZF93cml0ZShwbWRfd3Jwcm90ZWN0KHBtZF9ta3dyaXRlKHBtZCkp KSk7CisJV0FSTl9PTihwbWRfd3JpdGUocG1kX3dycHJvdGVjdChwbWRfbWt3cml0ZShwbWQsIGFy Z3MtPnZtYSkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX3dycHJvdGVjdChwbWRfbWtjbGVh bihwbWQpKSkpOwogCVdBUk5fT04oIXBtZF9kaXJ0eShwbWRfd3Jwcm90ZWN0KHBtZF9ta2RpcnR5 KHBtZCkpKSk7CiAJLyoKQEAgLTI1Myw3ICsyNTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiAJcG1kID0g cG1kX21rY2xlYW4ocG1kKTsKIAlzZXRfcG1kX2F0KGFyZ3MtPm1tLCB2YWRkciwgYXJncy0+cG1k cCwgcG1kKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQlwbWQgPSBwbWRfbWt3cml0ZShw bWQpOworCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgYXJncy0+dm1hKTsKIAlwbWQgPSBwbWRfbWtk aXJ0eShwbWQpOwogCXBtZHBfc2V0X2FjY2Vzc19mbGFncyhhcmdzLT52bWEsIHZhZGRyLCBhcmdz LT5wbWRwLCBwbWQsIDEpOwogCXBtZCA9IFJFQURfT05DRSgqYXJncy0+cG1kcCk7CkBAIC05Mjgs OCArOTI4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0 IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBta19odWdlX3B0ZShwYWdlLCBhcmdz LT5wYWdlX3Byb3QpOwogCiAJV0FSTl9PTighaHVnZV9wdGVfZGlydHkoaHVnZV9wdGVfbWtkaXJ0 eShwdGUpKSk7Ci0JV0FSTl9PTighaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdl X3B0ZV93cnByb3RlY3QocHRlKSkpKTsKLQlXQVJOX09OKGh1Z2VfcHRlX3dyaXRlKGh1Z2VfcHRl X3dycHJvdGVjdChodWdlX3B0ZV9ta3dyaXRlKHB0ZSkpKSk7CisJV0FSTl9PTighaHVnZV9wdGVf d3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV93cnByb3RlY3QocHRlKSwgYXJncy0+dm1h KSkpOworCVdBUk5fT04oaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfd3Jwcm90ZWN0KGh1Z2VfcHRl X21rd3JpdGUocHRlLCBhcmdzLT52bWEpKSkpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfV0FOVF9H RU5FUkFMX0hVR0VUTEIKIAlwdGUgPSBwZm5fcHRlKGFyZ3MtPmZpeGVkX3BtZF9wZm4sIGFyZ3Mt PnBhZ2VfcHJvdCk7CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1v cnkuYwppbmRleCA0ZmM0Mzg1OWU1OWEuLmFhZjgxNTgzODE0NCAxMDA2NDQKLS0tIGEvbW0vaHVn ZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC01NTUsNyArNTU1LDcgQEAgX19z ZXR1cCgidHJhbnNwYXJlbnRfaHVnZXBhZ2U9Iiwgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Up OwogcG1kX3QgbWF5YmVfcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlpZiAobGlrZWx5KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCXBt ZCA9IHBtZF9ta3dyaXRlKHBtZCk7CisJCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgdm1hKTsKIAly ZXR1cm4gcG1kOwogfQogCkBAIC0xNTgwLDcgKzE1ODAsNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2Vf cG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlwbWQgPSBwbWRfbW9kaWZ5KG9s ZHBtZCwgdm1hLT52bV9wYWdlX3Byb3QpOwogCXBtZCA9IHBtZF9ta3lvdW5nKHBtZCk7CiAJaWYg KHdyaXRhYmxlKQotCQlwbWQgPSBwbWRfbWt3cml0ZShwbWQpOworCQlwbWQgPSBwbWRfbWt3cml0 ZShwbWQsIHZtYSk7CiAJc2V0X3BtZF9hdCh2bWEtPnZtX21tLCBoYWRkciwgdm1mLT5wbWQsIHBt ZCk7CiAJdXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCB2bWYtPmFkZHJlc3MsIHZtZi0+cG1kKTsK IAlzcGluX3VubG9jayh2bWYtPnB0bCk7CkBAIC0xOTI2LDcgKzE5MjYsNyBAQCBpbnQgY2hhbmdl X2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLAogCS8qIFNlZSBjaGFuZ2VfcHRlX3JhbmdlKCkuICovCiAJaWYgKChjcF9mbGFncyAmIE1N X0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmICFwbWRfd3JpdGUoZW50cnkpICYmCiAJICAgIGNh bl9jaGFuZ2VfcG1kX3dyaXRhYmxlKHZtYSwgYWRkciwgZW50cnkpKQotCQllbnRyeSA9IHBtZF9t a3dyaXRlKGVudHJ5KTsKKwkJZW50cnkgPSBwbWRfbWt3cml0ZShlbnRyeSwgdm1hKTsKIAogCXJl dCA9IEhQQUdFX1BNRF9OUjsKIAlzZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWQsIGVudHJ5KTsKZGlm ZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAwN2FiY2I2ZWIyMDMu LjZhZjQ3MWJkY2ZmOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIu YwpAQCAtNDkwMCw3ICs0OTAwLDcgQEAgc3RhdGljIHB0ZV90IG1ha2VfaHVnZV9wdGUoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAogCiAJaWYgKHdyaXRhYmxl KSB7CiAJCWVudHJ5ID0gaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV9ta2RpcnR5KG1rX2h1Z2Vf cHRlKHBhZ2UsCi0JCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKKwkJCQkJIHZtYS0+dm1fcGFn ZV9wcm90KSksIHZtYSk7CiAJfSBlbHNlIHsKIAkJZW50cnkgPSBodWdlX3B0ZV93cnByb3RlY3Qo bWtfaHVnZV9wdGUocGFnZSwKIAkJCQkJICAgdm1hLT52bV9wYWdlX3Byb3QpKTsKQEAgLTQ5MTYs NyArNDkxNiw3IEBAIHN0YXRpYyB2b2lkIHNldF9odWdlX3B0ZXBfd3JpdGFibGUoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCiB7CiAJcHRlX3QgZW50cnk7CiAKLQllbnRyeSA9IGh1Z2VfcHRl X21rd3JpdGUoaHVnZV9wdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CisJZW50cnkg PSBodWdlX3B0ZV9ta3dyaXRlKGh1Z2VfcHRlX21rZGlydHkoaHVnZV9wdGVwX2dldChwdGVwKSks IHZtYSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRl cCwgZW50cnksIDEpKQogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiB9 CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGY0NTZmM2I1MDQ5 Yy4uZDA5NzJkMmQ2ZjM2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnku YwpAQCAtNDA2Nyw3ICs0MDY3LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3Bh Z2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJZW50cnkgPSBta19wdGUoJmZvbGlvLT5wYWdlLCB2 bWEtPnZtX3BhZ2VfcHJvdCk7CiAJZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7CiAJaWYg KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtk aXJ0eShlbnRyeSkpOworCQllbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwg dm1hKTsKIAogCXZtZi0+cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCB2bWYt PnBtZCwgdm1mLT5hZGRyZXNzLAogCQkJJnZtZi0+cHRsKTsKQEAgLTQ3NTUsNyArNDc1NSw3IEBA IHN0YXRpYyB2bV9mYXVsdF90IGRvX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlw dGUgPSBwdGVfbW9kaWZ5KG9sZF9wdGUsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAlwdGUgPSBwdGVf bWt5b3VuZyhwdGUpOwogCWlmICh3cml0YWJsZSkKLQkJcHRlID0gcHRlX21rd3JpdGUocHRlKTsK KwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0 KHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSwgb2xkX3B0ZSwgcHRlKTsKIAl1cGRhdGVfbW11 X2NhY2hlKHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSk7CiAJcHRlX3VubWFwX3VubG9jayh2 bWYtPnB0ZSwgdm1mLT5wdGwpOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21t L21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggZDMwYzlkZTYwYjBkLi5kZjNmNWU5ZDVmNzYgMTAwNjQ0 Ci0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmMKKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwpAQCAt NjQ2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVj dCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIAkJfQogCQllbnRyeSA9IG1rX3B0ZShwYWdlLCB2bWEt PnZtX3BhZ2VfcHJvdCk7CiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCi0JCQllbnRy eSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSk7CisJCQllbnRyeSA9IHB0ZV9ta3dy aXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKIAl9CiAKIAlwdGVwID0gcHRlX29mZnNldF9t YXBfbG9jayhtbSwgcG1kcCwgYWRkciwgJnB0bCk7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5j IGIvbW0vbXByb3RlY3QuYwppbmRleCAxZDQ4NDNjOTdjMmEuLjM4MTE2M2E0MWU4OCAxMDA2NDQK LS0tIGEvbW0vbXByb3RlY3QuYworKysgYi9tbS9tcHJvdGVjdC5jCkBAIC0xOTgsNyArMTk4LDcg QEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAog CQkJaWYgKChjcF9mbGFncyAmIE1NX0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmCiAJCQkgICAg IXB0ZV93cml0ZShwdGVudCkgJiYKIAkJCSAgICBjYW5fY2hhbmdlX3B0ZV93cml0YWJsZSh2bWEs IGFkZHIsIHB0ZW50KSkKLQkJCQlwdGVudCA9IHB0ZV9ta3dyaXRlKHB0ZW50KTsKKwkJCQlwdGVu dCA9IHB0ZV9ta3dyaXRlKHB0ZW50LCB2bWEpOwogCiAJCQlwdGVwX21vZGlmeV9wcm90X2NvbW1p dCh2bWEsIGFkZHIsIHB0ZSwgb2xkcHRlLCBwdGVudCk7CiAJCQlpZiAocHRlX25lZWRzX2ZsdXNo KG9sZHB0ZSwgcHRlbnQpKQpkaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJm YXVsdGZkLmMKaW5kZXggNTNjM2Q5MTZmZjY2Li4zZGI2Zjg3YzBhY2EgMTAwNjQ0Ci0tLSBhL21t L3VzZXJmYXVsdGZkLmMKKysrIGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtNzUsNyArNzUsNyBAQCBp bnQgbWZpbGxfYXRvbWljX2luc3RhbGxfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgcG1k X3QgKmRzdF9wbWQsCiAJaWYgKHBhZ2VfaW5fY2FjaGUgJiYgIXZtX3NoYXJlZCkKIAkJd3JpdGFi bGUgPSBmYWxzZTsKIAlpZiAod3JpdGFibGUpCi0JCV9kc3RfcHRlID0gcHRlX21rd3JpdGUoX2Rz dF9wdGUpOworCQlfZHN0X3B0ZSA9IHB0ZV9ta3dyaXRlKF9kc3RfcHRlLCBkc3Rfdm1hKTsKIAlp ZiAod3BfY29weSkKIAkJX2RzdF9wdGUgPSBwdGVfbWt1ZmZkX3dwKF9kc3RfcHRlKTsKIAotLSAK Mi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtc25wcy1hcmMgbWFpbGluZyBsaXN0CmxpbnV4LXNucHMtYXJjQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1z bnBzLWFyYwo= 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 43789C64ED6 for ; Mon, 27 Feb 2023 23:45:50 +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=pxMfQoHjWkZa/2yKEeTNAW50xNR9DrWf9AANqqYX46o=; b=iy2QTTHNKBFXv3 R9CNxyBpE6ihySTgNMpDV9xiltPCIZI2V9u4v3eocuDVh2l9mzSvqY6GwQXixr/XRm7cfhsdIrCOG d3OqKeGIFvefOkPv5jVI4ApHB1ZNk1D4XvmNWiNfyxTWAys1AI5LTTCQs/KfpEVHx+71dU8i6UBnh Ao8mQ4TAUPI9ff5MbqTbf70ueniQI2ejgN5yhZanc7QbyqPsyotxtJAbp8MFe8R0YbHhqjQNkJHid bHBTt/sjjHWoJYwu0y6kGRjU3lCvWFAgD+jpW8JH3MO8IK1hzkd1Gnu7rPlykR98Pwk4LkNt0eGRJ nwneyf2aOf3sWzjmg3TA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pWnBN-00BaOH-6Q; Mon, 27 Feb 2023 23:45:25 +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 1pWm21-00BSc7-2O; Mon, 27 Feb 2023 22:31:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537101; x=1709073101; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=Gd++Ss6FzJgVgLN+e7b1/Qj/XCssBYw8HMemTiMAFCDT2I0YJjp+vXfj s3DuuFNSVTpwLhkOWNYB+Y7YfxXN4B/SE0pdCLezc0JQLQ3T+lzThgBtU mkyCpB9DX90G2IhFoUFaNjYqmLhpj9ZRi8/rueexwktdAMpr6dgbAE9Lu PrYhte6wFSJjeai4GZl6L055aLyn62Amjzl2y3ZyYT6PTBuFgpwNgvqYo wxzY9fM3mUgsRwFi/wbkZYaJxv95pKLxzYOHUKkAwPzDnJMFDzWKyhDP7 aP9hiIs+a73LZ0xEvgu+kdcIC/f6A1j9OMWHD/lZ0J6P1KefdAOmxUr8D Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="313657340" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="313657340" 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:22 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10634"; a="848024498" X-IronPort-AV: E=Sophos;i="5.98,220,1673942400"; d="scan'208";a="848024498" 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:16 -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-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-Id: <20230227222957.24501-14-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_143141_236167_D79B9E4E X-CRM114-Status: GOOD ( 20.85 ) 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 VGhlIHg4NiBDb250cm9sLWZsb3cgRW5mb3JjZW1lbnQgVGVjaG5vbG9neSAoQ0VUKSBmZWF0dXJl IGluY2x1ZGVzIGEgbmV3CnR5cGUgb2YgbWVtb3J5IGNhbGxlZCBzaGFkb3cgc3RhY2suIFRoaXMg c2hhZG93IHN0YWNrIG1lbW9yeSBoYXMgc29tZQp1bnVzdWFsIHByb3BlcnRpZXMsIHdoaWNoIHJl cXVpcmVzIHNvbWUgY29yZSBtbSBjaGFuZ2VzIHRvIGZ1bmN0aW9uCnByb3Blcmx5LgoKT25lIG9m IHRoZXNlIHVudXN1YWwgcHJvcGVydGllcyBpcyB0aGF0IHNoYWRvdyBzdGFjayBtZW1vcnkgaXMg d3JpdGFibGUsCmJ1dCBvbmx5IGluIGxpbWl0ZWQgd2F5cy4gVGhlc2UgbGltaXRzIGFyZSBhcHBs aWVkIHZpYSBhIHNwZWNpZmljIFBURQpiaXQgY29tYmluYXRpb24uIE5ldmVydGhlbGVzcywgdGhl IG1lbW9yeSBpcyB3cml0YWJsZSwgYW5kIGNvcmUgbW0gY29kZQp3aWxsIG5lZWQgdG8gYXBwbHkg dGhlIHdyaXRhYmxlIHBlcm1pc3Npb25zIGluIHRoZSB0eXBpY2FsIHBhdGhzIHRoYXQKY2FsbCBw dGVfbWt3cml0ZSgpLgoKSW4gYWRkaXRpb24gdG8gVk1fV1JJVEUsIHRoZSBzaGFkb3cgc3RhY2sg Vk1BJ3Mgd2lsbCBoYXZlIGEgZmxhZyBkZW5vdGluZwp0aGF0IHRoZXkgYXJlIHNwZWNpYWwgc2hh ZG93IHN0YWNrIGZsYXZvciBvZiB3cml0YWJsZSBtZW1vcnkuIFNvIG1ha2UKcHRlX21rd3JpdGUo KSB0YWtlIGEgVk1BLCBzbyB0aGF0IHRoZSB4ODYgaW1wbGVtZW50YXRpb24gb2YgaXQgY2FuIGtu b3cgdG8KY3JlYXRlIHJlZ3VsYXIgd3JpdGFibGUgbWVtb3J5IG9yIHNoYWRvdyBzdGFjayBtZW1v cnkuCgpBcHBseSB0aGUgc2FtZSBjaGFuZ2VzIGZvciBwbWRfbWt3cml0ZSgpIGFuZCBodWdlX3B0 ZV9ta3dyaXRlKCkuCgpObyBmdW5jdGlvbmFsIGNoYW5nZS4KCkNjOiBsaW51eC1kb2NAdmdlci5r ZXJuZWwub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1hbHBo YUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNucHMtYXJjQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgtY3NreUB2 Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LWhleGFnb25Admdlci5rZXJuZWwub3JnCkNjOiBsaW51 eC1pYTY0QHZnZXIua2VybmVsLm9yZwpDYzogbG9vbmdhcmNoQGxpc3RzLmxpbnV4LmRldgpDYzog bGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwpDYzogTWljaGFsIFNpbWVrIDxtb25zdHJA bW9uc3RyLmV1PgpDYzogRGluaCBOZ3V5ZW4gPGRpbmd1eWVuQGtlcm5lbC5vcmc+CkNjOiBsaW51 eC1taXBzQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtb3BlbnJpc2NAdmdlci5rZXJuZWwub3Jn CkNjOiBsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eHBwYy1kZXZAbGlzdHMu b3psYWJzLm9yZwpDYzogbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgt czM5MEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXNoQHZnZXIua2VybmVsLm9yZwpDYzogc3Bh cmNsaW51eEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcK Q2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogbGludXgtYXJjaEB2Z2VyLmtl cm5lbC5vcmcKQ2M6IGxpbnV4LW1tQGt2YWNrLm9yZwpUZXN0ZWQtYnk6IFBlbmdmZWkgWHUgPHBl bmdmZWkueHVAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IEpvaG4gQWxsZW4gPGpvaG4uYWxsZW5AYW1k LmNvbT4KVGVzdGVkLWJ5OiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KQWNrZWQt Ynk6IE1pa2UgUmFwb3BvcnQgKElCTSkgPHJwcHRAa2VybmVsLm9yZz4KQWNrZWQtYnk6IE1pY2hh ZWwgRWxsZXJtYW4gPG1wZUBlbGxlcm1hbi5pZC5hdT4KQWNrZWQtYnk6IERhdmlkIEhpbGRlbmJy YW5kIDxkYXZpZEByZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogS2VlcyBDb29rIDxrZWVzY29va0Bj aHJvbWl1bS5vcmc+ClN1Z2dlc3RlZC1ieTogRGF2aWQgSGlsZGVuYnJhbmQgPGRhdmlkQHJlZGhh dC5jb20+ClNpZ25lZC1vZmYtYnk6IFJpY2sgRWRnZWNvbWJlIDxyaWNrLnAuZWRnZWNvbWJlQGlu dGVsLmNvbT4KCi0tLQpIaSBOb24teDg2IEFyY2jigJlzLAoKeDg2IGhhcyBhIGZlYXR1cmUgdGhh dCBhbGxvd3MgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHNwZWNpYWwgdHlwZSBvZgp3cml0YWJsZSBt ZW1vcnkgKHNoYWRvdyBzdGFjaykgdGhhdCBpcyBvbmx5IHdyaXRhYmxlIGluIGxpbWl0ZWQgc3Bl Y2lmaWMKd2F5cy4gUHJldmlvdXNseSwgY2hhbmdlcyB3ZXJlIHByb3Bvc2VkIHRvIGNvcmUgTU0g Y29kZSB0byB0ZWFjaCBpdCB0bwpkZWNpZGUgd2hlbiB0byBjcmVhdGUgbm9ybWFsbHkgd3JpdGFi bGUgbWVtb3J5IG9yIHRoZSBzcGVjaWFsIHNoYWRvdyBzdGFjawp3cml0YWJsZSBtZW1vcnksIGJ1 dCBEYXZpZCBIaWxkZW5icmFuZCBzdWdnZXN0ZWRbMF0gdG8gY2hhbmdlCnBYWF9ta3dyaXRlKCkg dG8gdGFrZSBhIFZNQSwgc28gYXdhcmVuZXNzIG9mIHNoYWRvdyBzdGFjayBtZW1vcnkgY2FuIGJl Cm1vdmVkIGludG8geDg2IGNvZGUuCgpTaW5jZSBwWFhfbWt3cml0ZSgpIGlzIGRlZmluZWQgaW4g ZXZlcnkgYXJjaCwgaXQgcmVxdWlyZXMgc29tZSB0cmVlLXdpZGUKY2hhbmdlcy4gU28gdGhhdCBp cyB3aHkgeW91IGFyZSBzZWVpbmcgc29tZSBwYXRjaGVzIG91dCBvZiBhIGJpZyB4ODYKc2VyaWVz IHBvcCB1cCBpbiB5b3VyIGFyY2ggbWFpbGluZyBsaXN0LiBUaGVyZSBpcyBubyBmdW5jdGlvbmFs IGNoYW5nZS4KQWZ0ZXIgdGhpcyByZWZhY3RvciwgdGhlIHNoYWRvdyBzdGFjayBzZXJpZXMgZ29l cyBvbiB0byB1c2UgdGhlIGFyY2gKaGVscGVycyB0byBwdXNoIHNoYWRvdyBzdGFjayBtZW1vcnkg ZGV0YWlscyBpbnNpZGUgYXJjaC94ODYuCgpUZXN0aW5nIHdhcyBqdXN0IDAtZGF5IGJ1aWxkIHRl c3RpbmcuCgpIb3BlZnVsbHkgdGhhdCBpcyBlbm91Z2ggY29udGV4dC4gVGhhbmtzIQoKWzBdIGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMGUyOWEyZDAtMDhkOC1iY2Q2LWZmMjYtNGJlYTBl NDAzN2IwQHJlZGhhdC5jb20vI3QKCnY2OgogLSBOZXcgcGF0Y2gKLS0tCiBEb2N1bWVudGF0aW9u L21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdCAgICB8ICA5ICsrKysrKy0tLQogYXJjaC9hbHBo YS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvYXJj L2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvYXJjL2lu Y2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oICAgIHwgIDcgKysrKysrLQogYXJjaC9hcm0v aW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCAgICAgICAgfCAgNyArKysrKystCiBhcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgICB8ICAyICstCiBhcmNoL2FybTY0 L2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAgICB8ICA0ICsrLS0KIGFyY2gvY3NreS9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaGV4YWdvbi9p bmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgIHwgIDIgKy0KIGFyY2gvaWE2NC9pbmNsdWRl L2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAgIHwgIDIgKy0KIGFyY2gvbG9vbmdhcmNoL2luY2x1 ZGUvYXNtL3BndGFibGUuaCAgICAgICAgIHwgIDQgKystLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNt L21jZl9wZ3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21v dG9yb2xhX3BndGFibGUuaCAgICAgfCAgNiArKysrKy0KIGFyY2gvbTY4ay9pbmNsdWRlL2FzbS9z dW4zX3BndGFibGUuaCAgICAgICAgIHwgIDYgKysrKystCiBhcmNoL21pY3JvYmxhemUvaW5jbHVk ZS9hc20vcGd0YWJsZS5oICAgICAgICB8ICAyICstCiBhcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0 YWJsZS5oICAgICAgICAgICAgICB8ICA2ICsrKy0tLQogYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgICAgfCAgMiArLQogYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9w Z3RhYmxlLmggICAgICAgICAgfCAgMiArLQogYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJs ZS5oICAgICAgICAgICAgfCAgNiArKysrKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29r M3MvMzIvcGd0YWJsZS5oIHwgIDIgKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3Mv NjQvcGd0YWJsZS5oIHwgIDQgKystLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8z Mi9wZ3RhYmxlLmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9w dGUtOHh4LmggfCAgMiArLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3Rh YmxlLmggfCAgMiArLQogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAg ICAgfCAgNiArKystLS0KIGFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmggICAgICAgICAg ICAgIHwgIDQgKystLQogYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgfCAgNCArKy0tCiBhcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCAgICAgICAgICAg ICB8IDEwICsrKysrKysrLS0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oICAg ICAgICAgIHwgIDIgKy0KIGFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oICAgICAg ICAgIHwgIDYgKysrLS0tCiBhcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaCAgICAgICAgICAg ICAgICB8ICAyICstCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggICAgICAgICAgICAg ICB8ICA2ICsrKystLQogYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oICAgICAgICAg ICAgfCAgMiArLQogaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmggICAgICAgICAgICAgICAg fCAgNCArKy0tCiBpbmNsdWRlL2xpbnV4L21tLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAyICstCiBtbS9kZWJ1Z192bV9wZ3RhYmxlLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE2 ICsrKysrKysrLS0tLS0tLS0KIG1tL2h1Z2VfbWVtb3J5LmMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDYgKysrLS0tCiBtbS9odWdldGxiLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA0ICsrLS0KIG1tL21lbW9yeS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDQgKystLQogbW0vbWlncmF0ZV9kZXZpY2UuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMiArLQogbW0vbXByb3RlY3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMiArLQogbW0vdXNlcmZhdWx0ZmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMiArLQogNDIgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMu cnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QKaW5kZXggMzBk OWEwOWYwMWY0Li43OGFjM2ZmMmZlMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vYXJj aF9wZ3RhYmxlX2hlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxl X2hlbHBlcnMucnN0CkBAIC00Niw3ICs0Niw4IEBAIFBURSBQYWdlIFRhYmxlIEhlbHBlcnMKICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHB0ZV9ta2NsZWFuICAgICAgICAgICAgICAgfCBDcmVh dGVzIGEgY2xlYW4gUFRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKLXwgcHRlX21rd3JpdGUgICAgICAgICAgICAgICB8IENyZWF0ZXMgYSB3 cml0YWJsZSBQVEUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHB0ZV9ta3dyaXRlICAg ICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUFRFIG9mIHRoZSB0eXBlIHNwZWNpZmll ZCBieSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIFZNQS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CiB8IHB0ZV93cnByb3RlY3QgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVk IFBURSAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEx OCw3ICsxMTksOCBAQCBQTUQgUGFnZSBUYWJsZSBIZWxwZXJzCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwogfCBwbWRfbWtjbGVhbiAgICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIGNsZWFuIFBNRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18 IHBtZF9ta3dyaXRlICAgICAgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFibGUgUE1EICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorfCBwbWRfbWt3cml0ZSAgICAgICAgICAgICAgIHwgQ3Jl YXRlcyBhIHdyaXRhYmxlIFBNRCBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgIHwKK3wgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHRoZSBWTUEuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBwbWRfd3Jwcm90ZWN0 ICAgICAgICAgICAgIHwgQ3JlYXRlcyBhIHdyaXRlIHByb3RlY3RlZCBQTUQgICAgICAgICAgICAg ICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMjIsNyArMjI0LDggQEAgSHVn ZVRMQiBQYWdlIFRhYmxlIEhlbHBlcnMKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2Vf cHRlX21rZGlydHkgICAgICAgICAgfCBDcmVhdGVzIGEgZGlydHkgSHVnZVRMQiAgICAgICAgICAg ICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaHVnZV9wdGVfbWt3 cml0ZSAgICAgICAgICB8IENyZWF0ZXMgYSB3cml0YWJsZSBIdWdlVExCICAgICAgICAgICAgICAg ICAgICAgICB8Cit8IGh1Z2VfcHRlX21rd3JpdGUgICAgICAgICAgfCBDcmVhdGVzIGEgd3JpdGFi bGUgSHVnZVRMQiBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgfAorfCAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgYnkgdGhlIFZNQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGh1Z2VfcHRlX3dycHJvdGVjdCAgICAgICAg fCBDcmVhdGVzIGEgd3JpdGUgcHJvdGVjdGVkIEh1Z2VUTEIgICAgICAgICAgICAgICAgfAogKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYmE0M2Ni ODQxZDE5Li5mYjVkMjA3YzJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20v cGd0YWJsZS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNTYs OSArMjU2LDEzIEBAIGV4dGVybiBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJl dHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsKIGV4dGVybiBpbmxpbmUgcHRlX3Qg cHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0ZPVzsgcmV0 dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCXsg cHRlX3ZhbChwdGUpICY9IH4oX19ESVJUWV9CSVRTKTsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+KF9fQUND RVNTX0JJVFMpOyByZXR1cm4gcHRlOyB9Ci1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRl KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsgcmV0dXJuIHB0ZTsgfQog ZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUp IHw9IF9fRElSVFlfQklUUzsgcmV0dXJuIHB0ZTsgfQogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVf bWt5b3VuZyhwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9fQUNDRVNTX0JJVFM7IHJldHVy biBwdGU7IH0KK2V4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0ZPVzsK KwlyZXR1cm4gcHRlOworfQogCiAvKgogICogVGhlIHNtcF9ybWIoKSBpbiB0aGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgdG8gb3JkZXIgdGhlIGxvYWQgb2YKZGlmZiAtLWdpdCBh L2FyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9o dWdlcGFnZS5oCmluZGV4IDUwMDFiNzk2ZmI4ZC4uMjIzYTk2OTY3MTg4IDEwMDY0NAotLS0gYS9h cmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNt L2h1Z2VwYWdlLmgKQEAgLTIxLDcgKzIxLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwdGVfcG1k KHB0ZV90IHB0ZSkKIH0KIAogI2RlZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVf d3Jwcm90ZWN0KHBtZF9wdGUocG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3Bt ZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZt YSkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKICNkZWZpbmUgcG1k X21rZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9ta2RpcnR5KHBtZF9wdGUocG1kKSkpCiAjZGVmaW5l IHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBtZCkpKQogI2RlZmlu ZSBwbWRfbWt5b3VuZyhwbWQpCXB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSkKZGlm ZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2Mi5oIGIvYXJj aC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLWFyY3YyLmgKaW5kZXggNmU5ZjhjYTZkNmEx Li5hNWI4YmM5NTUwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUt Yml0cy1hcmN2Mi5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy1hcmN2 Mi5oCkBAIC04Nyw3ICs4Nyw2IEBACiAKIFBURV9CSVRfRlVOQyhta25vdHByZXNlbnQsICAgICAm PSB+KF9QQUdFX1BSRVNFTlQpKTsKIFBURV9CSVRfRlVOQyh3cnByb3RlY3QsCSY9IH4oX1BBR0Vf V1JJVEUpKTsKLVBURV9CSVRfRlVOQyhta3dyaXRlLAl8PSAoX1BBR0VfV1JJVEUpKTsKIFBURV9C SVRfRlVOQyhta2NsZWFuLAkmPSB+KF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtkaXJ0 eSwJfD0gKF9QQUdFX0RJUlRZKSk7CiBQVEVfQklUX0ZVTkMobWtvbGQsCSY9IH4oX1BBR0VfQUND RVNTRUQpKTsKQEAgLTk1LDYgKzk0LDEyIEBAIFBURV9CSVRfRlVOQyhta3lvdW5nLAl8PSAoX1BB R0VfQUNDRVNTRUQpKTsKIFBURV9CSVRfRlVOQyhta3NwZWNpYWwsCXw9IChfUEFHRV9TUEVDSUFM KSk7CiBQVEVfQklUX0ZVTkMobWtodWdlLAl8PSAoX1BBR0VfSFdfU1opKTsKIAorc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQoreworCXB0ZV92YWwocHRlKSB8PSAoX1BBR0VfV1JJVEUpOworCXJldHVybiBwdGU7Cit9 CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5l d3Byb3QpCiB7CiAJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykg fCBwZ3Byb3RfdmFsKG5ld3Byb3QpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNt L3BndGFibGUtM2xldmVsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5o CmluZGV4IDEwNjA0OTc5MTUwMC4uZGYwNzFhODA3NjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9p bmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Bn dGFibGUtM2xldmVsLmgKQEAgLTIwMiwxMSArMjAyLDE2IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qg cG1kXyMjZm4ocG1kX3QgcG1kKSB7IHBtZF92YWwocG1kKSBvcDsgcmV0dXJuIHBtZDsgfQogCiBQ TURfQklUX0ZVTkMod3Jwcm90ZWN0LAl8PSBMX1BNRF9TRUNUX1JET05MWSk7CiBQTURfQklUX0ZV TkMobWtvbGQsCSY9IH5QTURfU0VDVF9BRik7Ci1QTURfQklUX0ZVTkMobWt3cml0ZSwgICAmPSB+ TF9QTURfU0VDVF9SRE9OTFkpOwogUE1EX0JJVF9GVU5DKG1rZGlydHksICAgfD0gTF9QTURfU0VD VF9ESVJUWSk7CiBQTURfQklUX0ZVTkMobWtjbGVhbiwgICAmPSB+TF9QTURfU0VDVF9ESVJUWSk7 CiBQTURfQklUX0ZVTkMobWt5b3VuZywgICB8PSBQTURfU0VDVF9BRik7CiAKK3N0YXRpYyBpbmxp bmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlwbWRfdmFsKHBtZCkgfD0gTF9QTURfU0VDVF9SRE9OTFk7CisJcmV0dXJuIHBtZDsK K30KKwogI2RlZmluZSBwbWRfbWtodWdlKHBtZCkJCShfX3BtZChwbWRfdmFsKHBtZCkgJiB+UE1E X1RBQkxFX0JJVCkpCiAKICNkZWZpbmUgcG1kX3BmbihwbWQpCQkoKChwbWRfdmFsKHBtZCkgJiBQ TURfTUFTSykgJiBQSFlTX01BU0spID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK aW5kZXggYTU4Y2NiYjQwNmFkLi4zOWFkMWFlMTMwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK QEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRl X3QgcHRlKQogCXJldHVybiBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JET05MWSkp OwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlyZXR1cm4gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KExfUFRFX1JE T05MWSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgg Yi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjY2NmODg4NTc5MmUuLjkx M2JmMzcwZjc0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4Nyw3ICsxODcsNyBA QCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0 dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUp CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpA QCAtNDkyLDcgKzQ5Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90 IHBtZCkKICNkZWZpbmUgcG1kX2NvbnQocG1kKQkJcHRlX2NvbnQocG1kX3B0ZShwbWQpKQogI2Rl ZmluZSBwbWRfd3Jwcm90ZWN0KHBtZCkJcHRlX3BtZChwdGVfd3Jwcm90ZWN0KHBtZF9wdGUocG1k KSkpCiAjZGVmaW5lIHBtZF9ta29sZChwbWQpCQlwdGVfcG1kKHB0ZV9ta29sZChwbWRfcHRlKHBt ZCkpKQotI2RlZmluZSBwbWRfbWt3cml0ZShwbWQpCXB0ZV9wbWQocHRlX21rd3JpdGUocG1kX3B0 ZShwbWQpKSkKKyNkZWZpbmUgcG1kX21rd3JpdGUocG1kLCB2bWEpCXB0ZV9wbWQocHRlX21rd3Jp dGUocG1kX3B0ZShwbWQpLCAodm1hKSkpCiAjZGVmaW5lIHBtZF9ta2NsZWFuKHBtZCkJcHRlX3Bt ZChwdGVfbWtjbGVhbihwbWRfcHRlKHBtZCkpKQogI2RlZmluZSBwbWRfbWtkaXJ0eShwbWQpCXB0 ZV9wbWQocHRlX21rZGlydHkocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX21reW91bmcocG1k KQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUocG1kKSkpCmRpZmYgLS1naXQgYS9hcmNoL2Nz a3kvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jc2t5L2luY2x1ZGUvYXNtL3BndGFibGUu aAppbmRleCBkNDA0MjQ5NWZlYmMuLmMyZjkyYzk5MWUzNyAxMDA2NDQKLS0tIGEvYXJjaC9jc2t5 L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2Nza3kvaW5jbHVkZS9hc20vcGd0YWJs ZS5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9X UklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQpCmRpZmYgLS1naXQgYS9h cmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9oZXhhZ29uL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCA1OTM5MzYxM2QwODYuLjE0YWI5Yzc4OWMwZSAxMDA2NDQKLS0t IGEvYXJjaC9oZXhhZ29uL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2hleGFnb24v aW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDAsNyArMzAwLDcgQEAgc3RhdGljIGlubGluZSBw dGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIH0KIAogLyogcHRlX21rd3JpdGUgLSBtYXJr IHBhZ2UgYXMgd3JpdGFibGUgKi8KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsK IAlyZXR1cm4gcHRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUu aCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjFjOTdlMzFhMjhhLi5m ODc5ZGQ2MjZkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgK KysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjY4LDcgKzI2OCw3IEBA IGlhNjRfcGh5c19hZGRyX3ZhbGlkICh1bnNpZ25lZCBsb25nIGFkZHIpCiAgKiBhY2Nlc3Mgcmln aHRzOgogICovCiAjZGVmaW5lIHB0ZV93cnByb3RlY3QocHRlKQkoX19wdGUocHRlX3ZhbChwdGUp ICYgfl9QQUdFX0FSX1JXKSkKLSNkZWZpbmUgcHRlX21rd3JpdGUocHRlKQkoX19wdGUocHRlX3Zh bChwdGUpIHwgX1BBR0VfQVJfUlcpKQorI2RlZmluZSBwdGVfbWt3cml0ZShwdGUsIHZtYSkJKF9f cHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0FSX1JXKSkKICNkZWZpbmUgcHRlX21rb2xkKHB0ZSkJ CShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfQSkpCiAjZGVmaW5lIHB0ZV9ta3lvdW5nKHB0 ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0EpKQogI2RlZmluZSBwdGVfbWtjbGVhbihw dGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfRCkpCmRpZmYgLS1naXQgYS9hcmNoL2xv b25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmgKaW5kZXggZDI4ZmI5ZGJlYzU5Li5lYmY2NDVmNDAyOTggMTAwNjQ0Ci0tLSBh L2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2xvb25nYXJj aC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX01P RElGSUVEKQpAQCAtNDkwLDcgKzQ5MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShw bWRfdCBwbWQpCiAJcmV0dXJuICEhKHBtZF92YWwocG1kKSAmIF9QQUdFX1dSSVRFKTsKIH0KIAot c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5l IHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp CiB7CiAJcG1kX3ZhbChwbWQpIHw9IF9QQUdFX1dSSVRFOwogCWlmIChwbWRfdmFsKHBtZCkgJiBf UEFHRV9NT0RJRklFRCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0 YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ3RhYmxlLmgKaW5kZXggMTM3NDFj MTI0NWUxLi4zN2Q3N2UwNTUwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9t Y2ZfcGd0YWJsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCkBA IC0yMTEsNyArMjExLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRl KQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRl X3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV92YWwocHRlKSB8PSBDRl9QQUdFX1dSSVRB QkxFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90 b3JvbGFfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUu aAppbmRleCBlYzBkYzE5YWI4MzQuLmM0ZThlYjc2Mjg2ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9h c20vbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0xNTUsNyArMTU1LDYgQEAgc3RhdGljIGlubGluZSBp bnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FD Q0VTU0VEOwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBw dGVfdmFsKHB0ZSkgfD0gX1BBR0VfUk9OTFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRElS VFk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0 aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0g fl9QQUdFX1JPTkxZOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2Rp cnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWtub2NhY2hlKHB0ZV90IHB0ZSkKQEAgLTE2OCw2ICsxNjcsMTEgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUpCiAJcHRlX3ZhbChwdGUpID0gKHB0ZV92 YWwocHRlKSAmIF9DQUNIRU1BU0swNDApIHwgbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZTsKIAly ZXR1cm4gcHRlOwogfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0Vf Uk9OTFk7CisJcmV0dXJuIHB0ZTsKK30KIAogI2RlZmluZSBzd2FwcGVyX3BnX2RpciBrZXJuZWxf cGdfZGlyCiBleHRlcm4gcGdkX3Qga2VybmVsX3BnX2RpclsxMjhdOwpkaWZmIC0tZ2l0IGEvYXJj aC9tNjhrL2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNt L3N1bjNfcGd0YWJsZS5oCmluZGV4IGU1ODJiMDQ4NGE1NS4uMmEwNmJlYTUxYTFlIDEwMDY0NAot LS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3VuM19wZ3RhYmxlLmgKKysrIGIvYXJjaC9tNjhr L2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oCkBAIC0xNDMsMTAgKzE0MywxNCBAQCBzdGF0aWMg aW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYg U1VOM19QQUdFX0FDQ0VTUwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90 IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHB0ZV92YWwo cHRlKSAmPSB+U1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5TVU4zX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfV1JJVEVBQkxFOyByZXR1cm4g cHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVf dmFsKHB0ZSkgfD0gU1VOM19QQUdFX01PRElGSUVEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gU1VOM19Q QUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta25v Y2FjaGUocHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0VfTk9DQUNIRTsgcmV0 dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXB0ZV92YWwocHRlKSB8PSBTVU4zX1BBR0Vf V1JJVEVBQkxFOworCXJldHVybiBwdGU7Cit9CiAvLyB1c2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2Fj aGVzIHdvcmsuLi4KIC8vc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjYWNoZShwdGVfdCBwdGUp CXsgcHRlX3ZhbChwdGUpICY9IFNVTjNfUEFHRV9OT0NBQ0hFOyByZXR1cm4gcHRlOyB9CiAvLyB1 bnRpbCB0aGVuLCB1c2U6CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBk MWI4MjcyYWJjZDkuLjViODNlODJmOGQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0 YWJsZS5oCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFk KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1VTRVI7IHJldHVybiBwdGU7 IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpIFwKIAl7IHB0ZV92 YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIFwKK3N0YXRpYyBpbmxpbmUgcHRl X3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkgXAog CXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgXAogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X0RJUlRZOyByZXR1cm4gcHRlOyB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20v cGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA3OTEzODli ZjNjMTIuLjA2ZWZkNTY3MTQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMDksNyAr MzA5LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVy biBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQor c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXB0ZS5wdGVfbG93IHw9IF9QQUdFX1dSSVRFOwogCWlmIChwdGUu cHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXB0ZV92YWwocHRlKSB8PSBfUEFHRV9XUklURTsKIAlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0Vf TU9ESUZJRUQpCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfd3Jw cm90ZWN0KHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90 IHBtZF9ta3dyaXRlKHBtZF90IHBtZCkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUo cG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwbWRfdmFsKHBtZCkg fD0gX1BBR0VfV1JJVEU7CiAJaWYgKHBtZF92YWwocG1kKSAmIF9QQUdFX01PRElGSUVEKQpkaWZm IC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL25pb3MyL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwZjVjMjU2NGU5ZjUuLmVkZDQ1ODUxOGUwZSAxMDA2 NDQKLS0tIGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9uaW9z Mi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcHRl X3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOwogCXJldHVybiBwdGU7CmRpZmYgLS1naXQgYS9hcmNo L29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9h c20vcGd0YWJsZS5oCmluZGV4IDNlYjliOTU1NWQwZC4uZmQ0MGFlYzE4OWQxIDEwMDY0NAotLS0g YS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL29wZW5yaXNj L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbmxpbmUg cHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlwdGVf dmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKZGlmZiAtLWdpdCBhL2FyY2gv cGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAppbmRleCBlMjk1MGY1ZGI3YzkuLjg5ZjYyMTM3ZTY3ZiAxMDA2NDQKLS0tIGEvYXJj aC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUv YXNtL3BndGFibGUuaApAQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0 ZV9ta29sZChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0 dQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFs KHB0ZSkgJj0gfl9QQUdFX1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJl dHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlu bGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdF X1dSSVRFOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwo cHRlX3QgcHRlKQl7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9 CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRFOworCXJldHVy biBwdGU7Cit9CiAKIC8qCiAgKiBIdWdlIHB0ZSBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBj L2luY2x1ZGUvYXNtL2Jvb2szcy8zMi9wZ3RhYmxlLmgKaW5kZXggN2JmMWZlNzI5N2M2Li4xMGQ5 YTFkMmFjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIv cGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvMzIvcGd0YWJs ZS5oCkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtwdGUocHRl X3QgcHRlKQogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3Jp dGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0 ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v Ym9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQv cGd0YWJsZS5oCmluZGV4IDRhY2M5NjkwZjU5OS4uYmUwNjM2NTIyZDM2IDEwMDY0NAotLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaAorKysgYi9hcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaApAQCAtNjAwLDcgKzYwMCw3IEBA IHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCiAJcmV0dXJuIF9fcHRl X3JhdyhwdGVfcmF3KHB0ZSkgfCBjcHVfdG9fYmU2NChfUEFHRV9FWEVDKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CS8qCiAJICogd3JpdGUgaW1wbGllcyByZWFkLCBoZW5jZSBzZXQgYm90aApAQCAtMTA3MSw3ICsx MDcxLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpCiAjZGVm aW5lIHBtZF9ta2RpcnR5KHBtZCkJcHRlX3BtZChwdGVfbWtkaXJ0eShwbWRfcHRlKHBtZCkpKQog I2RlZmluZSBwbWRfbWtjbGVhbihwbWQpCXB0ZV9wbWQocHRlX21rY2xlYW4ocG1kX3B0ZShwbWQp KSkKICNkZWZpbmUgcG1kX21reW91bmcocG1kKQlwdGVfcG1kKHB0ZV9ta3lvdW5nKHBtZF9wdGUo cG1kKSkpCi0jZGVmaW5lIHBtZF9ta3dyaXRlKHBtZCkJcHRlX3BtZChwdGVfbWt3cml0ZShwbWRf cHRlKHBtZCkpKQorI2RlZmluZSBwbWRfbWt3cml0ZShwbWQsIHZtYSkJcHRlX3BtZChwdGVfbWt3 cml0ZShwbWRfcHRlKHBtZCksICh2bWEpKSkKIAogI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09G VF9ESVJUWQogI2RlZmluZSBwbWRfc29mdF9kaXJ0eShwbWQpICAgIHB0ZV9zb2Z0X2RpcnR5KHBt ZF9wdGUocG1kKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wZ3RhYmxl LmgKaW5kZXggZmVjNTZkOTY1ZjAwLi43YmZiY2I5YmE1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9p bmNsdWRlL2FzbS9ub2hhc2gvMzIvcGd0YWJsZS5oCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCB1 bm1hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIHZhKTsKIAlkbyB7IHB0ZV91cGRhdGUobW0s IGFkZHIsIHB0ZXAsIH4wLCAwLCAwKTsgfSB3aGlsZSAoMCkKIAogI2lmbmRlZiBwdGVfbWt3cml0 ZQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCiB7CiAJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKTsKIH0KZGlmZiAt LWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvcHRlLTh4eC5oIGIvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9wdGUtOHh4LmgKaW5kZXggMWE4OWViZGMz YWNjLi5mMzI0NTBlYjI3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9u b2hhc2gvMzIvcHRlLTh4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gv MzIvcHRlLTh4eC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcHRlX3dy aXRlKHB0ZV90IHB0ZSkKIAogI2RlZmluZSBwdGVfd3JpdGUgcHRlX3dyaXRlCiAKLXN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJl dHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfUk8pOwogfQpkaWZmIC0tZ2l0IGEvYXJj aC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaAppbmRleCAyODdlMjU4NjRmZmEuLjU4OTAw OTU1NTg3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9w Z3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxl LmgKQEAgLTg1LDcgKzg1LDcgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKiBwdGVfY2xlYXIg bW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRl X21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVf dCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBfX3B0ZShwdGVf dmFsKHB0ZSkgfCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGQ4 ZDhkZTBkZWQ5OS4uZmVkMWI4MWZiZTA3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAt MzM4LDcgKzMzOCw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBw dGUpCiAKIC8qIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpICovCiAK LXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQogewogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9XUklURSk7CiB9CkBAIC02 MjQsOSArNjI0LDkgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBwbWQp CiAJcmV0dXJuIHB0ZV9wbWQocHRlX21reW91bmcocG1kX3B0ZShwbWQpKSk7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRf dCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewot CXJldHVybiBwdGVfcG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSkpOworCXJldHVybiBwdGVf cG1kKHB0ZV9ta3dyaXRlKHBtZF9wdGUocG1kKSwgdm1hKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg cG1kX3QgcG1kX3dycHJvdGVjdChwbWRfdCBwbWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5j bHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAppbmRl eCBjY2RiY2NmZGUxNDguLjU1OGY3ZWVmOWM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1 ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBA IC0xMDIsOSArMTAyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfZGlydHkocHRlX3Qg cHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBo dWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVf bWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXJldHVy biBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVfbWt3cml0ZShwdGUsIHZtYSk7CiB9CiAK IHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWtkaXJ0eShwdGVfdCBwdGUpCmRpZmYgLS1n aXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUv YXNtL3BndGFibGUuaAppbmRleCBkZWViOTE4Y2FlMWQuLjhmMmM3NDNkYTBlYiAxMDA2NDQKLS0t IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlX2tlcm5lbChwdGVfdCBwdGUpCiAJcmV0dXJuIHB0ZTsKIH0KIAotc3RhdGlj IGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJ cmV0dXJuIHB0ZV9ta3dyaXRlX2tlcm5lbChwdGUpOwogfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAg c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZV9rZXJuZWwocG1kX3QgcG1kKQogCXJldHVy biBwbWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQor c3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewogCXJldHVybiBwbWRfbWt3cml0ZV9rZXJuZWwocG1kKTsKIH0KZGlm ZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zaC9pbmNs dWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggMjE5NTJiMDk0NjUwLi45ZjJkY2I5ZWFmYzggMTAw NjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gv aW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0zNTEsNiArMzUxLDEyIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiAKICNkZWZpbmUgUFRFX0JJ VF9GVU5DKGgsZm4sb3ApIFwKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRl KSB7IHB0ZS5wdGVfIyNoIG9wOyByZXR1cm4gcHRlOyB9CisjZGVmaW5lIFBURV9CSVRfRlVOQ19W TUEoaCxmbixvcCkgXAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfIyNmbihwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSBcCit7IFwKKwlwdGUucHRlXyMjaCBvcDsgXAorCXJl dHVybiBwdGU7IFwKK30KIAogI2lmZGVmIENPTkZJR19YMlRMQgogLyoKQEAgLTM1OSwxMSArMzY1 LDExIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlXyMjZm4ocHRlX3QgcHRlKSB7IHB0ZS5wdGVf IyNoIG9wOyByZXR1cm4gcHRlOyB9CiAgKiBrZXJuZWwgcGVybWlzc2lvbnMpLCB3ZSBhdHRlbXB0 IHRvIGNvdXBsZSB0aGVtIGEgYml0IG1vcmUgc2FuZWx5IGhlcmUuCiAgKi8KIFBURV9CSVRfRlVO QyhoaWdoLCB3cnByb3RlY3QsICY9IH4oX1BBR0VfRVhUX1VTRVJfV1JJVEUgfCBfUEFHRV9FWFRf S0VSTl9XUklURSkpOwotUFRFX0JJVF9GVU5DKGhpZ2gsIG1rd3JpdGUsIHw9IF9QQUdFX0VYVF9V U0VSX1dSSVRFIHwgX1BBR0VfRVhUX0tFUk5fV1JJVEUpOworUFRFX0JJVF9GVU5DX1ZNQShoaWdo LCBta3dyaXRlLCB8PSBfUEFHRV9FWFRfVVNFUl9XUklURSB8IF9QQUdFX0VYVF9LRVJOX1dSSVRF KTsKIFBURV9CSVRfRlVOQyhoaWdoLCBta2h1Z2UsIHw9IF9QQUdFX1NaSFVHRSk7CiAjZWxzZQog UFRFX0JJVF9GVU5DKGxvdywgd3Jwcm90ZWN0LCAmPSB+X1BBR0VfUlcpOwotUFRFX0JJVF9GVU5D KGxvdywgbWt3cml0ZSwgfD0gX1BBR0VfUlcpOworUFRFX0JJVF9GVU5DX1ZNQShsb3csIG1rd3Jp dGUsIHw9IF9QQUdFX1JXKTsKIFBURV9CSVRfRlVOQyhsb3csIG1raHVnZSwgfD0gX1BBR0VfU1pI VUdFKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFi bGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGQ0MzMw ZTNjNTdhNi4uM2U4ODM2MTc5NDU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNt L3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApA QCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0 ZSkKIAlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgflNSTU1VX1JFRik7CiB9CiAKLXN0YXRp YyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVf dCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewog CXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBTUk1NVV9XUklURSk7CiB9CmRpZmYgLS1naXQg YS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVk ZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDJkYzhkNDY0MTczNC4uYzVjZDVjMDNmNTU3IDEwMDY0 NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3Nw YXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQogCXJldHVybiBfX3B0ZSh2YWwpOwog fQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRpYyBp bmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgbWFzazsKIApAQCAt NzU2LDExICs3NTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt5b3VuZyhwbWRfdCBw bWQpCiAJcmV0dXJuIF9fcG1kKHB0ZV92YWwocHRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1k X3QgcG1kX21rd3JpdGUocG1kX3QgcG1kKQorc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXB0ZV90IHB0ZSA9 IF9fcHRlKHBtZF92YWwocG1kKSk7CiAKLQlwdGUgPSBwdGVfbWt3cml0ZShwdGUpOworCXB0ZSA9 IHB0ZV9ta3dyaXRlKHB0ZSwgdm1hKTsKIAogCXJldHVybiBfX3BtZChwdGVfdmFsKHB0ZSkpOwog fQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3VtL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNzBkMTYxOGViMzUuLjk2MzQ3OWMxMzNiNyAxMDA2 NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC91bS9pbmNs dWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIAlyZXR1cm4ocHRlKTsKIH0KIAotc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9t a3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKHVu bGlrZWx5KHB0ZV9nZXRfYml0cyhwdGUsICBfUEFHRV9SVykpKQogCQlyZXR1cm4gcHRlOwpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCmluZGV4IDM2MDdmMjU3MmY5ZS4uNjZjNTE0ODA4Mjc2IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcGd0YWJsZS5oCkBAIC0zNjksNyArMzY5LDkgQEAgc3RhdGljIGlubGluZSBwdGVfdCBw dGVfbWt3cml0ZV9rZXJuZWwocHRlX3QgcHRlKQogCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwg X1BBR0VfUlcpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0 ZSkKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3 cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiBw dGVfbWt3cml0ZV9rZXJuZWwocHRlKTsKIH0KQEAgLTQ3MCw3ICs0NzIsNyBAQCBzdGF0aWMgaW5s aW5lIHBtZF90IHBtZF9ta3lvdW5nKHBtZF90IHBtZCkKIAlyZXR1cm4gcG1kX3NldF9mbGFncyhw bWQsIF9QQUdFX0FDQ0VTU0VEKTsKIH0KIAotc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWt3cml0 ZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3dyaXRlKHBtZF90IHBtZCwg c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJcmV0dXJuIHBtZF9zZXRfZmxhZ3MocG1k LCBfUEFHRV9SVyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmM3YTE0ODg0 YzZjLi5kNzI2MzJkOWM1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Bn dGFibGUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI2Miw3 ICsyNjIsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIAl7 IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiAJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0Vf QUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUo cHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1dSSVRB QkxFOyByZXR1cm4gcHRlOyB9CiAKICNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KSBcCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdl bmVyaWMvaHVnZXRsYi5oCmluZGV4IGQ3ZjYzMzVkMzk5OS4uZTg2YzgzMDcyOGRlIDEwMDY0NAot LS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5l cmljL2h1Z2V0bGIuaApAQCAtMjAsOSArMjAsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcgaHVnZV9wdGVfZGlydHkocHRlX3QgcHRlKQogCXJldHVybiBwdGVfZGlydHkocHRlKTsKIH0K IAotc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3N0YXRp YyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQogewotCXJldHVybiBwdGVfbWt3cml0ZShwdGUpOworCXJldHVybiBwdGVf bWt3cml0ZShwdGUsIHZtYSk7CiB9CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfSFVHRV9QVEVfV1JQ Uk9URUNUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21t LmgKaW5kZXggMWY3OTY2NzgyNGViLi5hZjY1MjQ0NGZiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv bGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTExNjMsNyArMTE2Myw3IEBA IHZvaWQgZnJlZV9jb21wb3VuZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIHN0YXRpYyBpbmxp bmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQogewogCWlmIChsaWtlbHkodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJcHRlID0g cHRlX21rd3JpdGUocHRlKTsKKwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXJldHVy biBwdGU7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVn X3ZtX3BndGFibGUuYwppbmRleCBhZjU5Y2M3YmQzMDcuLjdiYzU1OTI5MDBiYyAxMDA2NDQKLS0t IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jCisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuYwpAQCAt MTA5LDEwICsxMDksMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHB0ZV9iYXNpY190ZXN0cyhzdHJ1 Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KQogCVdBUk5fT04oIXB0ZV9zYW1l KHB0ZSwgcHRlKSk7CiAJV0FSTl9PTighcHRlX3lvdW5nKHB0ZV9ta3lvdW5nKHB0ZV9ta29sZChw dGUpKSkpOwogCVdBUk5fT04oIXB0ZV9kaXJ0eShwdGVfbWtkaXJ0eShwdGVfbWtjbGVhbihwdGUp KSkpOwotCVdBUk5fT04oIXB0ZV93cml0ZShwdGVfbWt3cml0ZShwdGVfd3Jwcm90ZWN0KHB0ZSkp KSk7CisJV0FSTl9PTighcHRlX3dyaXRlKHB0ZV9ta3dyaXRlKHB0ZV93cnByb3RlY3QocHRlKSwg YXJncy0+dm1hKSkpOwogCVdBUk5fT04ocHRlX3lvdW5nKHB0ZV9ta29sZChwdGVfbWt5b3VuZyhw dGUpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV9ta2NsZWFuKHB0ZV9ta2RpcnR5KHB0ZSkp KSk7Ci0JV0FSTl9PTihwdGVfd3JpdGUocHRlX3dycHJvdGVjdChwdGVfbWt3cml0ZShwdGUpKSkp OworCVdBUk5fT04ocHRlX3dyaXRlKHB0ZV93cnByb3RlY3QocHRlX21rd3JpdGUocHRlLCBhcmdz LT52bWEpKSkpOwogCVdBUk5fT04ocHRlX2RpcnR5KHB0ZV93cnByb3RlY3QocHRlX21rY2xlYW4o cHRlKSkpKTsKIAlXQVJOX09OKCFwdGVfZGlydHkocHRlX3dycHJvdGVjdChwdGVfbWtkaXJ0eShw dGUpKSkpOwogfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwdGVfYWR2 YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBwdGVf bWtjbGVhbihwdGUpOwogCXNldF9wdGVfYXQoYXJncy0+bW0sIGFyZ3MtPnZhZGRyLCBhcmdzLT5w dGVwLCBwdGUpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCXB0ZSA9IHB0ZV9ta3dyaXRl KHB0ZSk7CisJcHRlID0gcHRlX21rd3JpdGUocHRlLCBhcmdzLT52bWEpOwogCXB0ZSA9IHB0ZV9t a2RpcnR5KHB0ZSk7CiAJcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKGFyZ3MtPnZtYSwgYXJncy0+dmFk ZHIsIGFyZ3MtPnB0ZXAsIHB0ZSwgMSk7CiAJcHRlID0gcHRlcF9nZXQoYXJncy0+cHRlcCk7CkBA IC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0 cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpCiAJV0FSTl9PTighcG1kX3Nh bWUocG1kLCBwbWQpKTsKIAlXQVJOX09OKCFwbWRfeW91bmcocG1kX21reW91bmcocG1kX21rb2xk KHBtZCkpKSk7CiAJV0FSTl9PTighcG1kX2RpcnR5KHBtZF9ta2RpcnR5KHBtZF9ta2NsZWFuKHBt ZCkpKSk7Ci0JV0FSTl9PTighcG1kX3dyaXRlKHBtZF9ta3dyaXRlKHBtZF93cnByb3RlY3QocG1k KSkpKTsKKwlXQVJOX09OKCFwbWRfd3JpdGUocG1kX21rd3JpdGUocG1kX3dycHJvdGVjdChwbWQp LCBhcmdzLT52bWEpKSk7CiAJV0FSTl9PTihwbWRfeW91bmcocG1kX21rb2xkKHBtZF9ta3lvdW5n KHBtZCkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX21rY2xlYW4ocG1kX21rZGlydHkocG1k KSkpKTsKLQlXQVJOX09OKHBtZF93cml0ZShwbWRfd3Jwcm90ZWN0KHBtZF9ta3dyaXRlKHBtZCkp KSk7CisJV0FSTl9PTihwbWRfd3JpdGUocG1kX3dycHJvdGVjdChwbWRfbWt3cml0ZShwbWQsIGFy Z3MtPnZtYSkpKSk7CiAJV0FSTl9PTihwbWRfZGlydHkocG1kX3dycHJvdGVjdChwbWRfbWtjbGVh bihwbWQpKSkpOwogCVdBUk5fT04oIXBtZF9kaXJ0eShwbWRfd3Jwcm90ZWN0KHBtZF9ta2RpcnR5 KHBtZCkpKSk7CiAJLyoKQEAgLTI1Myw3ICsyNTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1k X2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiAJcG1kID0g cG1kX21rY2xlYW4ocG1kKTsKIAlzZXRfcG1kX2F0KGFyZ3MtPm1tLCB2YWRkciwgYXJncy0+cG1k cCwgcG1kKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQlwbWQgPSBwbWRfbWt3cml0ZShw bWQpOworCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgYXJncy0+dm1hKTsKIAlwbWQgPSBwbWRfbWtk aXJ0eShwbWQpOwogCXBtZHBfc2V0X2FjY2Vzc19mbGFncyhhcmdzLT52bWEsIHZhZGRyLCBhcmdz LT5wbWRwLCBwbWQsIDEpOwogCXBtZCA9IFJFQURfT05DRSgqYXJncy0+cG1kcCk7CkBAIC05Mjgs OCArOTI4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0 IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwdGUgPSBta19odWdlX3B0ZShwYWdlLCBhcmdz LT5wYWdlX3Byb3QpOwogCiAJV0FSTl9PTighaHVnZV9wdGVfZGlydHkoaHVnZV9wdGVfbWtkaXJ0 eShwdGUpKSk7Ci0JV0FSTl9PTighaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdl X3B0ZV93cnByb3RlY3QocHRlKSkpKTsKLQlXQVJOX09OKGh1Z2VfcHRlX3dyaXRlKGh1Z2VfcHRl X3dycHJvdGVjdChodWdlX3B0ZV9ta3dyaXRlKHB0ZSkpKSk7CisJV0FSTl9PTighaHVnZV9wdGVf d3JpdGUoaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV93cnByb3RlY3QocHRlKSwgYXJncy0+dm1h KSkpOworCVdBUk5fT04oaHVnZV9wdGVfd3JpdGUoaHVnZV9wdGVfd3Jwcm90ZWN0KGh1Z2VfcHRl X21rd3JpdGUocHRlLCBhcmdzLT52bWEpKSkpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfV0FOVF9H RU5FUkFMX0hVR0VUTEIKIAlwdGUgPSBwZm5fcHRlKGFyZ3MtPmZpeGVkX3BtZF9wZm4sIGFyZ3Mt PnBhZ2VfcHJvdCk7CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1v cnkuYwppbmRleCA0ZmM0Mzg1OWU1OWEuLmFhZjgxNTgzODE0NCAxMDA2NDQKLS0tIGEvbW0vaHVn ZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC01NTUsNyArNTU1LDcgQEAgX19z ZXR1cCgidHJhbnNwYXJlbnRfaHVnZXBhZ2U9Iiwgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Up OwogcG1kX3QgbWF5YmVfcG1kX21rd3JpdGUocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKIHsKIAlpZiAobGlrZWx5KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCXBt ZCA9IHBtZF9ta3dyaXRlKHBtZCk7CisJCXBtZCA9IHBtZF9ta3dyaXRlKHBtZCwgdm1hKTsKIAly ZXR1cm4gcG1kOwogfQogCkBAIC0xNTgwLDcgKzE1ODAsNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2Vf cG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlwbWQgPSBwbWRfbW9kaWZ5KG9s ZHBtZCwgdm1hLT52bV9wYWdlX3Byb3QpOwogCXBtZCA9IHBtZF9ta3lvdW5nKHBtZCk7CiAJaWYg KHdyaXRhYmxlKQotCQlwbWQgPSBwbWRfbWt3cml0ZShwbWQpOworCQlwbWQgPSBwbWRfbWt3cml0 ZShwbWQsIHZtYSk7CiAJc2V0X3BtZF9hdCh2bWEtPnZtX21tLCBoYWRkciwgdm1mLT5wbWQsIHBt ZCk7CiAJdXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCB2bWYtPmFkZHJlc3MsIHZtZi0+cG1kKTsK IAlzcGluX3VubG9jayh2bWYtPnB0bCk7CkBAIC0xOTI2LDcgKzE5MjYsNyBAQCBpbnQgY2hhbmdl X2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLAogCS8qIFNlZSBjaGFuZ2VfcHRlX3JhbmdlKCkuICovCiAJaWYgKChjcF9mbGFncyAmIE1N X0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmICFwbWRfd3JpdGUoZW50cnkpICYmCiAJICAgIGNh bl9jaGFuZ2VfcG1kX3dyaXRhYmxlKHZtYSwgYWRkciwgZW50cnkpKQotCQllbnRyeSA9IHBtZF9t a3dyaXRlKGVudHJ5KTsKKwkJZW50cnkgPSBwbWRfbWt3cml0ZShlbnRyeSwgdm1hKTsKIAogCXJl dCA9IEhQQUdFX1BNRF9OUjsKIAlzZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWQsIGVudHJ5KTsKZGlm ZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAwN2FiY2I2ZWIyMDMu LjZhZjQ3MWJkY2ZmOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIu YwpAQCAtNDkwMCw3ICs0OTAwLDcgQEAgc3RhdGljIHB0ZV90IG1ha2VfaHVnZV9wdGUoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAogCiAJaWYgKHdyaXRhYmxl KSB7CiAJCWVudHJ5ID0gaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV9ta2RpcnR5KG1rX2h1Z2Vf cHRlKHBhZ2UsCi0JCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKKwkJCQkJIHZtYS0+dm1fcGFn ZV9wcm90KSksIHZtYSk7CiAJfSBlbHNlIHsKIAkJZW50cnkgPSBodWdlX3B0ZV93cnByb3RlY3Qo bWtfaHVnZV9wdGUocGFnZSwKIAkJCQkJICAgdm1hLT52bV9wYWdlX3Byb3QpKTsKQEAgLTQ5MTYs NyArNDkxNiw3IEBAIHN0YXRpYyB2b2lkIHNldF9odWdlX3B0ZXBfd3JpdGFibGUoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCiB7CiAJcHRlX3QgZW50cnk7CiAKLQllbnRyeSA9IGh1Z2VfcHRl X21rd3JpdGUoaHVnZV9wdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CisJZW50cnkg PSBodWdlX3B0ZV9ta3dyaXRlKGh1Z2VfcHRlX21rZGlydHkoaHVnZV9wdGVwX2dldChwdGVwKSks IHZtYSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRl cCwgZW50cnksIDEpKQogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiB9 CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGY0NTZmM2I1MDQ5 Yy4uZDA5NzJkMmQ2ZjM2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnku YwpAQCAtNDA2Nyw3ICs0MDY3LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3Bh Z2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJZW50cnkgPSBta19wdGUoJmZvbGlvLT5wYWdlLCB2 bWEtPnZtX3BhZ2VfcHJvdCk7CiAJZW50cnkgPSBwdGVfc3dfbWt5b3VuZyhlbnRyeSk7CiAJaWYg KHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtk aXJ0eShlbnRyeSkpOworCQllbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwg dm1hKTsKIAogCXZtZi0+cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCB2bWYt PnBtZCwgdm1mLT5hZGRyZXNzLAogCQkJJnZtZi0+cHRsKTsKQEAgLTQ3NTUsNyArNDc1NSw3IEBA IHN0YXRpYyB2bV9mYXVsdF90IGRvX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlw dGUgPSBwdGVfbW9kaWZ5KG9sZF9wdGUsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAlwdGUgPSBwdGVf bWt5b3VuZyhwdGUpOwogCWlmICh3cml0YWJsZSkKLQkJcHRlID0gcHRlX21rd3JpdGUocHRlKTsK KwkJcHRlID0gcHRlX21rd3JpdGUocHRlLCB2bWEpOwogCXB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0 KHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSwgb2xkX3B0ZSwgcHRlKTsKIAl1cGRhdGVfbW11 X2NhY2hlKHZtYSwgdm1mLT5hZGRyZXNzLCB2bWYtPnB0ZSk7CiAJcHRlX3VubWFwX3VubG9jayh2 bWYtPnB0ZSwgdm1mLT5wdGwpOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21t L21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggZDMwYzlkZTYwYjBkLi5kZjNmNWU5ZDVmNzYgMTAwNjQ0 Ci0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmMKKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwpAQCAt NjQ2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVj dCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIAkJfQogCQllbnRyeSA9IG1rX3B0ZShwYWdlLCB2bWEt PnZtX3BhZ2VfcHJvdCk7CiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCi0JCQllbnRy eSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSk7CisJCQllbnRyeSA9IHB0ZV9ta3dy aXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKIAl9CiAKIAlwdGVwID0gcHRlX29mZnNldF9t YXBfbG9jayhtbSwgcG1kcCwgYWRkciwgJnB0bCk7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5j IGIvbW0vbXByb3RlY3QuYwppbmRleCAxZDQ4NDNjOTdjMmEuLjM4MTE2M2E0MWU4OCAxMDA2NDQK LS0tIGEvbW0vbXByb3RlY3QuYworKysgYi9tbS9tcHJvdGVjdC5jCkBAIC0xOTgsNyArMTk4LDcg QEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAog CQkJaWYgKChjcF9mbGFncyAmIE1NX0NQX1RSWV9DSEFOR0VfV1JJVEFCTEUpICYmCiAJCQkgICAg IXB0ZV93cml0ZShwdGVudCkgJiYKIAkJCSAgICBjYW5fY2hhbmdlX3B0ZV93cml0YWJsZSh2bWEs IGFkZHIsIHB0ZW50KSkKLQkJCQlwdGVudCA9IHB0ZV9ta3dyaXRlKHB0ZW50KTsKKwkJCQlwdGVu dCA9IHB0ZV9ta3dyaXRlKHB0ZW50LCB2bWEpOwogCiAJCQlwdGVwX21vZGlmeV9wcm90X2NvbW1p dCh2bWEsIGFkZHIsIHB0ZSwgb2xkcHRlLCBwdGVudCk7CiAJCQlpZiAocHRlX25lZWRzX2ZsdXNo KG9sZHB0ZSwgcHRlbnQpKQpkaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJm YXVsdGZkLmMKaW5kZXggNTNjM2Q5MTZmZjY2Li4zZGI2Zjg3YzBhY2EgMTAwNjQ0Ci0tLSBhL21t L3VzZXJmYXVsdGZkLmMKKysrIGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtNzUsNyArNzUsNyBAQCBp bnQgbWZpbGxfYXRvbWljX2luc3RhbGxfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgcG1k X3QgKmRzdF9wbWQsCiAJaWYgKHBhZ2VfaW5fY2FjaGUgJiYgIXZtX3NoYXJlZCkKIAkJd3JpdGFi bGUgPSBmYWxzZTsKIAlpZiAod3JpdGFibGUpCi0JCV9kc3RfcHRlID0gcHRlX21rd3JpdGUoX2Rz dF9wdGUpOworCQlfZHN0X3B0ZSA9IHB0ZV9ta3dyaXRlKF9kc3RfcHRlLCBkc3Rfdm1hKTsKIAlp ZiAod3BfY29weSkKIAkJX2RzdF9wdGUgPSBwdGVfbWt1ZmZkX3dwKF9kc3RfcHRlKTsKIAotLSAK Mi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rick Edgecombe Date: Mon, 27 Feb 2023 22:29:29 +0000 Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Message-Id: <20230227222957.24501-14-rick.p.edgecombe@intel.com> List-Id: References: <20230227222957.24501-1-rick.p.edgecombe@intel.com> In-Reply-To: <20230227222957.24501-1-rick.p.edgecombe@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable 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-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.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 unusual properties is that shadow stack memory is writable, but only in limited ways. These limits are applied via a specific PTE bit combination. Nevertheless, the memory is writable, and core mm code will need to apply the writable permissions in the typical paths that call pte_mkwrite(). In addition to VM_WRITE, the shadow stack VMA's will have a flag denoting that they are special shadow stack flavor of writable memory. So make pte_mkwrite() take a VMA, so that the x86 implementation of it can know to create regular writable memory or shadow stack memory. Apply the same changes for pmd_mkwrite() and huge_pte_mkwrite(). No functional change. Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-alpha@vger.kernel.org Cc: linux-snps-arc@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-csky@vger.kernel.org Cc: linux-hexagon@vger.kernel.org Cc: linux-ia64@vger.kernel.org Cc: loongarch@lists.linux.dev Cc: linux-m68k@lists.linux-m68k.org Cc: Michal Simek Cc: Dinh Nguyen Cc: linux-mips@vger.kernel.org Cc: linux-openrisc@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-um@lists.infradead.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: Michael Ellerman Acked-by: David Hildenbrand Reviewed-by: Kees Cook Suggested-by: David Hildenbrand Signed-off-by: Rick Edgecombe --- Hi Non-x86 Arch=E2=80=99s, 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@redha= t.com/#t v6: - New patch --- Documentation/mm/arch_pgtable_helpers.rst | 9 ++++++--- arch/alpha/include/asm/pgtable.h | 6 +++++- arch/arc/include/asm/hugepage.h | 2 +- arch/arc/include/asm/pgtable-bits-arcv2.h | 7 ++++++- arch/arm/include/asm/pgtable-3level.h | 7 ++++++- arch/arm/include/asm/pgtable.h | 2 +- arch/arm64/include/asm/pgtable.h | 4 ++-- arch/csky/include/asm/pgtable.h | 2 +- arch/hexagon/include/asm/pgtable.h | 2 +- arch/ia64/include/asm/pgtable.h | 2 +- arch/loongarch/include/asm/pgtable.h | 4 ++-- arch/m68k/include/asm/mcf_pgtable.h | 2 +- arch/m68k/include/asm/motorola_pgtable.h | 6 +++++- arch/m68k/include/asm/sun3_pgtable.h | 6 +++++- arch/microblaze/include/asm/pgtable.h | 2 +- arch/mips/include/asm/pgtable.h | 6 +++--- arch/nios2/include/asm/pgtable.h | 2 +- arch/openrisc/include/asm/pgtable.h | 2 +- arch/parisc/include/asm/pgtable.h | 6 +++++- arch/powerpc/include/asm/book3s/32/pgtable.h | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 4 ++-- arch/powerpc/include/asm/nohash/32/pgtable.h | 2 +- arch/powerpc/include/asm/nohash/32/pte-8xx.h | 2 +- arch/powerpc/include/asm/nohash/64/pgtable.h | 2 +- arch/riscv/include/asm/pgtable.h | 6 +++--- arch/s390/include/asm/hugetlb.h | 4 ++-- arch/s390/include/asm/pgtable.h | 4 ++-- arch/sh/include/asm/pgtable_32.h | 10 ++++++++-- arch/sparc/include/asm/pgtable_32.h | 2 +- arch/sparc/include/asm/pgtable_64.h | 6 +++--- arch/um/include/asm/pgtable.h | 2 +- arch/x86/include/asm/pgtable.h | 6 ++++-- arch/xtensa/include/asm/pgtable.h | 2 +- include/asm-generic/hugetlb.h | 4 ++-- include/linux/mm.h | 2 +- mm/debug_vm_pgtable.c | 16 ++++++++-------- mm/huge_memory.c | 6 +++--- mm/hugetlb.c | 4 ++-- mm/memory.c | 4 ++-- mm/migrate_device.c | 2 +- mm/mprotect.c | 2 +- mm/userfaultfd.c | 2 +- 42 files changed, 106 insertions(+), 69 deletions(-) diff --git a/Documentation/mm/arch_pgtable_helpers.rst b/Documentation/mm/a= rch_pgtable_helpers.rst index 30d9a09f01f4..78ac3ff2fe1d 100644 --- a/Documentation/mm/arch_pgtable_helpers.rst +++ b/Documentation/mm/arch_pgtable_helpers.rst @@ -46,7 +46,8 @@ PTE Page Table Helpers +---------------------------+---------------------------------------------= -----+ | pte_mkclean | Creates a clean PTE = | +---------------------------+---------------------------------------------= -----+ -| pte_mkwrite | Creates a writable PTE = | +| pte_mkwrite | Creates a writable PTE of the type specified= by | +| | the VMA. = | +---------------------------+---------------------------------------------= -----+ | pte_wrprotect | Creates a write protected PTE = | +---------------------------+---------------------------------------------= -----+ @@ -118,7 +119,8 @@ PMD Page Table Helpers +---------------------------+---------------------------------------------= -----+ | pmd_mkclean | Creates a clean PMD = | +---------------------------+---------------------------------------------= -----+ -| pmd_mkwrite | Creates a writable PMD = | +| pmd_mkwrite | Creates a writable PMD of the type specified= by | +| | the VMA. = | +---------------------------+---------------------------------------------= -----+ | pmd_wrprotect | Creates a write protected PMD = | +---------------------------+---------------------------------------------= -----+ @@ -222,7 +224,8 @@ HugeTLB Page Table Helpers +---------------------------+---------------------------------------------= -----+ | huge_pte_mkdirty | Creates a dirty HugeTLB = | +---------------------------+---------------------------------------------= -----+ -| huge_pte_mkwrite | Creates a writable HugeTLB = | +| huge_pte_mkwrite | Creates a writable HugeTLB of the type speci= fied | +| | by the VMA. = | +---------------------------+---------------------------------------------= -----+ | huge_pte_wrprotect | Creates a write protected HugeTLB = | +---------------------------+---------------------------------------------= -----+ diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgta= ble.h index ba43cb841d19..fb5d207c2a89 100644 --- a/arch/alpha/include/asm/pgtable.h +++ b/arch/alpha/include/asm/pgtable.h @@ -256,9 +256,13 @@ extern inline int pte_young(pte_t pte) { return pte_v= al(pte) & _PAGE_ACCESSED; extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |=3D _PAGE_FOW= ; return pte; } extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~(__DIRTY_B= ITS); return pte; } extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~(__ACCESS_BI= TS); return pte; } -extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &=3D ~_PAGE_FOW;= return pte; } extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D __DIRTY_BIT= S; return pte; } extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D __ACCESS_BI= TS; return pte; } +extern inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &=3D ~_PAGE_FOW; + return pte; +} =20 /* * The smp_rmb() in the following functions are required to order the load= of diff --git a/arch/arc/include/asm/hugepage.h b/arch/arc/include/asm/hugepag= e.h index 5001b796fb8d..223a96967188 100644 --- a/arch/arc/include/asm/hugepage.h +++ b/arch/arc/include/asm/hugepage.h @@ -21,7 +21,7 @@ static inline pmd_t pte_pmd(pte_t pte) } =20 #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/arc/include/asm/pgtable-bits-arcv2.h b/arch/arc/include/a= sm/pgtable-bits-arcv2.h index 6e9f8ca6d6a1..a5b8bc955015 100644 --- a/arch/arc/include/asm/pgtable-bits-arcv2.h +++ b/arch/arc/include/asm/pgtable-bits-arcv2.h @@ -87,7 +87,6 @@ =20 PTE_BIT_FUNC(mknotpresent, &=3D ~(_PAGE_PRESENT)); PTE_BIT_FUNC(wrprotect, &=3D ~(_PAGE_WRITE)); -PTE_BIT_FUNC(mkwrite, |=3D (_PAGE_WRITE)); PTE_BIT_FUNC(mkclean, &=3D ~(_PAGE_DIRTY)); PTE_BIT_FUNC(mkdirty, |=3D (_PAGE_DIRTY)); PTE_BIT_FUNC(mkold, &=3D ~(_PAGE_ACCESSED)); @@ -95,6 +94,12 @@ PTE_BIT_FUNC(mkyoung, |=3D (_PAGE_ACCESSED)); PTE_BIT_FUNC(mkspecial, |=3D (_PAGE_SPECIAL)); PTE_BIT_FUNC(mkhuge, |=3D (_PAGE_HW_SZ)); =20 +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D (_PAGE_WRITE); + return pte; +} + static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { return __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)); diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/p= gtable-3level.h index 106049791500..df071a807610 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -202,11 +202,16 @@ static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd= ) op; return pmd; } =20 PMD_BIT_FUNC(wrprotect, |=3D L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkold, &=3D ~PMD_SECT_AF); -PMD_BIT_FUNC(mkwrite, &=3D ~L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkdirty, |=3D L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkclean, &=3D ~L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkyoung, |=3D PMD_SECT_AF); =20 +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) +{ + pmd_val(pmd) |=3D L_PMD_SECT_RDONLY; + return pmd; +} + #define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT)) =20 #define pmd_pfn(pmd) (((pmd_val(pmd) & PMD_MASK) & PHYS_MASK) >> PAGE_SHI= FT) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index a58ccbb406ad..39ad1ae1308d 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -227,7 +227,7 @@ static inline pte_t pte_wrprotect(pte_t pte) return set_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return clear_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgta= ble.h index cccf8885792e..913bf370f74a 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -187,7 +187,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -492,7 +492,7 @@ static inline int pmd_trans_huge(pmd_t pmd) #define pmd_cont(pmd) pte_cont(pmd_pte(pmd)) #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtabl= e.h index d4042495febc..c2f92c991e37 100644 --- a/arch/csky/include/asm/pgtable.h +++ b/arch/csky/include/asm/pgtable.h @@ -176,7 +176,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) diff --git a/arch/hexagon/include/asm/pgtable.h b/arch/hexagon/include/asm/= pgtable.h index 59393613d086..14ab9c789c0e 100644 --- a/arch/hexagon/include/asm/pgtable.h +++ b/arch/hexagon/include/asm/pgtable.h @@ -300,7 +300,7 @@ static inline pte_t pte_wrprotect(pte_t pte) } =20 /* pte_mkwrite - mark page as writable */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtabl= e.h index 21c97e31a28a..f879dd626da6 100644 --- a/arch/ia64/include/asm/pgtable.h +++ b/arch/ia64/include/asm/pgtable.h @@ -268,7 +268,7 @@ ia64_phys_addr_valid (unsigned long addr) * access rights: */ #define pte_wrprotect(pte) (__pte(pte_val(pte) & ~_PAGE_AR_RW)) -#define pte_mkwrite(pte) (__pte(pte_val(pte) | _PAGE_AR_RW)) +#define pte_mkwrite(pte, vma) (__pte(pte_val(pte) | _PAGE_AR_RW)) #define pte_mkold(pte) (__pte(pte_val(pte) & ~_PAGE_A)) #define pte_mkyoung(pte) (__pte(pte_val(pte) | _PAGE_A)) #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/= asm/pgtable.h index d28fb9dbec59..ebf645f40298 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -390,7 +390,7 @@ static inline pte_t pte_mkdirty(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -490,7 +490,7 @@ static inline int pmd_write(pmd_t pmd) return !!(pmd_val(pmd) & _PAGE_WRITE); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |=3D _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/m68k/include/asm/mcf_pgtable.h b/arch/m68k/include/asm/mc= f_pgtable.h index 13741c1245e1..37d77e055016 100644 --- a/arch/m68k/include/asm/mcf_pgtable.h +++ b/arch/m68k/include/asm/mcf_pgtable.h @@ -211,7 +211,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D CF_PAGE_WRITABLE; return pte; diff --git a/arch/m68k/include/asm/motorola_pgtable.h b/arch/m68k/include/a= sm/motorola_pgtable.h index ec0dc19ab834..c4e8eb76286d 100644 --- a/arch/m68k/include/asm/motorola_pgtable.h +++ b/arch/m68k/include/asm/motorola_pgtable.h @@ -155,7 +155,6 @@ static inline int pte_young(pte_t pte) { return pte_va= l(pte) & _PAGE_ACCESSED; static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |=3D _PAGE_RON= LY; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~_PAGE_DIRT= Y; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~_PAGE_ACCESS= ED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &=3D ~_PAGE_RONL= Y; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY= ; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCES= SED; return pte; } static inline pte_t pte_mknocache(pte_t pte) @@ -168,6 +167,11 @@ static inline pte_t pte_mkcache(pte_t pte) pte_val(pte) =3D (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemo= de; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &=3D ~_PAGE_RONLY; + return pte; +} =20 #define swapper_pg_dir kernel_pg_dir extern pgd_t kernel_pg_dir[128]; diff --git a/arch/m68k/include/asm/sun3_pgtable.h b/arch/m68k/include/asm/s= un3_pgtable.h index e582b0484a55..2a06bea51a1e 100644 --- a/arch/m68k/include/asm/sun3_pgtable.h +++ b/arch/m68k/include/asm/sun3_pgtable.h @@ -143,10 +143,14 @@ static inline int pte_young(pte_t pte) { return pte_= val(pte) & SUN3_PAGE_ACCESS static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAG= E_WRITEABLE; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAGE_= MODIFIED; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAGE_AC= CESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_W= RITEABLE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_M= ODIFIED; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_A= CCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE= _NOCACHE; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D SUN3_PAGE_WRITEABLE; + return pte; +} // use this version when caches work... //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &=3D SUN3_PAGE= _NOCACHE; return pte; } // until then, use: diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/includ= e/asm/pgtable.h index d1b8272abcd9..5b83e82f8d7e 100644 --- a/arch/microblaze/include/asm/pgtable.h +++ b/arch/microblaze/include/asm/pgtable.h @@ -266,7 +266,7 @@ static inline pte_t pte_mkread(pte_t pte) \ { pte_val(pte) |=3D _PAGE_USER; return pte; } static inline pte_t pte_mkexec(pte_t pte) \ { pte_val(pte) |=3D _PAGE_USER | _PAGE_EXEC; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) \ +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) \ { pte_val(pte) |=3D _PAGE_RW; return pte; } static inline pte_t pte_mkdirty(pte_t pte) \ { pte_val(pte) |=3D _PAGE_DIRTY; return pte; } diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtabl= e.h index 791389bf3c12..06efd567144a 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -309,7 +309,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte.pte_low |=3D _PAGE_WRITE; if (pte.pte_low & _PAGE_MODIFIED) { @@ -364,7 +364,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -626,7 +626,7 @@ static inline pmd_t pmd_wrprotect(pmd_t pmd) return pmd; } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |=3D _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgta= ble.h index 0f5c2564e9f5..edd458518e0e 100644 --- a/arch/nios2/include/asm/pgtable.h +++ b/arch/nios2/include/asm/pgtable.h @@ -129,7 +129,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/openrisc/include/asm/pgtable.h b/arch/openrisc/include/as= m/pgtable.h index 3eb9b9555d0d..fd40aec189d1 100644 --- a/arch/openrisc/include/asm/pgtable.h +++ b/arch/openrisc/include/asm/pgtable.h @@ -250,7 +250,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pg= table.h index e2950f5db7c9..89f62137e67f 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h @@ -331,8 +331,12 @@ static inline pte_t pte_mkold(pte_t pte) { pte_val(pte= ) &=3D ~_PAGE_ACCESSED; retu static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &=3D ~_PAGE_WR= ITE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY= ; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCES= SED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |=3D _PAGE_WRITE= ; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |=3D _PAGE_SPE= CIAL; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D _PAGE_WRITE; + return pte; +} =20 /* * Huge pte definitions. diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/in= clude/asm/book3s/32/pgtable.h index 7bf1fe7297c6..10d9a1d2aca9 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -498,7 +498,7 @@ static inline pte_t pte_mkpte(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/in= clude/asm/book3s/64/pgtable.h index 4acc9690f599..be0636522d36 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -600,7 +600,7 @@ static inline pte_t pte_mkexec(pte_t pte) return __pte_raw(pte_raw(pte) | cpu_to_be64(_PAGE_EXEC)); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { /* * write implies read, hence set both @@ -1071,7 +1071,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) =20 #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY #define pmd_soft_dirty(pmd) pte_soft_dirty(pmd_pte(pmd)) diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/in= clude/asm/nohash/32/pgtable.h index fec56d965f00..7bfbcb9ba55b 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -171,7 +171,7 @@ void unmap_kernel_page(unsigned long va); do { pte_update(mm, addr, ptep, ~0, 0, 0); } while (0) =20 #ifndef pte_mkwrite -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/nohash/32/pte-8xx.h b/arch/powerpc/in= clude/asm/nohash/32/pte-8xx.h index 1a89ebdc3acc..f32450eb270a 100644 --- a/arch/powerpc/include/asm/nohash/32/pte-8xx.h +++ b/arch/powerpc/include/asm/nohash/32/pte-8xx.h @@ -101,7 +101,7 @@ static inline int pte_write(pte_t pte) =20 #define pte_write pte_write =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) & ~_PAGE_RO); } diff --git a/arch/powerpc/include/asm/nohash/64/pgtable.h b/arch/powerpc/in= clude/asm/nohash/64/pgtable.h index 287e25864ffa..589009555877 100644 --- a/arch/powerpc/include/asm/nohash/64/pgtable.h +++ b/arch/powerpc/include/asm/nohash/64/pgtable.h @@ -85,7 +85,7 @@ #ifndef __ASSEMBLY__ /* pte_clear moved to later in this file */ =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgta= ble.h index d8d8de0ded99..fed1b81fbe07 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -338,7 +338,7 @@ static inline pte_t pte_wrprotect(pte_t pte) =20 /* static inline pte_t pte_mkread(pte_t pte) */ =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_WRITE); } @@ -624,9 +624,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pte_pmd(pte_mkyoung(pmd_pte(pmd))); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { - return pte_pmd(pte_mkwrite(pmd_pte(pmd))); + return pte_pmd(pte_mkwrite(pmd_pte(pmd), vma)); } =20 static inline pmd_t pmd_wrprotect(pmd_t pmd) diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetl= b.h index ccdbccfde148..558f7eef9c4d 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -102,9 +102,9 @@ static inline int huge_pte_dirty(pte_t pte) return pte_dirty(pte); } =20 -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } =20 static inline pte_t huge_pte_mkdirty(pte_t pte) diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtabl= e.h index deeb918cae1d..8f2c743da0eb 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -1013,7 +1013,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -1499,7 +1499,7 @@ static inline pmd_t pmd_mkwrite_kernel(pmd_t pmd) return pmd; } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_mkwrite_kernel(pmd); } diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable= _32.h index 21952b094650..9f2dcb9eafc8 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -351,6 +351,12 @@ static inline void set_pte(pte_t *ptep, pte_t pte) =20 #define PTE_BIT_FUNC(h,fn,op) \ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } +#define PTE_BIT_FUNC_VMA(h,fn,op) \ +static inline pte_t pte_##fn(pte_t pte, struct vm_area_struct *vma) \ +{ \ + pte.pte_##h op; \ + return pte; \ +} =20 #ifdef CONFIG_X2TLB /* @@ -359,11 +365,11 @@ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h= op; return pte; } * kernel permissions), we attempt to couple them a bit more sanely here. */ PTE_BIT_FUNC(high, wrprotect, &=3D ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN= _WRITE)); -PTE_BIT_FUNC(high, mkwrite, |=3D _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRI= TE); +PTE_BIT_FUNC_VMA(high, mkwrite, |=3D _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN= _WRITE); PTE_BIT_FUNC(high, mkhuge, |=3D _PAGE_SZHUGE); #else PTE_BIT_FUNC(low, wrprotect, &=3D ~_PAGE_RW); -PTE_BIT_FUNC(low, mkwrite, |=3D _PAGE_RW); +PTE_BIT_FUNC_VMA(low, mkwrite, |=3D _PAGE_RW); PTE_BIT_FUNC(low, mkhuge, |=3D _PAGE_SZHUGE); #endif =20 diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/p= gtable_32.h index d4330e3c57a6..3e8836179456 100644 --- a/arch/sparc/include/asm/pgtable_32.h +++ b/arch/sparc/include/asm/pgtable_32.h @@ -241,7 +241,7 @@ static inline pte_t pte_mkold(pte_t pte) return __pte(pte_val(pte) & ~SRMMU_REF); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | SRMMU_WRITE); } diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/p= gtable_64.h index 2dc8d4641734..c5cd5c03f557 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -466,7 +466,7 @@ static inline pte_t pte_mkclean(pte_t pte) return __pte(val); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { unsigned long val =3D pte_val(pte), mask; =20 @@ -756,11 +756,11 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return __pmd(pte_val(pte)); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pte_t pte =3D __pte(pmd_val(pmd)); =20 - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); =20 return __pmd(pte_val(pte)); } diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index a70d1618eb35..963479c133b7 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h @@ -207,7 +207,7 @@ static inline pte_t pte_mkyoung(pte_t pte) return(pte); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (unlikely(pte_get_bits(pte, _PAGE_RW))) return pte; diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 3607f2572f9e..66c514808276 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -369,7 +369,9 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte_set_flags(pte, _PAGE_RW); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +struct vm_area_struct; + +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -470,7 +472,7 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pmd_set_flags(pmd, _PAGE_ACCESSED); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_set_flags(pmd, _PAGE_RW); } diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pg= table.h index fc7a14884c6c..d72632d9c53c 100644 --- a/arch/xtensa/include/asm/pgtable.h +++ b/arch/xtensa/include/asm/pgtable.h @@ -262,7 +262,7 @@ static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITABLE; return pte; } =20 #define pgprot_noncached(prot) \ diff --git a/include/asm-generic/hugetlb.h b/include/asm-generic/hugetlb.h index d7f6335d3999..e86c830728de 100644 --- a/include/asm-generic/hugetlb.h +++ b/include/asm-generic/hugetlb.h @@ -20,9 +20,9 @@ static inline unsigned long huge_pte_dirty(pte_t pte) return pte_dirty(pte); } =20 -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } =20 #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT diff --git a/include/linux/mm.h b/include/linux/mm.h index 1f79667824eb..af652444fbba 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1163,7 +1163,7 @@ void free_compound_page(struct page *page); static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); return pte; } =20 diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index af59cc7bd307..7bc5592900bc 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -109,10 +109,10 @@ static void __init pte_basic_tests(struct pgtable_deb= ug_args *args, int idx) WARN_ON(!pte_same(pte, pte)); WARN_ON(!pte_young(pte_mkyoung(pte_mkold(pte)))); WARN_ON(!pte_dirty(pte_mkdirty(pte_mkclean(pte)))); - WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte)))); + WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte), args->vma))); WARN_ON(pte_young(pte_mkold(pte_mkyoung(pte)))); WARN_ON(pte_dirty(pte_mkclean(pte_mkdirty(pte)))); - WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); + WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte, args->vma)))); WARN_ON(pte_dirty(pte_wrprotect(pte_mkclean(pte)))); WARN_ON(!pte_dirty(pte_wrprotect(pte_mkdirty(pte)))); } @@ -153,7 +153,7 @@ static void __init pte_advanced_tests(struct pgtable_de= bug_args *args) pte =3D pte_mkclean(pte); set_pte_at(args->mm, args->vaddr, args->ptep, pte); flush_dcache_page(page); - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, args->vma); pte =3D pte_mkdirty(pte); ptep_set_access_flags(args->vma, args->vaddr, args->ptep, pte, 1); pte =3D ptep_get(args->ptep); @@ -199,10 +199,10 @@ static void __init pmd_basic_tests(struct pgtable_deb= ug_args *args, int idx) WARN_ON(!pmd_same(pmd, pmd)); WARN_ON(!pmd_young(pmd_mkyoung(pmd_mkold(pmd)))); WARN_ON(!pmd_dirty(pmd_mkdirty(pmd_mkclean(pmd)))); - WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd)))); + WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd), args->vma))); WARN_ON(pmd_young(pmd_mkold(pmd_mkyoung(pmd)))); WARN_ON(pmd_dirty(pmd_mkclean(pmd_mkdirty(pmd)))); - WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd)))); + WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd, args->vma)))); WARN_ON(pmd_dirty(pmd_wrprotect(pmd_mkclean(pmd)))); WARN_ON(!pmd_dirty(pmd_wrprotect(pmd_mkdirty(pmd)))); /* @@ -253,7 +253,7 @@ static void __init pmd_advanced_tests(struct pgtable_de= bug_args *args) pmd =3D pmd_mkclean(pmd); set_pmd_at(args->mm, vaddr, args->pmdp, pmd); flush_dcache_page(page); - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, args->vma); pmd =3D pmd_mkdirty(pmd); pmdp_set_access_flags(args->vma, vaddr, args->pmdp, pmd, 1); pmd =3D READ_ONCE(*args->pmdp); @@ -928,8 +928,8 @@ static void __init hugetlb_basic_tests(struct pgtable_d= ebug_args *args) pte =3D mk_huge_pte(page, args->page_prot); =20 WARN_ON(!huge_pte_dirty(huge_pte_mkdirty(pte))); - WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte)))); - WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte)))); + WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte), args->v= ma))); + WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte, args->vma= )))); =20 #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB pte =3D pfn_pte(args->fixed_pmd_pfn, args->page_prot); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4fc43859e59a..aaf815838144 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -555,7 +555,7 @@ __setup("transparent_hugepage=3D", setup_transparent_hu= gepage); pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, vma); return pmd; } =20 @@ -1580,7 +1580,7 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf) pmd =3D pmd_modify(oldpmd, vma->vm_page_prot); pmd =3D pmd_mkyoung(pmd); if (writable) - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, vma); set_pmd_at(vma->vm_mm, haddr, vmf->pmd, pmd); update_mmu_cache_pmd(vma, vmf->address, vmf->pmd); spin_unlock(vmf->ptl); @@ -1926,7 +1926,7 @@ int change_huge_pmd(struct mmu_gather *tlb, struct vm= _area_struct *vma, /* See change_pte_range(). */ if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pmd_write(entry) && can_change_pmd_writable(vma, addr, entry)) - entry =3D pmd_mkwrite(entry); + entry =3D pmd_mkwrite(entry, vma); =20 ret =3D HPAGE_PMD_NR; set_pmd_at(mm, addr, pmd, entry); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 07abcb6eb203..6af471bdcff8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4900,7 +4900,7 @@ static pte_t make_huge_pte(struct vm_area_struct *vma= , struct page *page, =20 if (writable) { entry =3D huge_pte_mkwrite(huge_pte_mkdirty(mk_huge_pte(page, - vma->vm_page_prot))); + vma->vm_page_prot)), vma); } else { entry =3D huge_pte_wrprotect(mk_huge_pte(page, vma->vm_page_prot)); @@ -4916,7 +4916,7 @@ static void set_huge_ptep_writable(struct vm_area_str= uct *vma, { pte_t entry; =20 - entry =3D huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep))); + entry =3D huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep)), vma); if (huge_ptep_set_access_flags(vma, address, ptep, entry, 1)) update_mmu_cache(vma, address, ptep); } diff --git a/mm/memory.c b/mm/memory.c index f456f3b5049c..d0972d2d6f36 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4067,7 +4067,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *= vmf) entry =3D mk_pte(&folio->page, vma->vm_page_prot); entry =3D pte_sw_mkyoung(entry); if (vma->vm_flags & VM_WRITE) - entry =3D pte_mkwrite(pte_mkdirty(entry)); + entry =3D pte_mkwrite(pte_mkdirty(entry), vma); =20 vmf->pte =3D pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); @@ -4755,7 +4755,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) pte =3D pte_modify(old_pte, vma->vm_page_prot); pte =3D pte_mkyoung(pte); if (writable) - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); update_mmu_cache(vma, vmf->address, vmf->pte); pte_unmap_unlock(vmf->pte, vmf->ptl); diff --git a/mm/migrate_device.c b/mm/migrate_device.c index d30c9de60b0d..df3f5e9d5f76 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -646,7 +646,7 @@ static void migrate_vma_insert_page(struct migrate_vma = *migrate, } entry =3D mk_pte(page, vma->vm_page_prot); if (vma->vm_flags & VM_WRITE) - entry =3D pte_mkwrite(pte_mkdirty(entry)); + entry =3D pte_mkwrite(pte_mkdirty(entry), vma); } =20 ptep =3D pte_offset_map_lock(mm, pmdp, addr, &ptl); diff --git a/mm/mprotect.c b/mm/mprotect.c index 1d4843c97c2a..381163a41e88 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -198,7 +198,7 @@ static long change_pte_range(struct mmu_gather *tlb, if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pte_write(ptent) && can_change_pte_writable(vma, addr, ptent)) - ptent =3D pte_mkwrite(ptent); + ptent =3D pte_mkwrite(ptent, vma); =20 ptep_modify_prot_commit(vma, addr, pte, oldpte, ptent); if (pte_needs_flush(oldpte, ptent)) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 53c3d916ff66..3db6f87c0aca 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -75,7 +75,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pm= d_t *dst_pmd, if (page_in_cache && !vm_shared) writable =3D false; if (writable) - _dst_pte =3D pte_mkwrite(_dst_pte); + _dst_pte =3D pte_mkwrite(_dst_pte, dst_vma); if (wp_copy) _dst_pte =3D pte_mkuffd_wp(_dst_pte); =20 --=20 2.17.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rick Edgecombe Subject: [PATCH v7 13/41] mm: Make pte_mkwrite() take a VMA Date: Mon, 27 Feb 2023 14:29:29 -0800 Message-ID: <20230227222957.24501-14-rick.p.edgecombe@intel.com> References: <20230227222957.24501-1-rick.p.edgecombe@intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Return-path: List-Id: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677537101; x=1709073101; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jtLiGLS5ozXsIx63+p41sv5RK32EOGBRgxF7nrBF+NQ=; b=Gd++Ss6FzJgVgLN+e7b1/Qj/XCssBYw8HMemTiMAFCDT2I0YJjp+vXfj s3DuuFNSVTpwLhkOWNYB+Y7YfxXN4B/SE0pdCLezc0JQLQ3T+lzThgBtU mkyCpB9DX90G2IhFoUFaNjYqmLhpj9ZRi8/rueexwktdAMpr6dgbAE9Lu PrYhte6wFSJjeai4GZl6L055aLyn62Amjzl2y3ZyYT6PTBuFgpwNgvqYo wxzY9fM3mUgsRwFi/wbkZYaJxv95pKLxzYOHUKkAwPzDnJMFDzWKyhDP7 aP9hiIs+a73LZ0xEvgu+kdcIC/f6A1j9OMWHD/lZ0J6P1KefdAOmxUr8D Q==; In-Reply-To: <20230227222957.24501-1-rick.p.edgecombe@intel.com> Content-Type: text/plain; charset="windows-1252" 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 Cc: rick.p.edgecombe@intel.com, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, Michal Simek , Dinh Nguyen , linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.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 unusual properties is that shadow stack memory is writable, but only in limited ways. These limits are applied via a specific PTE bit combination. Nevertheless, the memory is writable, and core mm code will need to apply the writable permissions in the typical paths that call pte_mkwrite(). In addition to VM_WRITE, the shadow stack VMA's will have a flag denoting that they are special shadow stack flavor of writable memory. So make pte_mkwrite() take a VMA, so that the x86 implementation of it can know to create regular writable memory or shadow stack memory. Apply the same changes for pmd_mkwrite() and huge_pte_mkwrite(). No functional change. Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-alpha@vger.kernel.org Cc: linux-snps-arc@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-csky@vger.kernel.org Cc: linux-hexagon@vger.kernel.org Cc: linux-ia64@vger.kernel.org Cc: loongarch@lists.linux.dev Cc: linux-m68k@lists.linux-m68k.org Cc: Michal Simek Cc: Dinh Nguyen Cc: linux-mips@vger.kernel.org Cc: linux-openrisc@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-um@lists.infradead.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: Michael Ellerman Acked-by: David Hildenbrand Reviewed-by: Kees Cook Suggested-by: David Hildenbrand Signed-off-by: Rick Edgecombe --- Hi Non-x86 Arch=E2=80=99s, 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@redha= t.com/#t v6: - New patch --- Documentation/mm/arch_pgtable_helpers.rst | 9 ++++++--- arch/alpha/include/asm/pgtable.h | 6 +++++- arch/arc/include/asm/hugepage.h | 2 +- arch/arc/include/asm/pgtable-bits-arcv2.h | 7 ++++++- arch/arm/include/asm/pgtable-3level.h | 7 ++++++- arch/arm/include/asm/pgtable.h | 2 +- arch/arm64/include/asm/pgtable.h | 4 ++-- arch/csky/include/asm/pgtable.h | 2 +- arch/hexagon/include/asm/pgtable.h | 2 +- arch/ia64/include/asm/pgtable.h | 2 +- arch/loongarch/include/asm/pgtable.h | 4 ++-- arch/m68k/include/asm/mcf_pgtable.h | 2 +- arch/m68k/include/asm/motorola_pgtable.h | 6 +++++- arch/m68k/include/asm/sun3_pgtable.h | 6 +++++- arch/microblaze/include/asm/pgtable.h | 2 +- arch/mips/include/asm/pgtable.h | 6 +++--- arch/nios2/include/asm/pgtable.h | 2 +- arch/openrisc/include/asm/pgtable.h | 2 +- arch/parisc/include/asm/pgtable.h | 6 +++++- arch/powerpc/include/asm/book3s/32/pgtable.h | 2 +- arch/powerpc/include/asm/book3s/64/pgtable.h | 4 ++-- arch/powerpc/include/asm/nohash/32/pgtable.h | 2 +- arch/powerpc/include/asm/nohash/32/pte-8xx.h | 2 +- arch/powerpc/include/asm/nohash/64/pgtable.h | 2 +- arch/riscv/include/asm/pgtable.h | 6 +++--- arch/s390/include/asm/hugetlb.h | 4 ++-- arch/s390/include/asm/pgtable.h | 4 ++-- arch/sh/include/asm/pgtable_32.h | 10 ++++++++-- arch/sparc/include/asm/pgtable_32.h | 2 +- arch/sparc/include/asm/pgtable_64.h | 6 +++--- arch/um/include/asm/pgtable.h | 2 +- arch/x86/include/asm/pgtable.h | 6 ++++-- arch/xtensa/include/asm/pgtable.h | 2 +- include/asm-generic/hugetlb.h | 4 ++-- include/linux/mm.h | 2 +- mm/debug_vm_pgtable.c | 16 ++++++++-------- mm/huge_memory.c | 6 +++--- mm/hugetlb.c | 4 ++-- mm/memory.c | 4 ++-- mm/migrate_device.c | 2 +- mm/mprotect.c | 2 +- mm/userfaultfd.c | 2 +- 42 files changed, 106 insertions(+), 69 deletions(-) diff --git a/Documentation/mm/arch_pgtable_helpers.rst b/Documentation/mm/a= rch_pgtable_helpers.rst index 30d9a09f01f4..78ac3ff2fe1d 100644 --- a/Documentation/mm/arch_pgtable_helpers.rst +++ b/Documentation/mm/arch_pgtable_helpers.rst @@ -46,7 +46,8 @@ PTE Page Table Helpers +---------------------------+---------------------------------------------= -----+ | pte_mkclean | Creates a clean PTE = | +---------------------------+---------------------------------------------= -----+ -| pte_mkwrite | Creates a writable PTE = | +| pte_mkwrite | Creates a writable PTE of the type specified= by | +| | the VMA. = | +---------------------------+---------------------------------------------= -----+ | pte_wrprotect | Creates a write protected PTE = | +---------------------------+---------------------------------------------= -----+ @@ -118,7 +119,8 @@ PMD Page Table Helpers +---------------------------+---------------------------------------------= -----+ | pmd_mkclean | Creates a clean PMD = | +---------------------------+---------------------------------------------= -----+ -| pmd_mkwrite | Creates a writable PMD = | +| pmd_mkwrite | Creates a writable PMD of the type specified= by | +| | the VMA. = | +---------------------------+---------------------------------------------= -----+ | pmd_wrprotect | Creates a write protected PMD = | +---------------------------+---------------------------------------------= -----+ @@ -222,7 +224,8 @@ HugeTLB Page Table Helpers +---------------------------+---------------------------------------------= -----+ | huge_pte_mkdirty | Creates a dirty HugeTLB = | +---------------------------+---------------------------------------------= -----+ -| huge_pte_mkwrite | Creates a writable HugeTLB = | +| huge_pte_mkwrite | Creates a writable HugeTLB of the type speci= fied | +| | by the VMA. = | +---------------------------+---------------------------------------------= -----+ | huge_pte_wrprotect | Creates a write protected HugeTLB = | +---------------------------+---------------------------------------------= -----+ diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgta= ble.h index ba43cb841d19..fb5d207c2a89 100644 --- a/arch/alpha/include/asm/pgtable.h +++ b/arch/alpha/include/asm/pgtable.h @@ -256,9 +256,13 @@ extern inline int pte_young(pte_t pte) { return pte_v= al(pte) & _PAGE_ACCESSED; extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |=3D _PAGE_FOW= ; return pte; } extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~(__DIRTY_B= ITS); return pte; } extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~(__ACCESS_BI= TS); return pte; } -extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &=3D ~_PAGE_FOW;= return pte; } extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D __DIRTY_BIT= S; return pte; } extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D __ACCESS_BI= TS; return pte; } +extern inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &=3D ~_PAGE_FOW; + return pte; +} =20 /* * The smp_rmb() in the following functions are required to order the load= of diff --git a/arch/arc/include/asm/hugepage.h b/arch/arc/include/asm/hugepag= e.h index 5001b796fb8d..223a96967188 100644 --- a/arch/arc/include/asm/hugepage.h +++ b/arch/arc/include/asm/hugepage.h @@ -21,7 +21,7 @@ static inline pmd_t pte_pmd(pte_t pte) } =20 #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/arc/include/asm/pgtable-bits-arcv2.h b/arch/arc/include/a= sm/pgtable-bits-arcv2.h index 6e9f8ca6d6a1..a5b8bc955015 100644 --- a/arch/arc/include/asm/pgtable-bits-arcv2.h +++ b/arch/arc/include/asm/pgtable-bits-arcv2.h @@ -87,7 +87,6 @@ =20 PTE_BIT_FUNC(mknotpresent, &=3D ~(_PAGE_PRESENT)); PTE_BIT_FUNC(wrprotect, &=3D ~(_PAGE_WRITE)); -PTE_BIT_FUNC(mkwrite, |=3D (_PAGE_WRITE)); PTE_BIT_FUNC(mkclean, &=3D ~(_PAGE_DIRTY)); PTE_BIT_FUNC(mkdirty, |=3D (_PAGE_DIRTY)); PTE_BIT_FUNC(mkold, &=3D ~(_PAGE_ACCESSED)); @@ -95,6 +94,12 @@ PTE_BIT_FUNC(mkyoung, |=3D (_PAGE_ACCESSED)); PTE_BIT_FUNC(mkspecial, |=3D (_PAGE_SPECIAL)); PTE_BIT_FUNC(mkhuge, |=3D (_PAGE_HW_SZ)); =20 +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D (_PAGE_WRITE); + return pte; +} + static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { return __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)); diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/p= gtable-3level.h index 106049791500..df071a807610 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -202,11 +202,16 @@ static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd= ) op; return pmd; } =20 PMD_BIT_FUNC(wrprotect, |=3D L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkold, &=3D ~PMD_SECT_AF); -PMD_BIT_FUNC(mkwrite, &=3D ~L_PMD_SECT_RDONLY); PMD_BIT_FUNC(mkdirty, |=3D L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkclean, &=3D ~L_PMD_SECT_DIRTY); PMD_BIT_FUNC(mkyoung, |=3D PMD_SECT_AF); =20 +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) +{ + pmd_val(pmd) |=3D L_PMD_SECT_RDONLY; + return pmd; +} + #define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT)) =20 #define pmd_pfn(pmd) (((pmd_val(pmd) & PMD_MASK) & PHYS_MASK) >> PAGE_SHI= FT) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index a58ccbb406ad..39ad1ae1308d 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -227,7 +227,7 @@ static inline pte_t pte_wrprotect(pte_t pte) return set_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return clear_pte_bit(pte, __pgprot(L_PTE_RDONLY)); } diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgta= ble.h index cccf8885792e..913bf370f74a 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -187,7 +187,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -492,7 +492,7 @@ static inline int pmd_trans_huge(pmd_t pmd) #define pmd_cont(pmd) pte_cont(pmd_pte(pmd)) #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd))) #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtabl= e.h index d4042495febc..c2f92c991e37 100644 --- a/arch/csky/include/asm/pgtable.h +++ b/arch/csky/include/asm/pgtable.h @@ -176,7 +176,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) diff --git a/arch/hexagon/include/asm/pgtable.h b/arch/hexagon/include/asm/= pgtable.h index 59393613d086..14ab9c789c0e 100644 --- a/arch/hexagon/include/asm/pgtable.h +++ b/arch/hexagon/include/asm/pgtable.h @@ -300,7 +300,7 @@ static inline pte_t pte_wrprotect(pte_t pte) } =20 /* pte_mkwrite - mark page as writable */ -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtabl= e.h index 21c97e31a28a..f879dd626da6 100644 --- a/arch/ia64/include/asm/pgtable.h +++ b/arch/ia64/include/asm/pgtable.h @@ -268,7 +268,7 @@ ia64_phys_addr_valid (unsigned long addr) * access rights: */ #define pte_wrprotect(pte) (__pte(pte_val(pte) & ~_PAGE_AR_RW)) -#define pte_mkwrite(pte) (__pte(pte_val(pte) | _PAGE_AR_RW)) +#define pte_mkwrite(pte, vma) (__pte(pte_val(pte) | _PAGE_AR_RW)) #define pte_mkold(pte) (__pte(pte_val(pte) & ~_PAGE_A)) #define pte_mkyoung(pte) (__pte(pte_val(pte) | _PAGE_A)) #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/= asm/pgtable.h index d28fb9dbec59..ebf645f40298 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -390,7 +390,7 @@ static inline pte_t pte_mkdirty(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -490,7 +490,7 @@ static inline int pmd_write(pmd_t pmd) return !!(pmd_val(pmd) & _PAGE_WRITE); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |=3D _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/m68k/include/asm/mcf_pgtable.h b/arch/m68k/include/asm/mc= f_pgtable.h index 13741c1245e1..37d77e055016 100644 --- a/arch/m68k/include/asm/mcf_pgtable.h +++ b/arch/m68k/include/asm/mcf_pgtable.h @@ -211,7 +211,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D CF_PAGE_WRITABLE; return pte; diff --git a/arch/m68k/include/asm/motorola_pgtable.h b/arch/m68k/include/a= sm/motorola_pgtable.h index ec0dc19ab834..c4e8eb76286d 100644 --- a/arch/m68k/include/asm/motorola_pgtable.h +++ b/arch/m68k/include/asm/motorola_pgtable.h @@ -155,7 +155,6 @@ static inline int pte_young(pte_t pte) { return pte_va= l(pte) & _PAGE_ACCESSED; static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |=3D _PAGE_RON= LY; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~_PAGE_DIRT= Y; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~_PAGE_ACCESS= ED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &=3D ~_PAGE_RONL= Y; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY= ; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCES= SED; return pte; } static inline pte_t pte_mknocache(pte_t pte) @@ -168,6 +167,11 @@ static inline pte_t pte_mkcache(pte_t pte) pte_val(pte) =3D (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemo= de; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) &=3D ~_PAGE_RONLY; + return pte; +} =20 #define swapper_pg_dir kernel_pg_dir extern pgd_t kernel_pg_dir[128]; diff --git a/arch/m68k/include/asm/sun3_pgtable.h b/arch/m68k/include/asm/s= un3_pgtable.h index e582b0484a55..2a06bea51a1e 100644 --- a/arch/m68k/include/asm/sun3_pgtable.h +++ b/arch/m68k/include/asm/sun3_pgtable.h @@ -143,10 +143,14 @@ static inline int pte_young(pte_t pte) { return pte_= val(pte) & SUN3_PAGE_ACCESS static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAG= E_WRITEABLE; return pte; } static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAGE_= MODIFIED; return pte; } static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &=3D ~SUN3_PAGE_AC= CESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_W= RITEABLE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_M= ODIFIED; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE_A= CCESSED; return pte; } static inline pte_t pte_mknocache(pte_t pte) { pte_val(pte) |=3D SUN3_PAGE= _NOCACHE; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D SUN3_PAGE_WRITEABLE; + return pte; +} // use this version when caches work... //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &=3D SUN3_PAGE= _NOCACHE; return pte; } // until then, use: diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/includ= e/asm/pgtable.h index d1b8272abcd9..5b83e82f8d7e 100644 --- a/arch/microblaze/include/asm/pgtable.h +++ b/arch/microblaze/include/asm/pgtable.h @@ -266,7 +266,7 @@ static inline pte_t pte_mkread(pte_t pte) \ { pte_val(pte) |=3D _PAGE_USER; return pte; } static inline pte_t pte_mkexec(pte_t pte) \ { pte_val(pte) |=3D _PAGE_USER | _PAGE_EXEC; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) \ +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) \ { pte_val(pte) |=3D _PAGE_RW; return pte; } static inline pte_t pte_mkdirty(pte_t pte) \ { pte_val(pte) |=3D _PAGE_DIRTY; return pte; } diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtabl= e.h index 791389bf3c12..06efd567144a 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -309,7 +309,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte.pte_low |=3D _PAGE_WRITE; if (pte.pte_low & _PAGE_MODIFIED) { @@ -364,7 +364,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; if (pte_val(pte) & _PAGE_MODIFIED) @@ -626,7 +626,7 @@ static inline pmd_t pmd_wrprotect(pmd_t pmd) return pmd; } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pmd_val(pmd) |=3D _PAGE_WRITE; if (pmd_val(pmd) & _PAGE_MODIFIED) diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgta= ble.h index 0f5c2564e9f5..edd458518e0e 100644 --- a/arch/nios2/include/asm/pgtable.h +++ b/arch/nios2/include/asm/pgtable.h @@ -129,7 +129,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/openrisc/include/asm/pgtable.h b/arch/openrisc/include/as= m/pgtable.h index 3eb9b9555d0d..fd40aec189d1 100644 --- a/arch/openrisc/include/asm/pgtable.h +++ b/arch/openrisc/include/asm/pgtable.h @@ -250,7 +250,7 @@ static inline pte_t pte_mkold(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITE; return pte; diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pg= table.h index e2950f5db7c9..89f62137e67f 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h @@ -331,8 +331,12 @@ static inline pte_t pte_mkold(pte_t pte) { pte_val(pte= ) &=3D ~_PAGE_ACCESSED; retu static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &=3D ~_PAGE_WR= ITE; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY= ; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCES= SED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |=3D _PAGE_WRITE= ; return pte; } static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |=3D _PAGE_SPE= CIAL; return pte; } +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + pte_val(pte) |=3D _PAGE_WRITE; + return pte; +} =20 /* * Huge pte definitions. diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/in= clude/asm/book3s/32/pgtable.h index 7bf1fe7297c6..10d9a1d2aca9 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -498,7 +498,7 @@ static inline pte_t pte_mkpte(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/in= clude/asm/book3s/64/pgtable.h index 4acc9690f599..be0636522d36 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -600,7 +600,7 @@ static inline pte_t pte_mkexec(pte_t pte) return __pte_raw(pte_raw(pte) | cpu_to_be64(_PAGE_EXEC)); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { /* * write implies read, hence set both @@ -1071,7 +1071,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd) #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd))) #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd))) #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd))) -#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd))) +#define pmd_mkwrite(pmd, vma) pte_pmd(pte_mkwrite(pmd_pte(pmd), (vma))) =20 #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY #define pmd_soft_dirty(pmd) pte_soft_dirty(pmd_pte(pmd)) diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/in= clude/asm/nohash/32/pgtable.h index fec56d965f00..7bfbcb9ba55b 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -171,7 +171,7 @@ void unmap_kernel_page(unsigned long va); do { pte_update(mm, addr, ptep, ~0, 0, 0); } while (0) =20 #ifndef pte_mkwrite -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/powerpc/include/asm/nohash/32/pte-8xx.h b/arch/powerpc/in= clude/asm/nohash/32/pte-8xx.h index 1a89ebdc3acc..f32450eb270a 100644 --- a/arch/powerpc/include/asm/nohash/32/pte-8xx.h +++ b/arch/powerpc/include/asm/nohash/32/pte-8xx.h @@ -101,7 +101,7 @@ static inline int pte_write(pte_t pte) =20 #define pte_write pte_write =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) & ~_PAGE_RO); } diff --git a/arch/powerpc/include/asm/nohash/64/pgtable.h b/arch/powerpc/in= clude/asm/nohash/64/pgtable.h index 287e25864ffa..589009555877 100644 --- a/arch/powerpc/include/asm/nohash/64/pgtable.h +++ b/arch/powerpc/include/asm/nohash/64/pgtable.h @@ -85,7 +85,7 @@ #ifndef __ASSEMBLY__ /* pte_clear moved to later in this file */ =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_RW); } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgta= ble.h index d8d8de0ded99..fed1b81fbe07 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -338,7 +338,7 @@ static inline pte_t pte_wrprotect(pte_t pte) =20 /* static inline pte_t pte_mkread(pte_t pte) */ =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | _PAGE_WRITE); } @@ -624,9 +624,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pte_pmd(pte_mkyoung(pmd_pte(pmd))); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { - return pte_pmd(pte_mkwrite(pmd_pte(pmd))); + return pte_pmd(pte_mkwrite(pmd_pte(pmd), vma)); } =20 static inline pmd_t pmd_wrprotect(pmd_t pmd) diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetl= b.h index ccdbccfde148..558f7eef9c4d 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -102,9 +102,9 @@ static inline int huge_pte_dirty(pte_t pte) return pte_dirty(pte); } =20 -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } =20 static inline pte_t huge_pte_mkdirty(pte_t pte) diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtabl= e.h index deeb918cae1d..8f2c743da0eb 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -1013,7 +1013,7 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte; } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -1499,7 +1499,7 @@ static inline pmd_t pmd_mkwrite_kernel(pmd_t pmd) return pmd; } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_mkwrite_kernel(pmd); } diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable= _32.h index 21952b094650..9f2dcb9eafc8 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h @@ -351,6 +351,12 @@ static inline void set_pte(pte_t *ptep, pte_t pte) =20 #define PTE_BIT_FUNC(h,fn,op) \ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h op; return pte; } +#define PTE_BIT_FUNC_VMA(h,fn,op) \ +static inline pte_t pte_##fn(pte_t pte, struct vm_area_struct *vma) \ +{ \ + pte.pte_##h op; \ + return pte; \ +} =20 #ifdef CONFIG_X2TLB /* @@ -359,11 +365,11 @@ static inline pte_t pte_##fn(pte_t pte) { pte.pte_##h= op; return pte; } * kernel permissions), we attempt to couple them a bit more sanely here. */ PTE_BIT_FUNC(high, wrprotect, &=3D ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN= _WRITE)); -PTE_BIT_FUNC(high, mkwrite, |=3D _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRI= TE); +PTE_BIT_FUNC_VMA(high, mkwrite, |=3D _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN= _WRITE); PTE_BIT_FUNC(high, mkhuge, |=3D _PAGE_SZHUGE); #else PTE_BIT_FUNC(low, wrprotect, &=3D ~_PAGE_RW); -PTE_BIT_FUNC(low, mkwrite, |=3D _PAGE_RW); +PTE_BIT_FUNC_VMA(low, mkwrite, |=3D _PAGE_RW); PTE_BIT_FUNC(low, mkhuge, |=3D _PAGE_SZHUGE); #endif =20 diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/p= gtable_32.h index d4330e3c57a6..3e8836179456 100644 --- a/arch/sparc/include/asm/pgtable_32.h +++ b/arch/sparc/include/asm/pgtable_32.h @@ -241,7 +241,7 @@ static inline pte_t pte_mkold(pte_t pte) return __pte(pte_val(pte) & ~SRMMU_REF); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return __pte(pte_val(pte) | SRMMU_WRITE); } diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/p= gtable_64.h index 2dc8d4641734..c5cd5c03f557 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -466,7 +466,7 @@ static inline pte_t pte_mkclean(pte_t pte) return __pte(val); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { unsigned long val =3D pte_val(pte), mask; =20 @@ -756,11 +756,11 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return __pmd(pte_val(pte)); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { pte_t pte =3D __pte(pmd_val(pmd)); =20 - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); =20 return __pmd(pte_val(pte)); } diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index a70d1618eb35..963479c133b7 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h @@ -207,7 +207,7 @@ static inline pte_t pte_mkyoung(pte_t pte) return(pte); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (unlikely(pte_get_bits(pte, _PAGE_RW))) return pte; diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 3607f2572f9e..66c514808276 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -369,7 +369,9 @@ static inline pte_t pte_mkwrite_kernel(pte_t pte) return pte_set_flags(pte, _PAGE_RW); } =20 -static inline pte_t pte_mkwrite(pte_t pte) +struct vm_area_struct; + +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { return pte_mkwrite_kernel(pte); } @@ -470,7 +472,7 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pmd_set_flags(pmd, _PAGE_ACCESSED); } =20 -static inline pmd_t pmd_mkwrite(pmd_t pmd) +static inline pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { return pmd_set_flags(pmd, _PAGE_RW); } diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pg= table.h index fc7a14884c6c..d72632d9c53c 100644 --- a/arch/xtensa/include/asm/pgtable.h +++ b/arch/xtensa/include/asm/pgtable.h @@ -262,7 +262,7 @@ static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |=3D _PAGE_DIRTY; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |=3D _PAGE_ACCESSED; return pte; } -static inline pte_t pte_mkwrite(pte_t pte) +static inline pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { pte_val(pte) |=3D _PAGE_WRITABLE; return pte; } =20 #define pgprot_noncached(prot) \ diff --git a/include/asm-generic/hugetlb.h b/include/asm-generic/hugetlb.h index d7f6335d3999..e86c830728de 100644 --- a/include/asm-generic/hugetlb.h +++ b/include/asm-generic/hugetlb.h @@ -20,9 +20,9 @@ static inline unsigned long huge_pte_dirty(pte_t pte) return pte_dirty(pte); } =20 -static inline pte_t huge_pte_mkwrite(pte_t pte) +static inline pte_t huge_pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { - return pte_mkwrite(pte); + return pte_mkwrite(pte, vma); } =20 #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT diff --git a/include/linux/mm.h b/include/linux/mm.h index 1f79667824eb..af652444fbba 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1163,7 +1163,7 @@ void free_compound_page(struct page *page); static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); return pte; } =20 diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index af59cc7bd307..7bc5592900bc 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -109,10 +109,10 @@ static void __init pte_basic_tests(struct pgtable_deb= ug_args *args, int idx) WARN_ON(!pte_same(pte, pte)); WARN_ON(!pte_young(pte_mkyoung(pte_mkold(pte)))); WARN_ON(!pte_dirty(pte_mkdirty(pte_mkclean(pte)))); - WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte)))); + WARN_ON(!pte_write(pte_mkwrite(pte_wrprotect(pte), args->vma))); WARN_ON(pte_young(pte_mkold(pte_mkyoung(pte)))); WARN_ON(pte_dirty(pte_mkclean(pte_mkdirty(pte)))); - WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte)))); + WARN_ON(pte_write(pte_wrprotect(pte_mkwrite(pte, args->vma)))); WARN_ON(pte_dirty(pte_wrprotect(pte_mkclean(pte)))); WARN_ON(!pte_dirty(pte_wrprotect(pte_mkdirty(pte)))); } @@ -153,7 +153,7 @@ static void __init pte_advanced_tests(struct pgtable_de= bug_args *args) pte =3D pte_mkclean(pte); set_pte_at(args->mm, args->vaddr, args->ptep, pte); flush_dcache_page(page); - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, args->vma); pte =3D pte_mkdirty(pte); ptep_set_access_flags(args->vma, args->vaddr, args->ptep, pte, 1); pte =3D ptep_get(args->ptep); @@ -199,10 +199,10 @@ static void __init pmd_basic_tests(struct pgtable_deb= ug_args *args, int idx) WARN_ON(!pmd_same(pmd, pmd)); WARN_ON(!pmd_young(pmd_mkyoung(pmd_mkold(pmd)))); WARN_ON(!pmd_dirty(pmd_mkdirty(pmd_mkclean(pmd)))); - WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd)))); + WARN_ON(!pmd_write(pmd_mkwrite(pmd_wrprotect(pmd), args->vma))); WARN_ON(pmd_young(pmd_mkold(pmd_mkyoung(pmd)))); WARN_ON(pmd_dirty(pmd_mkclean(pmd_mkdirty(pmd)))); - WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd)))); + WARN_ON(pmd_write(pmd_wrprotect(pmd_mkwrite(pmd, args->vma)))); WARN_ON(pmd_dirty(pmd_wrprotect(pmd_mkclean(pmd)))); WARN_ON(!pmd_dirty(pmd_wrprotect(pmd_mkdirty(pmd)))); /* @@ -253,7 +253,7 @@ static void __init pmd_advanced_tests(struct pgtable_de= bug_args *args) pmd =3D pmd_mkclean(pmd); set_pmd_at(args->mm, vaddr, args->pmdp, pmd); flush_dcache_page(page); - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, args->vma); pmd =3D pmd_mkdirty(pmd); pmdp_set_access_flags(args->vma, vaddr, args->pmdp, pmd, 1); pmd =3D READ_ONCE(*args->pmdp); @@ -928,8 +928,8 @@ static void __init hugetlb_basic_tests(struct pgtable_d= ebug_args *args) pte =3D mk_huge_pte(page, args->page_prot); =20 WARN_ON(!huge_pte_dirty(huge_pte_mkdirty(pte))); - WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte)))); - WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte)))); + WARN_ON(!huge_pte_write(huge_pte_mkwrite(huge_pte_wrprotect(pte), args->v= ma))); + WARN_ON(huge_pte_write(huge_pte_wrprotect(huge_pte_mkwrite(pte, args->vma= )))); =20 #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB pte =3D pfn_pte(args->fixed_pmd_pfn, args->page_prot); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4fc43859e59a..aaf815838144 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -555,7 +555,7 @@ __setup("transparent_hugepage=3D", setup_transparent_hu= gepage); pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) { if (likely(vma->vm_flags & VM_WRITE)) - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, vma); return pmd; } =20 @@ -1580,7 +1580,7 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf) pmd =3D pmd_modify(oldpmd, vma->vm_page_prot); pmd =3D pmd_mkyoung(pmd); if (writable) - pmd =3D pmd_mkwrite(pmd); + pmd =3D pmd_mkwrite(pmd, vma); set_pmd_at(vma->vm_mm, haddr, vmf->pmd, pmd); update_mmu_cache_pmd(vma, vmf->address, vmf->pmd); spin_unlock(vmf->ptl); @@ -1926,7 +1926,7 @@ int change_huge_pmd(struct mmu_gather *tlb, struct vm= _area_struct *vma, /* See change_pte_range(). */ if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pmd_write(entry) && can_change_pmd_writable(vma, addr, entry)) - entry =3D pmd_mkwrite(entry); + entry =3D pmd_mkwrite(entry, vma); =20 ret =3D HPAGE_PMD_NR; set_pmd_at(mm, addr, pmd, entry); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 07abcb6eb203..6af471bdcff8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4900,7 +4900,7 @@ static pte_t make_huge_pte(struct vm_area_struct *vma= , struct page *page, =20 if (writable) { entry =3D huge_pte_mkwrite(huge_pte_mkdirty(mk_huge_pte(page, - vma->vm_page_prot))); + vma->vm_page_prot)), vma); } else { entry =3D huge_pte_wrprotect(mk_huge_pte(page, vma->vm_page_prot)); @@ -4916,7 +4916,7 @@ static void set_huge_ptep_writable(struct vm_area_str= uct *vma, { pte_t entry; =20 - entry =3D huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep))); + entry =3D huge_pte_mkwrite(huge_pte_mkdirty(huge_ptep_get(ptep)), vma); if (huge_ptep_set_access_flags(vma, address, ptep, entry, 1)) update_mmu_cache(vma, address, ptep); } diff --git a/mm/memory.c b/mm/memory.c index f456f3b5049c..d0972d2d6f36 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4067,7 +4067,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *= vmf) entry =3D mk_pte(&folio->page, vma->vm_page_prot); entry =3D pte_sw_mkyoung(entry); if (vma->vm_flags & VM_WRITE) - entry =3D pte_mkwrite(pte_mkdirty(entry)); + entry =3D pte_mkwrite(pte_mkdirty(entry), vma); =20 vmf->pte =3D pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); @@ -4755,7 +4755,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) pte =3D pte_modify(old_pte, vma->vm_page_prot); pte =3D pte_mkyoung(pte); if (writable) - pte =3D pte_mkwrite(pte); + pte =3D pte_mkwrite(pte, vma); ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte); update_mmu_cache(vma, vmf->address, vmf->pte); pte_unmap_unlock(vmf->pte, vmf->ptl); diff --git a/mm/migrate_device.c b/mm/migrate_device.c index d30c9de60b0d..df3f5e9d5f76 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -646,7 +646,7 @@ static void migrate_vma_insert_page(struct migrate_vma = *migrate, } entry =3D mk_pte(page, vma->vm_page_prot); if (vma->vm_flags & VM_WRITE) - entry =3D pte_mkwrite(pte_mkdirty(entry)); + entry =3D pte_mkwrite(pte_mkdirty(entry), vma); } =20 ptep =3D pte_offset_map_lock(mm, pmdp, addr, &ptl); diff --git a/mm/mprotect.c b/mm/mprotect.c index 1d4843c97c2a..381163a41e88 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -198,7 +198,7 @@ static long change_pte_range(struct mmu_gather *tlb, if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) && !pte_write(ptent) && can_change_pte_writable(vma, addr, ptent)) - ptent =3D pte_mkwrite(ptent); + ptent =3D pte_mkwrite(ptent, vma); =20 ptep_modify_prot_commit(vma, addr, pte, oldpte, ptent); if (pte_needs_flush(oldpte, ptent)) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 53c3d916ff66..3db6f87c0aca 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -75,7 +75,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pm= d_t *dst_pmd, if (page_in_cache && !vm_shared) writable =3D false; if (writable) - _dst_pte =3D pte_mkwrite(_dst_pte); + _dst_pte =3D pte_mkwrite(_dst_pte, dst_vma); if (wp_copy) _dst_pte =3D pte_mkuffd_wp(_dst_pte); =20 --=20 2.17.1