From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Date: Wed, 4 Oct 2017 14:19:55 -0700 Message-Id: <20171004212003.28296-20-thgarnie@google.com> In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Subject: [kernel-hardening] [RFC v3 19/27] x86: Support global stack cookie To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter , Boris Ostrovsky , Alexey Dobriyan , Andrew Morton , Paul Gortmaker , Chris Metcalf , "Paul E . McKenney" , Nicolas Pitre , Borislav Petkov , "Luis R . Rodriguez" , Greg Kroah-Hartman , Christopher Li , Steven Rostedt , Jason Baron , Dou Liyang , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Masahiro Yamada , Alexei Starovoitov , Daniel Borkmann , Markus Trippelsdorf , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Joerg Roedel , Rik van Riel , David Howells , Ard Biesheuvel , Waiman Long , Kyle Huey , Andrey Ryabinin , Jonathan Corbet , Matthew Wilcox , Michal Hocko , Peter Foley , Paul Bolle , Jiri Kosina , Rob Landley , "H . J . Lu" , Baoquan He , =?UTF-8?q?Jan=20H=20=2E=20Sch=C3=B6nherr?= , Daniel Micay Cc: x86@kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, virtualization@lists.linux-foundation.org, xen-devel@lists.xenproject.org, linux-arch@vger.kernel.org, linux-sparse@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, kernel-hardening@lists.openwall.com List-ID: Add an off-by-default configuration option to use a global stack cookie instead of the default TLS. This configuration option will only be used with PIE binaries. For kernel stack cookie, the compiler uses the mcmodel=kernel to switch between the fs segment to gs segment. A PIE binary does not use mcmodel=kernel because it can be relocated anywhere, therefore the compiler will default to the fs segment register. This is going to be fixed with a compiler change allowing to pick the segment register as done on PowerPC. In the meantime, this configuration can be used to support older compilers. Signed-off-by: Thomas Garnier --- arch/x86/Kconfig | 4 ++++ arch/x86/Makefile | 9 +++++++++ arch/x86/entry/entry_32.S | 3 ++- arch/x86/entry/entry_64.S | 3 ++- arch/x86/include/asm/processor.h | 3 ++- arch/x86/include/asm/stackprotector.h | 19 ++++++++++++++----- arch/x86/kernel/asm-offsets.c | 3 ++- arch/x86/kernel/asm-offsets_32.c | 3 ++- arch/x86/kernel/asm-offsets_64.c | 3 ++- arch/x86/kernel/cpu/common.c | 3 ++- arch/x86/kernel/head_32.S | 3 ++- arch/x86/kernel/process.c | 5 +++++ 12 files changed, 48 insertions(+), 13 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 063f1e0d51aa..777197fab6dd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2133,6 +2133,10 @@ config RANDOMIZE_MEMORY_PHYSICAL_PADDING If unsure, leave at the default value. +config X86_GLOBAL_STACKPROTECTOR + bool + depends on CC_STACKPROTECTOR + config HOTPLUG_CPU bool "Support for hot-pluggable CPUs" depends on SMP diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 6276572259c8..4cb4f0495ddc 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -60,6 +60,15 @@ endif KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow KBUILD_CFLAGS += $(call cc-option,-mno-avx,) +ifdef CONFIG_X86_GLOBAL_STACKPROTECTOR + ifeq ($(call cc-option, -mstack-protector-guard=global),) + $(error Cannot use CONFIG_X86_GLOBAL_STACKPROTECTOR: \ + -mstack-protector-guard=global not supported \ + by compiler) + endif + KBUILD_CFLAGS += -mstack-protector-guard=global +endif + ifeq ($(CONFIG_X86_32),y) BITS := 32 UTS_MACHINE := i386 diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S index 8a13d468635a..ab3e5056722f 100644 --- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -237,7 +237,8 @@ ENTRY(__switch_to_asm) movl %esp, TASK_threadsp(%eax) movl TASK_threadsp(%edx), %esp -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) movl TASK_stack_canary(%edx), %ebx movl %ebx, PER_CPU_VAR(stack_canary)+stack_canary_offset #endif diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index d3a52d2342af..01be62c1b436 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -390,7 +390,8 @@ ENTRY(__switch_to_asm) movq %rsp, TASK_threadsp(%rdi) movq TASK_threadsp(%rsi), %rsp -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) movq TASK_stack_canary(%rsi), %rbx movq %rbx, PER_CPU_VAR(irq_stack_union + stack_canary_offset) #endif diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index b09bd50b06c7..e3a7ef8d5fb8 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -394,7 +394,8 @@ DECLARE_PER_CPU(char *, irq_stack_ptr); DECLARE_PER_CPU(unsigned int, irq_count); extern asmlinkage void ignore_sysret(void); #else /* X86_64 */ -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) /* * Make sure stack canary segment base is cached-aligned: * "For Intel Atom processors, avoid non zero segment base address diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h index 8abedf1d650e..66462d778dc5 100644 --- a/arch/x86/include/asm/stackprotector.h +++ b/arch/x86/include/asm/stackprotector.h @@ -51,6 +51,10 @@ #define GDT_STACK_CANARY_INIT \ [GDT_ENTRY_STACK_CANARY] = GDT_ENTRY_INIT(0x4090, 0, 0x18), +#ifdef CONFIG_X86_GLOBAL_STACKPROTECTOR +extern unsigned long __stack_chk_guard; +#endif + /* * Initialize the stackprotector canary value. * @@ -62,7 +66,7 @@ static __always_inline void boot_init_stack_canary(void) u64 canary; u64 tsc; -#ifdef CONFIG_X86_64 +#if defined(CONFIG_X86_64) && !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) BUILD_BUG_ON(offsetof(union irq_stack_union, stack_canary) != 40); #endif /* @@ -76,17 +80,22 @@ static __always_inline void boot_init_stack_canary(void) canary += tsc + (tsc << 32UL); canary &= CANARY_MASK; +#ifdef CONFIG_X86_GLOBAL_STACKPROTECTOR + if (__stack_chk_guard == 0) + __stack_chk_guard = canary ?: 1; +#else /* !CONFIG_X86_GLOBAL_STACKPROTECTOR */ current->stack_canary = canary; #ifdef CONFIG_X86_64 this_cpu_write(irq_stack_union.stack_canary, canary); -#else +#else /* CONFIG_X86_32 */ this_cpu_write(stack_canary.canary, canary); #endif +#endif } static inline void setup_stack_canary_segment(int cpu) { -#ifdef CONFIG_X86_32 +#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) unsigned long canary = (unsigned long)&per_cpu(stack_canary, cpu); struct desc_struct *gdt_table = get_cpu_gdt_rw(cpu); struct desc_struct desc; @@ -99,7 +108,7 @@ static inline void setup_stack_canary_segment(int cpu) static inline void load_stack_canary_segment(void) { -#ifdef CONFIG_X86_32 +#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) asm("mov %0, %%gs" : : "r" (__KERNEL_STACK_CANARY) : "memory"); #endif } @@ -115,7 +124,7 @@ static inline void setup_stack_canary_segment(int cpu) static inline void load_stack_canary_segment(void) { -#ifdef CONFIG_X86_32 +#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) asm volatile ("mov %0, %%gs" : : "r" (0)); #endif } diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c index de827d6ac8c2..b30a12cd021e 100644 --- a/arch/x86/kernel/asm-offsets.c +++ b/arch/x86/kernel/asm-offsets.c @@ -30,7 +30,8 @@ void common(void) { BLANK(); OFFSET(TASK_threadsp, task_struct, thread.sp); -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) OFFSET(TASK_stack_canary, task_struct, stack_canary); #endif diff --git a/arch/x86/kernel/asm-offsets_32.c b/arch/x86/kernel/asm-offsets_32.c index 710edab9e644..33584e7e486b 100644 --- a/arch/x86/kernel/asm-offsets_32.c +++ b/arch/x86/kernel/asm-offsets_32.c @@ -54,7 +54,8 @@ void foo(void) /* Size of SYSENTER_stack */ DEFINE(SIZEOF_SYSENTER_stack, sizeof(((struct tss_struct *)0)->SYSENTER_stack)); -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) BLANK(); OFFSET(stack_canary_offset, stack_canary, canary); #endif diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c index cf42206926af..06feb31a09f5 100644 --- a/arch/x86/kernel/asm-offsets_64.c +++ b/arch/x86/kernel/asm-offsets_64.c @@ -64,7 +64,8 @@ int main(void) OFFSET(TSS_sp0, tss_struct, x86_tss.sp0); BLANK(); -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) DEFINE(stack_canary_offset, offsetof(union irq_stack_union, stack_canary)); BLANK(); #endif diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 8732c9e719d5..839f4da2ed76 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -1431,7 +1431,8 @@ DEFINE_PER_CPU(unsigned long, cpu_current_top_of_stack) = (unsigned long)&init_thread_union + THREAD_SIZE; EXPORT_PER_CPU_SYMBOL(cpu_current_top_of_stack); -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) DEFINE_PER_CPU_ALIGNED(struct stack_canary, stack_canary); #endif diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 9ed3074d0d27..a55a67b33934 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -377,7 +377,8 @@ ENDPROC(startup_32_smp) */ __INIT setup_once: -#ifdef CONFIG_CC_STACKPROTECTOR +#if defined(CONFIG_CC_STACKPROTECTOR) && \ + !defined(CONFIG_X86_GLOBAL_STACKPROTECTOR) /* * Configure the stack canary. The linker can't handle this by * relocation. Manually set base address in stack canary diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index bd6b85fac666..66ea1a35413e 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -73,6 +73,11 @@ EXPORT_PER_CPU_SYMBOL(cpu_tss); DEFINE_PER_CPU(bool, __tss_limit_invalid); EXPORT_PER_CPU_SYMBOL_GPL(__tss_limit_invalid); +#ifdef CONFIG_X86_GLOBAL_STACKPROTECTOR +unsigned long __stack_chk_guard __read_mostly; +EXPORT_SYMBOL(__stack_chk_guard); +#endif + /* * this gets called so that we can store lazy state into memory and copy the * current task into the new thread. -- 2.14.2.920.gcf0c67979c-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 19/27] x86: Support global stack cookie Date: Wed, 4 Oct 2017 14:19:55 -0700 Message-ID: <20171004212003.28296-20-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter Bor Cc: linux-arch@vger.kernel.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-sparse@vger.kernel.org, linux-crypto@vger.kernel.org, kernel-hardening@lists.openwall.com, xen-devel@lists.xenproject.org List-Id: linux-arch.vger.kernel.org QWRkIGFuIG9mZi1ieS1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHVzZSBhIGdsb2Jh bCBzdGFjayBjb29raWUKaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBUTFMuIFRoaXMgY29uZmlndXJh dGlvbiBvcHRpb24gd2lsbCBvbmx5IGJlIHVzZWQKd2l0aCBQSUUgYmluYXJpZXMuCgpGb3Iga2Vy bmVsIHN0YWNrIGNvb2tpZSwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIG1jbW9kZWw9a2VybmVsIHRv IHN3aXRjaApiZXR3ZWVuIHRoZSBmcyBzZWdtZW50IHRvIGdzIHNlZ21lbnQuIEEgUElFIGJpbmFy eSBkb2VzIG5vdCB1c2UKbWNtb2RlbD1rZXJuZWwgYmVjYXVzZSBpdCBjYW4gYmUgcmVsb2NhdGVk IGFueXdoZXJlLCB0aGVyZWZvcmUgdGhlCmNvbXBpbGVyIHdpbGwgZGVmYXVsdCB0byB0aGUgZnMg c2VnbWVudCByZWdpc3Rlci4gVGhpcyBpcyBnb2luZyB0byBiZQpmaXhlZCB3aXRoIGEgY29tcGls ZXIgY2hhbmdlIGFsbG93aW5nIHRvIHBpY2sgdGhlIHNlZ21lbnQgcmVnaXN0ZXIgYXMKZG9uZSBv biBQb3dlclBDLiBJbiB0aGUgbWVhbnRpbWUsIHRoaXMgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNl ZCB0bwpzdXBwb3J0IG9sZGVyIGNvbXBpbGVycy4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBHYXJu aWVyIDx0aGdhcm5pZUBnb29nbGUuY29tPgotLS0KIGFyY2gveDg2L0tjb25maWcgICAgICAgICAg ICAgICAgICAgICAgfCAgNCArKysrCiBhcmNoL3g4Ni9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgIHwgIDkgKysrKysrKysrCiBhcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TICAgICAgICAgICAg IHwgIDMgKystCiBhcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TICAgICAgICAgICAgIHwgIDMgKyst CiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCAgICAgIHwgIDMgKystCiBhcmNoL3g4 Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oIHwgMTkgKysrKysrKysrKysrKystLS0tLQog YXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmMgICAgICAgICB8ICAzICsrLQogYXJjaC94ODYv a2VybmVsL2FzbS1vZmZzZXRzXzMyLmMgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2Fz bS1vZmZzZXRzXzY0LmMgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24u YyAgICAgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyAgICAgICAgICAg ICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyAgICAgICAgICAgICB8ICA1ICsr KysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAw NjNmMWUwZDUxYWEuLjc3NzE5N2ZhYjZkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwor KysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yMTMzLDYgKzIxMzMsMTAgQEAgY29uZmlnIFJBTkRP TUlaRV9NRU1PUllfUEhZU0lDQUxfUEFERElORwogCiAJICAgSWYgdW5zdXJlLCBsZWF2ZSBhdCB0 aGUgZGVmYXVsdCB2YWx1ZS4KIAorY29uZmlnIFg4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKwli b29sCisJZGVwZW5kcyBvbiBDQ19TVEFDS1BST1RFQ1RPUgorCiBjb25maWcgSE9UUExVR19DUFUK IAlib29sICJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMiCiAJZGVwZW5kcyBvbiBTTVAK ZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXgg NjI3NjU3MjI1OWM4Li40Y2I0ZjA0OTVkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxl CisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC02MCw2ICs2MCwxNSBAQCBlbmRpZgogS0JVSUxE X0NGTEFHUyArPSAtbW5vLXNzZSAtbW5vLW1teCAtbW5vLXNzZTIgLW1uby0zZG5vdwogS0JVSUxE X0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tYXZ4LCkKIAoraWZkZWYgQ09ORklHX1g4 Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKyAgICAgICAgaWZlcSAoJChjYWxsIGNjLW9wdGlvbiwg LW1zdGFjay1wcm90ZWN0b3ItZ3VhcmQ9Z2xvYmFsKSwpCisgICAgICAgICAgICAgICAgJChlcnJv ciBDYW5ub3QgdXNlIENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SOiBcCisgICAgICAg ICAgICAgICAgICAgICAgICAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9iYWwgbm90IHN1cHBv cnRlZCBcCisgICAgICAgICAgICAgICAgICAgICAgICBieSBjb21waWxlcikKKyAgICAgICAgZW5k aWYKKyAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9i YWwKK2VuZGlmCisKIGlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSkKICAgICAgICAgQklUUyA6PSAz MgogICAgICAgICBVVFNfTUFDSElORSA6PSBpMzg2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRy eS9lbnRyeV8zMi5TIGIvYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUwppbmRleCA4YTEzZDQ2ODYz NWEuLmFiM2U1MDU2NzIyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUwor KysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TCkBAIC0yMzcsNyArMjM3LDggQEAgRU5UUlko X19zd2l0Y2hfdG9fYXNtKQogCW1vdmwJJWVzcCwgVEFTS190aHJlYWRzcCglZWF4KQogCW1vdmwJ VEFTS190aHJlYWRzcCglZWR4KSwgJWVzcAogCi0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVD VE9SCisjaWYgZGVmaW5lZChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5l ZChDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUikKIAltb3ZsCVRBU0tfc3RhY2tfY2Fu YXJ5KCVlZHgpLCAlZWJ4CiAJbW92bAklZWJ4LCBQRVJfQ1BVX1ZBUihzdGFja19jYW5hcnkpK3N0 YWNrX2NhbmFyeV9vZmZzZXQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvZW50 cnlfNjQuUyBiL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKaW5kZXggZDNhNTJkMjM0MmFmLi4w MWJlNjJjMWI0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKKysrIGIv YXJjaC94ODYvZW50cnkvZW50cnlfNjQuUwpAQCAtMzkwLDcgKzM5MCw4IEBAIEVOVFJZKF9fc3dp dGNoX3RvX2FzbSkKIAltb3ZxCSVyc3AsIFRBU0tfdGhyZWFkc3AoJXJkaSkKIAltb3ZxCVRBU0tf dGhyZWFkc3AoJXJzaSksICVyc3AKIAotI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgor I2lmIGRlZmluZWQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SKSAmJiBcCisJIWRlZmluZWQoQ09O RklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJbW92cQlUQVNLX3N0YWNrX2NhbmFyeSgl cnNpKSwgJXJieAogCW1vdnEJJXJieCwgUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uICsgc3Rh Y2tfY2FuYXJ5X29mZnNldCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9h c20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBi MDliZDUwYjA2YzcuLmUzYTdlZjhkNWZiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9h c20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAg LTM5NCw3ICszOTQsOCBAQCBERUNMQVJFX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKTsK IERFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCk7CiBleHRlcm4gYXNtbGlu a2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7CiAjZWxzZQkvKiBYODZfNjQgKi8KLSNpZmRl ZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BS T1RFQ1RPUikgJiYgXAorCWRlZmluZWQoQ09ORklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1Ip CiAvKgogICogTWFrZSBzdXJlIHN0YWNrIGNhbmFyeSBzZWdtZW50IGJhc2UgaXMgY2FjaGVkLWFs aWduZWQ6CiAgKiAgICJGb3IgSW50ZWwgQXRvbSBwcm9jZXNzb3JzLCBhdm9pZCBub24gemVybyBz ZWdtZW50IGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3Rh Y2twcm90ZWN0b3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKaW5k ZXggOGFiZWRmMWQ2NTBlLi42NjQ2MmQ3NzhkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1 ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2tw cm90ZWN0b3IuaApAQCAtNTEsNiArNTEsMTAgQEAKICNkZWZpbmUgR0RUX1NUQUNLX0NBTkFSWV9J TklUCQkJCQkJXAogCVtHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZXSA9IEdEVF9FTlRSWV9JTklUKDB4 NDA5MCwgMCwgMHgxOCksCiAKKyNpZmRlZiBDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RP UgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFja19jaGtfZ3VhcmQ7CisjZW5kaWYKKwogLyoK ICAqIEluaXRpYWxpemUgdGhlIHN0YWNrcHJvdGVjdG9yIGNhbmFyeSB2YWx1ZS4KICAqCkBAIC02 Miw3ICs2Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBib290X2luaXRfc3RhY2tf Y2FuYXJ5KHZvaWQpCiAJdTY0IGNhbmFyeTsKIAl1NjQgdHNjOwogCi0jaWZkZWYgQ09ORklHX1g4 Nl82NAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9H TE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHVuaW9uIGlycV9z dGFja191bmlvbiwgc3RhY2tfY2FuYXJ5KSAhPSA0MCk7CiAjZW5kaWYKIAkvKgpAQCAtNzYsMTcg KzgwLDIyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBib290X2luaXRfc3RhY2tfY2Fu YXJ5KHZvaWQpCiAJY2FuYXJ5ICs9IHRzYyArICh0c2MgPDwgMzJVTCk7CiAJY2FuYXJ5ICY9IENB TkFSWV9NQVNLOwogCisjaWZkZWYgQ09ORklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKwlp ZiAoX19zdGFja19jaGtfZ3VhcmQgPT0gMCkKKwkJX19zdGFja19jaGtfZ3VhcmQgPSBjYW5hcnkg PzogMTsKKyNlbHNlIC8qICFDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUiAqLwogCWN1 cnJlbnQtPnN0YWNrX2NhbmFyeSA9IGNhbmFyeTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJdGhp c19jcHVfd3JpdGUoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKLSNlbHNl CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCiAJdGhpc19jcHVfd3JpdGUoc3RhY2tfY2FuYXJ5 LmNhbmFyeSwgY2FuYXJ5KTsKICNlbmRpZgorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p ZCBzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudChpbnQgY3B1KQogewotI2lmZGVmIENPTkZJR19Y ODZfMzIKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZf R0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCXVuc2lnbmVkIGxvbmcgY2FuYXJ5ID0gKHVuc2lnbmVk IGxvbmcpJnBlcl9jcHUoc3RhY2tfY2FuYXJ5LCBjcHUpOwogCXN0cnVjdCBkZXNjX3N0cnVjdCAq Z2R0X3RhYmxlID0gZ2V0X2NwdV9nZHRfcncoY3B1KTsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVz YzsKQEAgLTk5LDcgKzEwOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zdGFja19jYW5h cnlfc2VnbWVudChpbnQgY3B1KQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zdGFja19jYW5h cnlfc2VnbWVudCh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfMzIKKyNpZiBkZWZpbmVkKENP TkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9S KQogCWFzbSgibW92ICUwLCAlJWdzIiA6IDogInIiIChfX0tFUk5FTF9TVEFDS19DQU5BUlkpIDog Im1lbW9yeSIpOwogI2VuZGlmCiB9CkBAIC0xMTUsNyArMTI0LDcgQEAgc3RhdGljIGlubGluZSB2 b2lkIHNldHVwX3N0YWNrX2NhbmFyeV9zZWdtZW50KGludCBjcHUpCiAKIHN0YXRpYyBpbmxpbmUg dm9pZCBsb2FkX3N0YWNrX2NhbmFyeV9zZWdtZW50KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4 Nl8zMgorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9H TE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWdzIiA6IDog InIiICgwKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zm c2V0cy5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZGU4MjdkNmFjOGMy Li5iMzBhMTJjZDAyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5j CisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMCw3ICszMCw4IEBACiB2 b2lkIGNvbW1vbih2b2lkKSB7CiAJQkxBTksoKTsKIAlPRkZTRVQoVEFTS190aHJlYWRzcCwgdGFz a19zdHJ1Y3QsIHRocmVhZC5zcCk7Ci0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisj aWYgZGVmaW5lZChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5lZChDT05G SUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUikKIAlPRkZTRVQoVEFTS19zdGFja19jYW5hcnks IHRhc2tfc3RydWN0LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gv eDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRz XzMyLmMKaW5kZXggNzEwZWRhYjllNjQ0Li4zMzU4NGU3ZTQ4NmIgMTAwNjQ0Ci0tLSBhL2FyY2gv eDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zm c2V0c18zMi5jCkBAIC01NCw3ICs1NCw4IEBAIHZvaWQgZm9vKHZvaWQpCiAJLyogU2l6ZSBvZiBT WVNFTlRFUl9zdGFjayAqLwogCURFRklORShTSVpFT0ZfU1lTRU5URVJfc3RhY2ssIHNpemVvZigo KHN0cnVjdCB0c3Nfc3RydWN0ICopMCktPlNZU0VOVEVSX3N0YWNrKSk7CiAKLSNpZmRlZiBDT05G SUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RP UikgJiYgXAorCSFkZWZpbmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCUJM QU5LKCk7CiAJT0ZGU0VUKHN0YWNrX2NhbmFyeV9vZmZzZXQsIHN0YWNrX2NhbmFyeSwgY2FuYXJ5 KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMg Yi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCBjZjQyMjA2OTI2YWYuLjA2 ZmViMzFhMDlmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMK KysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKQEAgLTY0LDcgKzY0LDggQEAg aW50IG1haW4odm9pZCkKIAlPRkZTRVQoVFNTX3NwMCwgdHNzX3N0cnVjdCwgeDg2X3Rzcy5zcDAp OwogCUJMQU5LKCk7CiAKLSNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZp bmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgJiYgXAorCSFkZWZpbmVkKENPTkZJR19YODZf R0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCURFRklORShzdGFja19jYW5hcnlfb2Zmc2V0LCBvZmZz ZXRvZih1bmlvbiBpcnFfc3RhY2tfdW5pb24sIHN0YWNrX2NhbmFyeSkpOwogCUJMQU5LKCk7CiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4 Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDg3MzJjOWU3MTlkNS4uODM5ZjRkYTJlZDc2IDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tl cm5lbC9jcHUvY29tbW9uLmMKQEAgLTE0MzEsNyArMTQzMSw4IEBAIERFRklORV9QRVJfQ1BVKHVu c2lnbmVkIGxvbmcsIGNwdV9jdXJyZW50X3RvcF9vZl9zdGFjaykgPQogCSh1bnNpZ25lZCBsb25n KSZpbml0X3RocmVhZF91bmlvbiArIFRIUkVBRF9TSVpFOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9M KGNwdV9jdXJyZW50X3RvcF9vZl9zdGFjayk7CiAKLSNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9U RUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgJiYgXAorCSFkZWZp bmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogREVGSU5FX1BFUl9DUFVfQUxJ R05FRChzdHJ1Y3Qgc3RhY2tfY2FuYXJ5LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKZGlmZiAt LWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8z Mi5TCmluZGV4IDllZDMwNzRkMGQyNy4uYTU1YTY3YjMzOTM0IDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTM3 Nyw3ICszNzcsOCBAQCBFTkRQUk9DKHN0YXJ0dXBfMzJfc21wKQogICovCiBfX0lOSVQKIHNldHVw X29uY2U6Ci0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjaWYgZGVmaW5lZChDT05G SUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfWDg2X0dMT0JBTF9T VEFDS1BST1RFQ1RPUikKIAkvKgogCSAqIENvbmZpZ3VyZSB0aGUgc3RhY2sgY2FuYXJ5LiBUaGUg bGlua2VyIGNhbid0IGhhbmRsZSB0aGlzIGJ5CiAJICogcmVsb2NhdGlvbi4gIE1hbnVhbGx5IHNl dCBiYXNlIGFkZHJlc3MgaW4gc3RhY2sgY2FuYXJ5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJu ZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiZDZiODVmYWM2 NjYuLjY2ZWExYTM1NDEzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwor KysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03Myw2ICs3MywxMSBAQCBFWFBPUlRf UEVSX0NQVV9TWU1CT0woY3B1X3Rzcyk7CiBERUZJTkVfUEVSX0NQVShib29sLCBfX3Rzc19saW1p dF9pbnZhbGlkKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoX190c3NfbGltaXRfaW52YWxp ZCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUgordW5zaWduZWQg bG9uZyBfX3N0YWNrX2Noa19ndWFyZCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChfX3N0 YWNrX2Noa19ndWFyZCk7CisjZW5kaWYKKwogLyoKICAqIHRoaXMgZ2V0cyBjYWxsZWQgc28gdGhh dCB3ZSBjYW4gc3RvcmUgbGF6eSBzdGF0ZSBpbnRvIG1lbW9yeSBhbmQgY29weSB0aGUKICAqIGN1 cnJlbnQgdGFzayBpbnRvIHRoZSBuZXcgdGhyZWFkLgotLSAKMi4xNC4yLjkyMC5nY2YwYzY3OTc5 Yy1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 19/27] x86: Support global stack cookie Date: Wed, 4 Oct 2017 14:19:55 -0700 Message-ID: <20171004212003.28296-20-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: linux-arch@vger.kernel.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-sparse@vger.kernel.org, linux-crypto@vger.kernel.org, kernel-hardening@lists.openwall.com, xen-devel@lists.xenproject.org To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter , Bor Return-path: In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" List-Id: linux-crypto.vger.kernel.org QWRkIGFuIG9mZi1ieS1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHVzZSBhIGdsb2Jh bCBzdGFjayBjb29raWUKaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBUTFMuIFRoaXMgY29uZmlndXJh dGlvbiBvcHRpb24gd2lsbCBvbmx5IGJlIHVzZWQKd2l0aCBQSUUgYmluYXJpZXMuCgpGb3Iga2Vy bmVsIHN0YWNrIGNvb2tpZSwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIG1jbW9kZWw9a2VybmVsIHRv IHN3aXRjaApiZXR3ZWVuIHRoZSBmcyBzZWdtZW50IHRvIGdzIHNlZ21lbnQuIEEgUElFIGJpbmFy eSBkb2VzIG5vdCB1c2UKbWNtb2RlbD1rZXJuZWwgYmVjYXVzZSBpdCBjYW4gYmUgcmVsb2NhdGVk IGFueXdoZXJlLCB0aGVyZWZvcmUgdGhlCmNvbXBpbGVyIHdpbGwgZGVmYXVsdCB0byB0aGUgZnMg c2VnbWVudCByZWdpc3Rlci4gVGhpcyBpcyBnb2luZyB0byBiZQpmaXhlZCB3aXRoIGEgY29tcGls ZXIgY2hhbmdlIGFsbG93aW5nIHRvIHBpY2sgdGhlIHNlZ21lbnQgcmVnaXN0ZXIgYXMKZG9uZSBv biBQb3dlclBDLiBJbiB0aGUgbWVhbnRpbWUsIHRoaXMgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNl ZCB0bwpzdXBwb3J0IG9sZGVyIGNvbXBpbGVycy4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBHYXJu aWVyIDx0aGdhcm5pZUBnb29nbGUuY29tPgotLS0KIGFyY2gveDg2L0tjb25maWcgICAgICAgICAg ICAgICAgICAgICAgfCAgNCArKysrCiBhcmNoL3g4Ni9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgIHwgIDkgKysrKysrKysrCiBhcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TICAgICAgICAgICAg IHwgIDMgKystCiBhcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TICAgICAgICAgICAgIHwgIDMgKyst CiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCAgICAgIHwgIDMgKystCiBhcmNoL3g4 Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oIHwgMTkgKysrKysrKysrKysrKystLS0tLQog YXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmMgICAgICAgICB8ICAzICsrLQogYXJjaC94ODYv a2VybmVsL2FzbS1vZmZzZXRzXzMyLmMgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2Fz bS1vZmZzZXRzXzY0LmMgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24u YyAgICAgICAgICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyAgICAgICAgICAg ICB8ICAzICsrLQogYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyAgICAgICAgICAgICB8ICA1ICsr KysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAw NjNmMWUwZDUxYWEuLjc3NzE5N2ZhYjZkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwor KysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yMTMzLDYgKzIxMzMsMTAgQEAgY29uZmlnIFJBTkRP TUlaRV9NRU1PUllfUEhZU0lDQUxfUEFERElORwogCiAJICAgSWYgdW5zdXJlLCBsZWF2ZSBhdCB0 aGUgZGVmYXVsdCB2YWx1ZS4KIAorY29uZmlnIFg4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKwli b29sCisJZGVwZW5kcyBvbiBDQ19TVEFDS1BST1RFQ1RPUgorCiBjb25maWcgSE9UUExVR19DUFUK IAlib29sICJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMiCiAJZGVwZW5kcyBvbiBTTVAK ZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXgg NjI3NjU3MjI1OWM4Li40Y2I0ZjA0OTVkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxl CisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC02MCw2ICs2MCwxNSBAQCBlbmRpZgogS0JVSUxE X0NGTEFHUyArPSAtbW5vLXNzZSAtbW5vLW1teCAtbW5vLXNzZTIgLW1uby0zZG5vdwogS0JVSUxE X0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tYXZ4LCkKIAoraWZkZWYgQ09ORklHX1g4 Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKyAgICAgICAgaWZlcSAoJChjYWxsIGNjLW9wdGlvbiwg LW1zdGFjay1wcm90ZWN0b3ItZ3VhcmQ9Z2xvYmFsKSwpCisgICAgICAgICAgICAgICAgJChlcnJv ciBDYW5ub3QgdXNlIENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SOiBcCisgICAgICAg ICAgICAgICAgICAgICAgICAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9iYWwgbm90IHN1cHBv cnRlZCBcCisgICAgICAgICAgICAgICAgICAgICAgICBieSBjb21waWxlcikKKyAgICAgICAgZW5k aWYKKyAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9i YWwKK2VuZGlmCisKIGlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSkKICAgICAgICAgQklUUyA6PSAz MgogICAgICAgICBVVFNfTUFDSElORSA6PSBpMzg2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9lbnRy eS9lbnRyeV8zMi5TIGIvYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUwppbmRleCA4YTEzZDQ2ODYz NWEuLmFiM2U1MDU2NzIyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUwor KysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TCkBAIC0yMzcsNyArMjM3LDggQEAgRU5UUlko X19zd2l0Y2hfdG9fYXNtKQogCW1vdmwJJWVzcCwgVEFTS190aHJlYWRzcCglZWF4KQogCW1vdmwJ VEFTS190aHJlYWRzcCglZWR4KSwgJWVzcAogCi0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVD VE9SCisjaWYgZGVmaW5lZChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5l ZChDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUikKIAltb3ZsCVRBU0tfc3RhY2tfY2Fu YXJ5KCVlZHgpLCAlZWJ4CiAJbW92bAklZWJ4LCBQRVJfQ1BVX1ZBUihzdGFja19jYW5hcnkpK3N0 YWNrX2NhbmFyeV9vZmZzZXQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvZW50 cnlfNjQuUyBiL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKaW5kZXggZDNhNTJkMjM0MmFmLi4w MWJlNjJjMWI0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKKysrIGIv YXJjaC94ODYvZW50cnkvZW50cnlfNjQuUwpAQCAtMzkwLDcgKzM5MCw4IEBAIEVOVFJZKF9fc3dp dGNoX3RvX2FzbSkKIAltb3ZxCSVyc3AsIFRBU0tfdGhyZWFkc3AoJXJkaSkKIAltb3ZxCVRBU0tf dGhyZWFkc3AoJXJzaSksICVyc3AKIAotI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgor I2lmIGRlZmluZWQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SKSAmJiBcCisJIWRlZmluZWQoQ09O RklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJbW92cQlUQVNLX3N0YWNrX2NhbmFyeSgl cnNpKSwgJXJieAogCW1vdnEJJXJieCwgUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uICsgc3Rh Y2tfY2FuYXJ5X29mZnNldCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9h c20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBi MDliZDUwYjA2YzcuLmUzYTdlZjhkNWZiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9h c20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAg LTM5NCw3ICszOTQsOCBAQCBERUNMQVJFX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKTsK IERFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCk7CiBleHRlcm4gYXNtbGlu a2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7CiAjZWxzZQkvKiBYODZfNjQgKi8KLSNpZmRl ZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BS T1RFQ1RPUikgJiYgXAorCWRlZmluZWQoQ09ORklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1Ip CiAvKgogICogTWFrZSBzdXJlIHN0YWNrIGNhbmFyeSBzZWdtZW50IGJhc2UgaXMgY2FjaGVkLWFs aWduZWQ6CiAgKiAgICJGb3IgSW50ZWwgQXRvbSBwcm9jZXNzb3JzLCBhdm9pZCBub24gemVybyBz ZWdtZW50IGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3Rh Y2twcm90ZWN0b3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKaW5k ZXggOGFiZWRmMWQ2NTBlLi42NjQ2MmQ3NzhkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1 ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2tw cm90ZWN0b3IuaApAQCAtNTEsNiArNTEsMTAgQEAKICNkZWZpbmUgR0RUX1NUQUNLX0NBTkFSWV9J TklUCQkJCQkJXAogCVtHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZXSA9IEdEVF9FTlRSWV9JTklUKDB4 NDA5MCwgMCwgMHgxOCksCiAKKyNpZmRlZiBDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RP UgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFja19jaGtfZ3VhcmQ7CisjZW5kaWYKKwogLyoK ICAqIEluaXRpYWxpemUgdGhlIHN0YWNrcHJvdGVjdG9yIGNhbmFyeSB2YWx1ZS4KICAqCkBAIC02 Miw3ICs2Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBib290X2luaXRfc3RhY2tf Y2FuYXJ5KHZvaWQpCiAJdTY0IGNhbmFyeTsKIAl1NjQgdHNjOwogCi0jaWZkZWYgQ09ORklHX1g4 Nl82NAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9H TE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHVuaW9uIGlycV9z dGFja191bmlvbiwgc3RhY2tfY2FuYXJ5KSAhPSA0MCk7CiAjZW5kaWYKIAkvKgpAQCAtNzYsMTcg KzgwLDIyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBib290X2luaXRfc3RhY2tfY2Fu YXJ5KHZvaWQpCiAJY2FuYXJ5ICs9IHRzYyArICh0c2MgPDwgMzJVTCk7CiAJY2FuYXJ5ICY9IENB TkFSWV9NQVNLOwogCisjaWZkZWYgQ09ORklHX1g4Nl9HTE9CQUxfU1RBQ0tQUk9URUNUT1IKKwlp ZiAoX19zdGFja19jaGtfZ3VhcmQgPT0gMCkKKwkJX19zdGFja19jaGtfZ3VhcmQgPSBjYW5hcnkg PzogMTsKKyNlbHNlIC8qICFDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUiAqLwogCWN1 cnJlbnQtPnN0YWNrX2NhbmFyeSA9IGNhbmFyeTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJdGhp c19jcHVfd3JpdGUoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKLSNlbHNl CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCiAJdGhpc19jcHVfd3JpdGUoc3RhY2tfY2FuYXJ5 LmNhbmFyeSwgY2FuYXJ5KTsKICNlbmRpZgorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p ZCBzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudChpbnQgY3B1KQogewotI2lmZGVmIENPTkZJR19Y ODZfMzIKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZf R0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCXVuc2lnbmVkIGxvbmcgY2FuYXJ5ID0gKHVuc2lnbmVk IGxvbmcpJnBlcl9jcHUoc3RhY2tfY2FuYXJ5LCBjcHUpOwogCXN0cnVjdCBkZXNjX3N0cnVjdCAq Z2R0X3RhYmxlID0gZ2V0X2NwdV9nZHRfcncoY3B1KTsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVz YzsKQEAgLTk5LDcgKzEwOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zdGFja19jYW5h cnlfc2VnbWVudChpbnQgY3B1KQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zdGFja19jYW5h cnlfc2VnbWVudCh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfMzIKKyNpZiBkZWZpbmVkKENP TkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9S KQogCWFzbSgibW92ICUwLCAlJWdzIiA6IDogInIiIChfX0tFUk5FTF9TVEFDS19DQU5BUlkpIDog Im1lbW9yeSIpOwogI2VuZGlmCiB9CkBAIC0xMTUsNyArMTI0LDcgQEAgc3RhdGljIGlubGluZSB2 b2lkIHNldHVwX3N0YWNrX2NhbmFyeV9zZWdtZW50KGludCBjcHUpCiAKIHN0YXRpYyBpbmxpbmUg dm9pZCBsb2FkX3N0YWNrX2NhbmFyeV9zZWdtZW50KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4 Nl8zMgorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9H TE9CQUxfU1RBQ0tQUk9URUNUT1IpCiAJYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWdzIiA6IDog InIiICgwKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zm c2V0cy5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZGU4MjdkNmFjOGMy Li5iMzBhMTJjZDAyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5j CisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMCw3ICszMCw4IEBACiB2 b2lkIGNvbW1vbih2b2lkKSB7CiAJQkxBTksoKTsKIAlPRkZTRVQoVEFTS190aHJlYWRzcCwgdGFz a19zdHJ1Y3QsIHRocmVhZC5zcCk7Ci0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisj aWYgZGVmaW5lZChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5lZChDT05G SUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUikKIAlPRkZTRVQoVEFTS19zdGFja19jYW5hcnks IHRhc2tfc3RydWN0LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gv eDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRz XzMyLmMKaW5kZXggNzEwZWRhYjllNjQ0Li4zMzU4NGU3ZTQ4NmIgMTAwNjQ0Ci0tLSBhL2FyY2gv eDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zm c2V0c18zMi5jCkBAIC01NCw3ICs1NCw4IEBAIHZvaWQgZm9vKHZvaWQpCiAJLyogU2l6ZSBvZiBT WVNFTlRFUl9zdGFjayAqLwogCURFRklORShTSVpFT0ZfU1lTRU5URVJfc3RhY2ssIHNpemVvZigo KHN0cnVjdCB0c3Nfc3RydWN0ICopMCktPlNZU0VOVEVSX3N0YWNrKSk7CiAKLSNpZmRlZiBDT05G SUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RP UikgJiYgXAorCSFkZWZpbmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCUJM QU5LKCk7CiAJT0ZGU0VUKHN0YWNrX2NhbmFyeV9vZmZzZXQsIHN0YWNrX2NhbmFyeSwgY2FuYXJ5 KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMg Yi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCBjZjQyMjA2OTI2YWYuLjA2 ZmViMzFhMDlmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMK KysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKQEAgLTY0LDcgKzY0LDggQEAg aW50IG1haW4odm9pZCkKIAlPRkZTRVQoVFNTX3NwMCwgdHNzX3N0cnVjdCwgeDg2X3Rzcy5zcDAp OwogCUJMQU5LKCk7CiAKLSNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKKyNpZiBkZWZp bmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgJiYgXAorCSFkZWZpbmVkKENPTkZJR19YODZf R0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogCURFRklORShzdGFja19jYW5hcnlfb2Zmc2V0LCBvZmZz ZXRvZih1bmlvbiBpcnFfc3RhY2tfdW5pb24sIHN0YWNrX2NhbmFyeSkpOwogCUJMQU5LKCk7CiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4 Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDg3MzJjOWU3MTlkNS4uODM5ZjRkYTJlZDc2IDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tl cm5lbC9jcHUvY29tbW9uLmMKQEAgLTE0MzEsNyArMTQzMSw4IEBAIERFRklORV9QRVJfQ1BVKHVu c2lnbmVkIGxvbmcsIGNwdV9jdXJyZW50X3RvcF9vZl9zdGFjaykgPQogCSh1bnNpZ25lZCBsb25n KSZpbml0X3RocmVhZF91bmlvbiArIFRIUkVBRF9TSVpFOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9M KGNwdV9jdXJyZW50X3RvcF9vZl9zdGFjayk7CiAKLSNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9U RUNUT1IKKyNpZiBkZWZpbmVkKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUikgJiYgXAorCSFkZWZp bmVkKENPTkZJR19YODZfR0xPQkFMX1NUQUNLUFJPVEVDVE9SKQogREVGSU5FX1BFUl9DUFVfQUxJ R05FRChzdHJ1Y3Qgc3RhY2tfY2FuYXJ5LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKZGlmZiAt LWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8z Mi5TCmluZGV4IDllZDMwNzRkMGQyNy4uYTU1YTY3YjMzOTM0IDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTM3 Nyw3ICszNzcsOCBAQCBFTkRQUk9DKHN0YXJ0dXBfMzJfc21wKQogICovCiBfX0lOSVQKIHNldHVw X29uY2U6Ci0jaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCisjaWYgZGVmaW5lZChDT05G SUdfQ0NfU1RBQ0tQUk9URUNUT1IpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfWDg2X0dMT0JBTF9T VEFDS1BST1RFQ1RPUikKIAkvKgogCSAqIENvbmZpZ3VyZSB0aGUgc3RhY2sgY2FuYXJ5LiBUaGUg bGlua2VyIGNhbid0IGhhbmRsZSB0aGlzIGJ5CiAJICogcmVsb2NhdGlvbi4gIE1hbnVhbGx5IHNl dCBiYXNlIGFkZHJlc3MgaW4gc3RhY2sgY2FuYXJ5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJu ZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiZDZiODVmYWM2 NjYuLjY2ZWExYTM1NDEzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwor KysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03Myw2ICs3MywxMSBAQCBFWFBPUlRf UEVSX0NQVV9TWU1CT0woY3B1X3Rzcyk7CiBERUZJTkVfUEVSX0NQVShib29sLCBfX3Rzc19saW1p dF9pbnZhbGlkKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoX190c3NfbGltaXRfaW52YWxp ZCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2X0dMT0JBTF9TVEFDS1BST1RFQ1RPUgordW5zaWduZWQg bG9uZyBfX3N0YWNrX2Noa19ndWFyZCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChfX3N0 YWNrX2Noa19ndWFyZCk7CisjZW5kaWYKKwogLyoKICAqIHRoaXMgZ2V0cyBjYWxsZWQgc28gdGhh dCB3ZSBjYW4gc3RvcmUgbGF6eSBzdGF0ZSBpbnRvIG1lbW9yeSBhbmQgY29weSB0aGUKICAqIGN1 cnJlbnQgdGFzayBpbnRvIHRoZSBuZXcgdGhyZWFkLgotLSAKMi4xNC4yLjkyMC5nY2YwYzY3OTc5 Yy1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==