From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Date: Wed, 4 Oct 2017 14:19:50 -0700 Message-Id: <20171004212003.28296-15-thgarnie@google.com> In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Subject: [kernel-hardening] [RFC v3 14/27] x86/percpu: Adapt percpu for PIE support 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: Perpcu uses a clever design where the .percu ELF section has a virtual address of zero and the relocation code avoid relocating specific symbols. It makes the code simple and easily adaptable with or without SMP support. This design is incompatible with PIE because generated code always try to access the zero virtual address relative to the default mapping address. It becomes impossible when KASLR is configured to go below -2G. This patch solves this problem by removing the zero mapping and adapting the GS base to be relative to the expected address. These changes are done only when PIE is enabled. The original implementation is kept as-is by default. The assembly and PER_CPU macros are changed to use relative references when PIE is enabled. The KALLSYMS_ABSOLUTE_PERCPU configuration is disabled with PIE given percpu symbols are not absolute in this case. Position Independent Executable (PIE) support will allow to extended the KASLR randomization range below the -2G memory limit. Signed-off-by: Thomas Garnier --- arch/x86/entry/entry_64.S | 4 ++-- arch/x86/include/asm/percpu.h | 25 +++++++++++++++++++------ arch/x86/kernel/cpu/common.c | 4 +++- arch/x86/kernel/head_64.S | 4 ++++ arch/x86/kernel/setup_percpu.c | 2 +- arch/x86/kernel/vmlinux.lds.S | 13 +++++++++++-- arch/x86/lib/cmpxchg16b_emu.S | 8 ++++---- arch/x86/xen/xen-asm.S | 12 ++++++------ init/Kconfig | 2 +- 9 files changed, 51 insertions(+), 23 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 15bd5530d2ae..d3a52d2342af 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -392,7 +392,7 @@ ENTRY(__switch_to_asm) #ifdef CONFIG_CC_STACKPROTECTOR movq TASK_stack_canary(%rsi), %rbx - movq %rbx, PER_CPU_VAR(irq_stack_union)+stack_canary_offset + movq %rbx, PER_CPU_VAR(irq_stack_union + stack_canary_offset) #endif /* restore callee-saved registers */ @@ -808,7 +808,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt /* * Exception entry points. */ -#define CPU_TSS_IST(x) PER_CPU_VAR(cpu_tss) + (TSS_ist + ((x) - 1) * 8) +#define CPU_TSS_IST(x) PER_CPU_VAR(cpu_tss + (TSS_ist + ((x) - 1) * 8)) .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1 ENTRY(\sym) diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index b21a475fd7ed..07250f1099b5 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h @@ -4,9 +4,11 @@ #ifdef CONFIG_X86_64 #define __percpu_seg gs #define __percpu_mov_op movq +#define __percpu_rel (%rip) #else #define __percpu_seg fs #define __percpu_mov_op movl +#define __percpu_rel #endif #ifdef __ASSEMBLY__ @@ -27,10 +29,14 @@ #define PER_CPU(var, reg) \ __percpu_mov_op %__percpu_seg:this_cpu_off, reg; \ lea var(reg), reg -#define PER_CPU_VAR(var) %__percpu_seg:var +/* Compatible with Position Independent Code */ +#define PER_CPU_VAR(var) %__percpu_seg:(var)##__percpu_rel +/* Rare absolute reference */ +#define PER_CPU_VAR_ABS(var) %__percpu_seg:var #else /* ! SMP */ #define PER_CPU(var, reg) __percpu_mov_op $var, reg -#define PER_CPU_VAR(var) var +#define PER_CPU_VAR(var) (var)##__percpu_rel +#define PER_CPU_VAR_ABS(var) var #endif /* SMP */ #ifdef CONFIG_X86_64_SMP @@ -208,27 +214,34 @@ do { \ pfo_ret__; \ }) +/* Position Independent code uses relative addresses only */ +#ifdef CONFIG_X86_PIE +#define __percpu_stable_arg __percpu_arg(a1) +#else +#define __percpu_stable_arg __percpu_arg(P1) +#endif + #define percpu_stable_op(op, var) \ ({ \ typeof(var) pfo_ret__; \ switch (sizeof(var)) { \ case 1: \ - asm(op "b "__percpu_arg(P1)",%0" \ + asm(op "b "__percpu_stable_arg ",%0" \ : "=q" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 2: \ - asm(op "w "__percpu_arg(P1)",%0" \ + asm(op "w "__percpu_stable_arg ",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 4: \ - asm(op "l "__percpu_arg(P1)",%0" \ + asm(op "l "__percpu_stable_arg ",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ case 8: \ - asm(op "q "__percpu_arg(P1)",%0" \ + asm(op "q "__percpu_stable_arg ",%0" \ : "=r" (pfo_ret__) \ : "p" (&(var))); \ break; \ diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index c9176bae7fd8..8732c9e719d5 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -461,7 +461,9 @@ void load_percpu_segment(int cpu) loadsegment(fs, __KERNEL_PERCPU); #else __loadsegment_simple(gs, 0); - wrmsrl(MSR_GS_BASE, (unsigned long)per_cpu(irq_stack_union.gs_base, cpu)); + wrmsrl(MSR_GS_BASE, + (unsigned long)per_cpu(irq_stack_union.gs_base, cpu) - + (unsigned long)__per_cpu_start); #endif load_stack_canary_segment(); } diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 32d1899f48df..df5198e310fc 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -274,7 +274,11 @@ ENDPROC(start_cpu0) GLOBAL(initial_code) .quad x86_64_start_kernel GLOBAL(initial_gs) +#ifdef CONFIG_X86_PIE + .quad 0 +#else .quad INIT_PER_CPU_VAR(irq_stack_union) +#endif GLOBAL(initial_stack) /* * The SIZEOF_PTREGS gap is a convention which helps the in-kernel diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index 28dafed6c682..271829a1cc38 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c @@ -25,7 +25,7 @@ DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number); EXPORT_PER_CPU_SYMBOL(cpu_number); -#ifdef CONFIG_X86_64 +#if defined(CONFIG_X86_64) && !defined(CONFIG_X86_PIE) #define BOOT_PERCPU_OFFSET ((unsigned long)__per_cpu_load) #else #define BOOT_PERCPU_OFFSET 0 diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index f05f00acac89..48268d059ebe 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -186,9 +186,14 @@ SECTIONS /* * percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the * output PHDR, so the next output section - .init.text - should - * start another segment - init. + * start another segment - init. For Position Independent Code, the + * per-cpu section cannot be zero-based because everything is relative. */ +#ifdef CONFIG_X86_PIE + PERCPU_SECTION(INTERNODE_CACHE_BYTES) +#else PERCPU_VADDR(INTERNODE_CACHE_BYTES, 0, :percpu) +#endif ASSERT(SIZEOF(.data..percpu) < CONFIG_PHYSICAL_START, "per-CPU data too large - increase CONFIG_PHYSICAL_START") #endif @@ -364,7 +369,11 @@ SECTIONS * Per-cpu symbols which need to be offset from __per_cpu_load * for the boot processor. */ +#ifdef CONFIG_X86_PIE +#define INIT_PER_CPU(x) init_per_cpu__##x = x +#else #define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load +#endif INIT_PER_CPU(gdt_page); INIT_PER_CPU(irq_stack_union); @@ -374,7 +383,7 @@ INIT_PER_CPU(irq_stack_union); . = ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), "kernel image bigger than KERNEL_IMAGE_SIZE"); -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) && !defined(CONFIG_X86_PIE) . = ASSERT((irq_stack_union == 0), "irq_stack_union is not at start of per-cpu area"); #endif diff --git a/arch/x86/lib/cmpxchg16b_emu.S b/arch/x86/lib/cmpxchg16b_emu.S index 9b330242e740..254950604ae4 100644 --- a/arch/x86/lib/cmpxchg16b_emu.S +++ b/arch/x86/lib/cmpxchg16b_emu.S @@ -33,13 +33,13 @@ ENTRY(this_cpu_cmpxchg16b_emu) pushfq cli - cmpq PER_CPU_VAR((%rsi)), %rax + cmpq PER_CPU_VAR_ABS((%rsi)), %rax jne .Lnot_same - cmpq PER_CPU_VAR(8(%rsi)), %rdx + cmpq PER_CPU_VAR_ABS(8(%rsi)), %rdx jne .Lnot_same - movq %rbx, PER_CPU_VAR((%rsi)) - movq %rcx, PER_CPU_VAR(8(%rsi)) + movq %rbx, PER_CPU_VAR_ABS((%rsi)) + movq %rcx, PER_CPU_VAR_ABS(8(%rsi)) popfq mov $1, %al diff --git a/arch/x86/xen/xen-asm.S b/arch/x86/xen/xen-asm.S index dcd31fa39b5d..495d7f42f254 100644 --- a/arch/x86/xen/xen-asm.S +++ b/arch/x86/xen/xen-asm.S @@ -20,7 +20,7 @@ ENTRY(xen_irq_enable_direct) FRAME_BEGIN /* Unmask events */ - movb $0, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask + movb $0, PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_mask) /* * Preempt here doesn't matter because that will deal with any @@ -29,7 +29,7 @@ ENTRY(xen_irq_enable_direct) */ /* Test for pending */ - testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_pending + testb $0xff, PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_pending) jz 1f call check_events @@ -44,7 +44,7 @@ ENTRY(xen_irq_enable_direct) * non-zero. */ ENTRY(xen_irq_disable_direct) - movb $1, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask + movb $1, PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_mask) ret ENDPROC(xen_irq_disable_direct) @@ -58,7 +58,7 @@ ENDPROC(xen_irq_disable_direct) * x86 use opposite senses (mask vs enable). */ ENTRY(xen_save_fl_direct) - testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask + testb $0xff, PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_mask) setz %ah addb %ah, %ah ret @@ -79,7 +79,7 @@ ENTRY(xen_restore_fl_direct) #else testb $X86_EFLAGS_IF>>8, %ah #endif - setz PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask + setz PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_mask) /* * Preempt here doesn't matter because that will deal with any * pending interrupts. The pending check may end up being run @@ -87,7 +87,7 @@ ENTRY(xen_restore_fl_direct) */ /* check for unmasked and pending */ - cmpw $0x0001, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_pending + cmpw $0x0001, PER_CPU_VAR(xen_vcpu_info + XEN_vcpu_info_pending) jnz 1f call check_events 1: diff --git a/init/Kconfig b/init/Kconfig index 78cb2461012e..ccb1d8daf241 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1201,7 +1201,7 @@ config KALLSYMS_ALL config KALLSYMS_ABSOLUTE_PERCPU bool depends on KALLSYMS - default X86_64 && SMP + default X86_64 && SMP && !X86_PIE config KALLSYMS_BASE_RELATIVE bool -- 2.14.2.920.gcf0c67979c-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 14/27] x86/percpu: Adapt percpu for PIE support Date: Wed, 4 Oct 2017 14:19:50 -0700 Message-ID: <20171004212003.28296-15-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 UGVycGN1IHVzZXMgYSBjbGV2ZXIgZGVzaWduIHdoZXJlIHRoZSAucGVyY3UgRUxGIHNlY3Rpb24g aGFzIGEgdmlydHVhbAphZGRyZXNzIG9mIHplcm8gYW5kIHRoZSByZWxvY2F0aW9uIGNvZGUgYXZv aWQgcmVsb2NhdGluZyBzcGVjaWZpYwpzeW1ib2xzLiBJdCBtYWtlcyB0aGUgY29kZSBzaW1wbGUg YW5kIGVhc2lseSBhZGFwdGFibGUgd2l0aCBvciB3aXRob3V0ClNNUCBzdXBwb3J0LgoKVGhpcyBk ZXNpZ24gaXMgaW5jb21wYXRpYmxlIHdpdGggUElFIGJlY2F1c2UgZ2VuZXJhdGVkIGNvZGUgYWx3 YXlzIHRyeSB0bwphY2Nlc3MgdGhlIHplcm8gdmlydHVhbCBhZGRyZXNzIHJlbGF0aXZlIHRvIHRo ZSBkZWZhdWx0IG1hcHBpbmcgYWRkcmVzcy4KSXQgYmVjb21lcyBpbXBvc3NpYmxlIHdoZW4gS0FT TFIgaXMgY29uZmlndXJlZCB0byBnbyBiZWxvdyAtMkcuIFRoaXMKcGF0Y2ggc29sdmVzIHRoaXMg cHJvYmxlbSBieSByZW1vdmluZyB0aGUgemVybyBtYXBwaW5nIGFuZCBhZGFwdGluZyB0aGUgR1MK YmFzZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgZXhwZWN0ZWQgYWRkcmVzcy4gVGhlc2UgY2hhbmdl cyBhcmUgZG9uZSBvbmx5CndoZW4gUElFIGlzIGVuYWJsZWQuIFRoZSBvcmlnaW5hbCBpbXBsZW1l bnRhdGlvbiBpcyBrZXB0IGFzLWlzCmJ5IGRlZmF1bHQuCgpUaGUgYXNzZW1ibHkgYW5kIFBFUl9D UFUgbWFjcm9zIGFyZSBjaGFuZ2VkIHRvIHVzZSByZWxhdGl2ZSByZWZlcmVuY2VzCndoZW4gUElF IGlzIGVuYWJsZWQuCgpUaGUgS0FMTFNZTVNfQUJTT0xVVEVfUEVSQ1BVIGNvbmZpZ3VyYXRpb24g aXMgZGlzYWJsZWQgd2l0aCBQSUUgZ2l2ZW4KcGVyY3B1IHN5bWJvbHMgYXJlIG5vdCBhYnNvbHV0 ZSBpbiB0aGlzIGNhc2UuCgpQb3NpdGlvbiBJbmRlcGVuZGVudCBFeGVjdXRhYmxlIChQSUUpIHN1 cHBvcnQgd2lsbCBhbGxvdyB0byBleHRlbmRlZCB0aGUKS0FTTFIgcmFuZG9taXphdGlvbiByYW5n ZSBiZWxvdyB0aGUgLTJHIG1lbW9yeSBsaW1pdC4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBHYXJu aWVyIDx0aGdhcm5pZUBnb29nbGUuY29tPgotLS0KIGFyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMg ICAgICB8ICA0ICsrLS0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oICB8IDI1ICsrKysr KysrKysrKysrKysrKystLS0tLS0KIGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgICB8ICA0 ICsrKy0KIGFyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgICAgICB8ICA0ICsrKysKIGFyY2gveDg2 L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyB8ICAyICstCiBhcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5s ZHMuUyAgfCAxMyArKysrKysrKysrKy0tCiBhcmNoL3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUyAg fCAgOCArKysrLS0tLQogYXJjaC94ODYveGVuL3hlbi1hc20uUyAgICAgICAgIHwgMTIgKysrKysr LS0tLS0tCiBpbml0L0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgMiArLQogOSBmaWxlcyBj aGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TIGIvYXJjaC94ODYvZW50cnkvZW50cnlfNjQuUwppbmRl eCAxNWJkNTUzMGQyYWUuLmQzYTUyZDIzNDJhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkv ZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TCkBAIC0zOTIsNyArMzky LDcgQEAgRU5UUlkoX19zd2l0Y2hfdG9fYXNtKQogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJP VEVDVE9SCiAJbW92cQlUQVNLX3N0YWNrX2NhbmFyeSglcnNpKSwgJXJieAotCW1vdnEJJXJieCwg UEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uKStzdGFja19jYW5hcnlfb2Zmc2V0CisJbW92cQkl cmJ4LCBQRVJfQ1BVX1ZBUihpcnFfc3RhY2tfdW5pb24gKyBzdGFja19jYW5hcnlfb2Zmc2V0KQog I2VuZGlmCiAKIAkvKiByZXN0b3JlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgKi8KQEAgLTgwOCw3 ICs4MDgsNyBAQCBhcGljaW50ZXJydXB0IElSUV9XT1JLX1ZFQ1RPUgkJCWlycV93b3JrX2ludGVy cnVwdAkJc21wX2lycV93b3JrX2ludGVycnVwdAogLyoKICAqIEV4Y2VwdGlvbiBlbnRyeSBwb2lu dHMuCiAgKi8KLSNkZWZpbmUgQ1BVX1RTU19JU1QoeCkgUEVSX0NQVV9WQVIoY3B1X3RzcykgKyAo VFNTX2lzdCArICgoeCkgLSAxKSAqIDgpCisjZGVmaW5lIENQVV9UU1NfSVNUKHgpIFBFUl9DUFVf VkFSKGNwdV90c3MgKyAoVFNTX2lzdCArICgoeCkgLSAxKSAqIDgpKQogCiAubWFjcm8gaWR0ZW50 cnkgc3ltIGRvX3N5bSBoYXNfZXJyb3JfY29kZTpyZXEgcGFyYW5vaWQ9MCBzaGlmdF9pc3Q9LTEK IEVOVFJZKFxzeW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IGIyMWE0NzVmZDdlZC4uMDcyNTBm MTA5OWI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNCw5ICs0LDExIEBACiAjaWZkZWYgQ09O RklHX1g4Nl82NAogI2RlZmluZSBfX3BlcmNwdV9zZWcJCWdzCiAjZGVmaW5lIF9fcGVyY3B1X21v dl9vcAkJbW92cQorI2RlZmluZSBfX3BlcmNwdV9yZWwJCSglcmlwKQogI2Vsc2UKICNkZWZpbmUg X19wZXJjcHVfc2VnCQlmcwogI2RlZmluZSBfX3BlcmNwdV9tb3Zfb3AJCW1vdmwKKyNkZWZpbmUg X19wZXJjcHVfcmVsCiAjZW5kaWYKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwpAQCAtMjcsMTAgKzI5 LDE0IEBACiAjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCQkJXAogCV9fcGVyY3B1X21vdl9v cCAlX19wZXJjcHVfc2VnOnRoaXNfY3B1X29mZiwgcmVnOwkJXAogCWxlYSB2YXIocmVnKSwgcmVn Ci0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJJV9fcGVyY3B1X3NlZzp2YXIKKy8qIENvbXBhdGli bGUgd2l0aCBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlICovCisjZGVmaW5lIFBFUl9DUFVfVkFS KHZhcikJCSVfX3BlcmNwdV9zZWc6KHZhcikjI19fcGVyY3B1X3JlbAorLyogUmFyZSBhYnNvbHV0 ZSByZWZlcmVuY2UgKi8KKyNkZWZpbmUgUEVSX0NQVV9WQVJfQUJTKHZhcikJCSVfX3BlcmNwdV9z ZWc6dmFyCiAjZWxzZSAvKiAhIFNNUCAqLwogI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQlfX3Bl cmNwdV9tb3Zfb3AgJHZhciwgcmVnCi0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJdmFyCisjZGVm aW5lIFBFUl9DUFVfVkFSKHZhcikJKHZhcikjI19fcGVyY3B1X3JlbAorI2RlZmluZSBQRVJfQ1BV X1ZBUl9BQlModmFyKQl2YXIKICNlbmRpZgkvKiBTTVAgKi8KIAogI2lmZGVmIENPTkZJR19YODZf NjRfU01QCkBAIC0yMDgsMjcgKzIxNCwzNCBAQCBkbyB7CQkJCQkJCQkJXAogCXBmb19yZXRfXzsJ CQkJCVwKIH0pCiAKKy8qIFBvc2l0aW9uIEluZGVwZW5kZW50IGNvZGUgdXNlcyByZWxhdGl2ZSBh ZGRyZXNzZXMgb25seSAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisjZGVmaW5lIF9fcGVyY3B1 X3N0YWJsZV9hcmcgX19wZXJjcHVfYXJnKGExKQorI2Vsc2UKKyNkZWZpbmUgX19wZXJjcHVfc3Rh YmxlX2FyZyBfX3BlcmNwdV9hcmcoUDEpCisjZW5kaWYKKwogI2RlZmluZSBwZXJjcHVfc3RhYmxl X29wKG9wLCB2YXIpCQkJXAogKHsJCQkJCQkJXAogCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJ XAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCi0JCWFzbShv cCAiYiAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJiICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1xIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCi0JCWFzbShv cCAidyAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJ3ICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShv cCAibCAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJsICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgODoJCQkJCQlcCi0JCWFzbShv cCAicSAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJxICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2Vy bmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYzkx NzZiYWU3ZmQ4Li44NzMyYzllNzE5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUv Y29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNDYxLDcgKzQ2 MSw5IEBAIHZvaWQgbG9hZF9wZXJjcHVfc2VnbWVudChpbnQgY3B1KQogCWxvYWRzZWdtZW50KGZz LCBfX0tFUk5FTF9QRVJDUFUpOwogI2Vsc2UKIAlfX2xvYWRzZWdtZW50X3NpbXBsZShncywgMCk7 Ci0Jd3Jtc3JsKE1TUl9HU19CQVNFLCAodW5zaWduZWQgbG9uZylwZXJfY3B1KGlycV9zdGFja191 bmlvbi5nc19iYXNlLCBjcHUpKTsKKwl3cm1zcmwoTVNSX0dTX0JBU0UsCisJICAgICAgICh1bnNp Z25lZCBsb25nKXBlcl9jcHUoaXJxX3N0YWNrX3VuaW9uLmdzX2Jhc2UsIGNwdSkgLQorCSAgICAg ICAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQpOwogI2VuZGlmCiAJbG9hZF9zdGFja19j YW5hcnlfc2VnbWVudCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQu UyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMzJkMTg5OWY0OGRmLi5kZjUxOThl MzEwZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94 ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtMjc0LDcgKzI3NCwxMSBAQCBFTkRQUk9DKHN0YXJ0X2Nw dTApCiAJR0xPQkFMKGluaXRpYWxfY29kZSkKIAkucXVhZAl4ODZfNjRfc3RhcnRfa2VybmVsCiAJ R0xPQkFMKGluaXRpYWxfZ3MpCisjaWZkZWYgQ09ORklHX1g4Nl9QSUUKKwkucXVhZAkwCisjZWxz ZQogCS5xdWFkCUlOSVRfUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uKQorI2VuZGlmCiAJR0xP QkFMKGluaXRpYWxfc3RhY2spCiAJLyoKIAkgKiBUaGUgU0laRU9GX1BUUkVHUyBnYXAgaXMgYSBj b252ZW50aW9uIHdoaWNoIGhlbHBzIHRoZSBpbi1rZXJuZWwKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpp bmRleCAyOGRhZmVkNmM2ODIuLjI3MTgyOWExY2MzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2Vy bmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpA QCAtMjUsNyArMjUsNyBAQAogREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoaW50LCBjcHVfbnVt YmVyKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfbnVtYmVyKTsKIAotI2lmZGVmIENPTkZJ R19YODZfNjQKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmICFkZWZpbmVkKENPTkZJR19Y ODZfUElFKQogI2RlZmluZSBCT09UX1BFUkNQVV9PRkZTRVQgKCh1bnNpZ25lZCBsb25nKV9fcGVy X2NwdV9sb2FkKQogI2Vsc2UKICNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKZGlmZiAtLWdp dCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGlu dXgubGRzLlMKaW5kZXggZjA1ZjAwYWNhYzg5Li40ODI2OGQwNTllYmUgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4 Lmxkcy5TCkBAIC0xODYsOSArMTg2LDE0IEBAIFNFQ1RJT05TCiAJLyoKIAkgKiBwZXJjcHUgb2Zm c2V0cyBhcmUgemVyby1iYXNlZCBvbiBTTVAuICBQRVJDUFVfVkFERFIoKSBjaGFuZ2VzIHRoZQog CSAqIG91dHB1dCBQSERSLCBzbyB0aGUgbmV4dCBvdXRwdXQgc2VjdGlvbiAtIC5pbml0LnRleHQg LSBzaG91bGQKLQkgKiBzdGFydCBhbm90aGVyIHNlZ21lbnQgLSBpbml0LgorCSAqIHN0YXJ0IGFu b3RoZXIgc2VnbWVudCAtIGluaXQuIEZvciBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlLCB0aGUK KwkgKiBwZXItY3B1IHNlY3Rpb24gY2Fubm90IGJlIHplcm8tYmFzZWQgYmVjYXVzZSBldmVyeXRo aW5nIGlzIHJlbGF0aXZlLgogCSAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisJUEVSQ1BVX1NF Q1RJT04oSU5URVJOT0RFX0NBQ0hFX0JZVEVTKQorI2Vsc2UKIAlQRVJDUFVfVkFERFIoSU5URVJO T0RFX0NBQ0hFX0JZVEVTLCAwLCA6cGVyY3B1KQorI2VuZGlmCiAJQVNTRVJUKFNJWkVPRiguZGF0 YS4ucGVyY3B1KSA8IENPTkZJR19QSFlTSUNBTF9TVEFSVCwKIAkgICAgICAgInBlci1DUFUgZGF0 YSB0b28gbGFyZ2UgLSBpbmNyZWFzZSBDT05GSUdfUEhZU0lDQUxfU1RBUlQiKQogI2VuZGlmCkBA IC0zNjQsNyArMzY5LDExIEBAIFNFQ1RJT05TCiAgKiBQZXItY3B1IHN5bWJvbHMgd2hpY2ggbmVl ZCB0byBiZSBvZmZzZXQgZnJvbSBfX3Blcl9jcHVfbG9hZAogICogZm9yIHRoZSBib290IHByb2Nl c3Nvci4KICAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisjZGVmaW5lIElOSVRfUEVSX0NQVSh4 KSBpbml0X3Blcl9jcHVfXyMjeCA9IHgKKyNlbHNlCiAjZGVmaW5lIElOSVRfUEVSX0NQVSh4KSBp bml0X3Blcl9jcHVfXyMjeCA9IHggKyBfX3Blcl9jcHVfbG9hZAorI2VuZGlmCiBJTklUX1BFUl9D UFUoZ2R0X3BhZ2UpOwogSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CiAKQEAgLTM3NCw3 ICszODMsNyBAQCBJTklUX1BFUl9DUFUoaXJxX3N0YWNrX3VuaW9uKTsKIC4gPSBBU1NFUlQoKF9l bmQgLSBfdGV4dCA8PSBLRVJORUxfSU1BR0VfU0laRSksCiAJICAgImtlcm5lbCBpbWFnZSBiaWdn ZXIgdGhhbiBLRVJORUxfSU1BR0VfU0laRSIpOwogCi0jaWZkZWYgQ09ORklHX1NNUAorI2lmIGRl ZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9QSUUpCiAuID0gQVNTRVJU KChpcnFfc3RhY2tfdW5pb24gPT0gMCksCiAgICAgICAgICAgICJpcnFfc3RhY2tfdW5pb24gaXMg bm90IGF0IHN0YXJ0IG9mIHBlci1jcHUgYXJlYSIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUyBiL2FyY2gveDg2L2xpYi9jbXB4Y2hnMTZiX2VtdS5T CmluZGV4IDliMzMwMjQyZTc0MC4uMjU0OTUwNjA0YWU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9s aWIvY21weGNoZzE2Yl9lbXUuUworKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUwpA QCAtMzMsMTMgKzMzLDEzIEBAIEVOVFJZKHRoaXNfY3B1X2NtcHhjaGcxNmJfZW11KQogCXB1c2hm cQogCWNsaQogCi0JY21wcSBQRVJfQ1BVX1ZBUigoJXJzaSkpLCAlcmF4CisJY21wcSBQRVJfQ1BV X1ZBUl9BQlMoKCVyc2kpKSwgJXJheAogCWpuZSAuTG5vdF9zYW1lCi0JY21wcSBQRVJfQ1BVX1ZB Uig4KCVyc2kpKSwgJXJkeAorCWNtcHEgUEVSX0NQVV9WQVJfQUJTKDgoJXJzaSkpLCAlcmR4CiAJ am5lIC5Mbm90X3NhbWUKIAotCW1vdnEgJXJieCwgUEVSX0NQVV9WQVIoKCVyc2kpKQotCW1vdnEg JXJjeCwgUEVSX0NQVV9WQVIoOCglcnNpKSkKKwltb3ZxICVyYngsIFBFUl9DUFVfVkFSX0FCUygo JXJzaSkpCisJbW92cSAlcmN4LCBQRVJfQ1BVX1ZBUl9BQlMoOCglcnNpKSkKIAogCXBvcGZxCiAJ bW92ICQxLCAlYWwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMgYi9hcmNoL3g4 Ni94ZW4veGVuLWFzbS5TCmluZGV4IGRjZDMxZmEzOWI1ZC4uNDk1ZDdmNDJmMjU0IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbS5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMK QEAgLTIwLDcgKzIwLDcgQEAKIEVOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKIAlGUkFNRV9C RUdJTgogCS8qIFVubWFzayBldmVudHMgKi8KLQltb3ZiICQwLCBQRVJfQ1BVX1ZBUih4ZW5fdmNw dV9pbmZvKSArIFhFTl92Y3B1X2luZm9fbWFzaworCW1vdmIgJDAsIFBFUl9DUFVfVkFSKHhlbl92 Y3B1X2luZm8gKyBYRU5fdmNwdV9pbmZvX21hc2spCiAKIAkvKgogCSAqIFByZWVtcHQgaGVyZSBk b2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoYXQgd2lsbCBkZWFsIHdpdGggYW55CkBAIC0yOSw3ICsy OSw3IEBAIEVOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKIAkgKi8KIAogCS8qIFRlc3QgZm9y IHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBY RU5fdmNwdV9pbmZvX3BlbmRpbmcKKwl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVf aW5mbyArIFhFTl92Y3B1X2luZm9fcGVuZGluZykKIAlqeiAxZgogCiAJY2FsbCBjaGVja19ldmVu dHMKQEAgLTQ0LDcgKzQ0LDcgQEAgRU5UUlkoeGVuX2lycV9lbmFibGVfZGlyZWN0KQogICogbm9u LXplcm8uCiAgKi8KIEVOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JbW92YiAkMSwgUEVS X0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKwltb3ZiICQxLCBQ RVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvICsgWEVOX3ZjcHVfaW5mb19tYXNrKQogCXJldAogRU5E UFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQogCkBAIC01OCw3ICs1OCw3IEBAIEVORFBST0Mo eGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKICAqIHg4NiB1c2Ugb3Bwb3NpdGUgc2Vuc2VzIChtYXNr IHZzIGVuYWJsZSkuCiAgKi8KIEVOVFJZKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQl0ZXN0YiAkMHhm ZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKwl0ZXN0 YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbyArIFhFTl92Y3B1X2luZm9fbWFzaykK IAlzZXR6ICVhaAogCWFkZGIgJWFoLCAlYWgKIAlyZXQKQEAgLTc5LDcgKzc5LDcgQEAgRU5UUlko eGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQogI2Vsc2UKIAl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwg JWFoCiAjZW5kaWYKLQlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVOX3ZjcHVf aW5mb19tYXNrCisJc2V0eiBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvICsgWEVOX3ZjcHVfaW5m b19tYXNrKQogCS8qCiAJICogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhh dCB3aWxsIGRlYWwgd2l0aCBhbnkKIAkgKiBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGlu ZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nIHJ1bgpAQCAtODcsNyArODcsNyBAQCBFTlRSWSh4ZW5f cmVzdG9yZV9mbF9kaXJlY3QpCiAJICovCiAKIAkvKiBjaGVjayBmb3IgdW5tYXNrZWQgYW5kIHBl bmRpbmcgKi8KLQljbXB3ICQweDAwMDEsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVO X3ZjcHVfaW5mb19wZW5kaW5nCisJY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9p bmZvICsgWEVOX3ZjcHVfaW5mb19wZW5kaW5nKQogCWpueiAxZgogCWNhbGwgY2hlY2tfZXZlbnRz CiAxOgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDc4Y2Iy NDYxMDEyZS4uY2NiMWQ4ZGFmMjQxIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5p dC9LY29uZmlnCkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBjb25maWcgS0FMTFNZTVNfQUxMCiBjb25m aWcgS0FMTFNZTVNfQUJTT0xVVEVfUEVSQ1BVCiAJYm9vbAogCWRlcGVuZHMgb24gS0FMTFNZTVMK LQlkZWZhdWx0IFg4Nl82NCAmJiBTTVAKKwlkZWZhdWx0IFg4Nl82NCAmJiBTTVAgJiYgIVg4Nl9Q SUUKIAogY29uZmlnIEtBTExTWU1TX0JBU0VfUkVMQVRJVkUKIAlib29sCi0tIAoyLjE0LjIuOTIw LmdjZjBjNjc5NzljLWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 14/27] x86/percpu: Adapt percpu for PIE support Date: Wed, 4 Oct 2017 14:19:50 -0700 Message-ID: <20171004212003.28296-15-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 UGVycGN1IHVzZXMgYSBjbGV2ZXIgZGVzaWduIHdoZXJlIHRoZSAucGVyY3UgRUxGIHNlY3Rpb24g aGFzIGEgdmlydHVhbAphZGRyZXNzIG9mIHplcm8gYW5kIHRoZSByZWxvY2F0aW9uIGNvZGUgYXZv aWQgcmVsb2NhdGluZyBzcGVjaWZpYwpzeW1ib2xzLiBJdCBtYWtlcyB0aGUgY29kZSBzaW1wbGUg YW5kIGVhc2lseSBhZGFwdGFibGUgd2l0aCBvciB3aXRob3V0ClNNUCBzdXBwb3J0LgoKVGhpcyBk ZXNpZ24gaXMgaW5jb21wYXRpYmxlIHdpdGggUElFIGJlY2F1c2UgZ2VuZXJhdGVkIGNvZGUgYWx3 YXlzIHRyeSB0bwphY2Nlc3MgdGhlIHplcm8gdmlydHVhbCBhZGRyZXNzIHJlbGF0aXZlIHRvIHRo ZSBkZWZhdWx0IG1hcHBpbmcgYWRkcmVzcy4KSXQgYmVjb21lcyBpbXBvc3NpYmxlIHdoZW4gS0FT TFIgaXMgY29uZmlndXJlZCB0byBnbyBiZWxvdyAtMkcuIFRoaXMKcGF0Y2ggc29sdmVzIHRoaXMg cHJvYmxlbSBieSByZW1vdmluZyB0aGUgemVybyBtYXBwaW5nIGFuZCBhZGFwdGluZyB0aGUgR1MK YmFzZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgZXhwZWN0ZWQgYWRkcmVzcy4gVGhlc2UgY2hhbmdl cyBhcmUgZG9uZSBvbmx5CndoZW4gUElFIGlzIGVuYWJsZWQuIFRoZSBvcmlnaW5hbCBpbXBsZW1l bnRhdGlvbiBpcyBrZXB0IGFzLWlzCmJ5IGRlZmF1bHQuCgpUaGUgYXNzZW1ibHkgYW5kIFBFUl9D UFUgbWFjcm9zIGFyZSBjaGFuZ2VkIHRvIHVzZSByZWxhdGl2ZSByZWZlcmVuY2VzCndoZW4gUElF IGlzIGVuYWJsZWQuCgpUaGUgS0FMTFNZTVNfQUJTT0xVVEVfUEVSQ1BVIGNvbmZpZ3VyYXRpb24g aXMgZGlzYWJsZWQgd2l0aCBQSUUgZ2l2ZW4KcGVyY3B1IHN5bWJvbHMgYXJlIG5vdCBhYnNvbHV0 ZSBpbiB0aGlzIGNhc2UuCgpQb3NpdGlvbiBJbmRlcGVuZGVudCBFeGVjdXRhYmxlIChQSUUpIHN1 cHBvcnQgd2lsbCBhbGxvdyB0byBleHRlbmRlZCB0aGUKS0FTTFIgcmFuZG9taXphdGlvbiByYW5n ZSBiZWxvdyB0aGUgLTJHIG1lbW9yeSBsaW1pdC4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBHYXJu aWVyIDx0aGdhcm5pZUBnb29nbGUuY29tPgotLS0KIGFyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMg ICAgICB8ICA0ICsrLS0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oICB8IDI1ICsrKysr KysrKysrKysrKysrKystLS0tLS0KIGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgICB8ICA0 ICsrKy0KIGFyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgICAgICB8ICA0ICsrKysKIGFyY2gveDg2 L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyB8ICAyICstCiBhcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5s ZHMuUyAgfCAxMyArKysrKysrKysrKy0tCiBhcmNoL3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUyAg fCAgOCArKysrLS0tLQogYXJjaC94ODYveGVuL3hlbi1hc20uUyAgICAgICAgIHwgMTIgKysrKysr LS0tLS0tCiBpbml0L0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgMiArLQogOSBmaWxlcyBj aGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TIGIvYXJjaC94ODYvZW50cnkvZW50cnlfNjQuUwppbmRl eCAxNWJkNTUzMGQyYWUuLmQzYTUyZDIzNDJhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkv ZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TCkBAIC0zOTIsNyArMzky LDcgQEAgRU5UUlkoX19zd2l0Y2hfdG9fYXNtKQogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJP VEVDVE9SCiAJbW92cQlUQVNLX3N0YWNrX2NhbmFyeSglcnNpKSwgJXJieAotCW1vdnEJJXJieCwg UEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uKStzdGFja19jYW5hcnlfb2Zmc2V0CisJbW92cQkl cmJ4LCBQRVJfQ1BVX1ZBUihpcnFfc3RhY2tfdW5pb24gKyBzdGFja19jYW5hcnlfb2Zmc2V0KQog I2VuZGlmCiAKIAkvKiByZXN0b3JlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgKi8KQEAgLTgwOCw3 ICs4MDgsNyBAQCBhcGljaW50ZXJydXB0IElSUV9XT1JLX1ZFQ1RPUgkJCWlycV93b3JrX2ludGVy cnVwdAkJc21wX2lycV93b3JrX2ludGVycnVwdAogLyoKICAqIEV4Y2VwdGlvbiBlbnRyeSBwb2lu dHMuCiAgKi8KLSNkZWZpbmUgQ1BVX1RTU19JU1QoeCkgUEVSX0NQVV9WQVIoY3B1X3RzcykgKyAo VFNTX2lzdCArICgoeCkgLSAxKSAqIDgpCisjZGVmaW5lIENQVV9UU1NfSVNUKHgpIFBFUl9DUFVf VkFSKGNwdV90c3MgKyAoVFNTX2lzdCArICgoeCkgLSAxKSAqIDgpKQogCiAubWFjcm8gaWR0ZW50 cnkgc3ltIGRvX3N5bSBoYXNfZXJyb3JfY29kZTpyZXEgcGFyYW5vaWQ9MCBzaGlmdF9pc3Q9LTEK IEVOVFJZKFxzeW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IGIyMWE0NzVmZDdlZC4uMDcyNTBm MTA5OWI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNCw5ICs0LDExIEBACiAjaWZkZWYgQ09O RklHX1g4Nl82NAogI2RlZmluZSBfX3BlcmNwdV9zZWcJCWdzCiAjZGVmaW5lIF9fcGVyY3B1X21v dl9vcAkJbW92cQorI2RlZmluZSBfX3BlcmNwdV9yZWwJCSglcmlwKQogI2Vsc2UKICNkZWZpbmUg X19wZXJjcHVfc2VnCQlmcwogI2RlZmluZSBfX3BlcmNwdV9tb3Zfb3AJCW1vdmwKKyNkZWZpbmUg X19wZXJjcHVfcmVsCiAjZW5kaWYKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwpAQCAtMjcsMTAgKzI5 LDE0IEBACiAjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpCQkJCQkJXAogCV9fcGVyY3B1X21vdl9v cCAlX19wZXJjcHVfc2VnOnRoaXNfY3B1X29mZiwgcmVnOwkJXAogCWxlYSB2YXIocmVnKSwgcmVn Ci0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJJV9fcGVyY3B1X3NlZzp2YXIKKy8qIENvbXBhdGli bGUgd2l0aCBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlICovCisjZGVmaW5lIFBFUl9DUFVfVkFS KHZhcikJCSVfX3BlcmNwdV9zZWc6KHZhcikjI19fcGVyY3B1X3JlbAorLyogUmFyZSBhYnNvbHV0 ZSByZWZlcmVuY2UgKi8KKyNkZWZpbmUgUEVSX0NQVV9WQVJfQUJTKHZhcikJCSVfX3BlcmNwdV9z ZWc6dmFyCiAjZWxzZSAvKiAhIFNNUCAqLwogI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQlfX3Bl cmNwdV9tb3Zfb3AgJHZhciwgcmVnCi0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJdmFyCisjZGVm aW5lIFBFUl9DUFVfVkFSKHZhcikJKHZhcikjI19fcGVyY3B1X3JlbAorI2RlZmluZSBQRVJfQ1BV X1ZBUl9BQlModmFyKQl2YXIKICNlbmRpZgkvKiBTTVAgKi8KIAogI2lmZGVmIENPTkZJR19YODZf NjRfU01QCkBAIC0yMDgsMjcgKzIxNCwzNCBAQCBkbyB7CQkJCQkJCQkJXAogCXBmb19yZXRfXzsJ CQkJCVwKIH0pCiAKKy8qIFBvc2l0aW9uIEluZGVwZW5kZW50IGNvZGUgdXNlcyByZWxhdGl2ZSBh ZGRyZXNzZXMgb25seSAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisjZGVmaW5lIF9fcGVyY3B1 X3N0YWJsZV9hcmcgX19wZXJjcHVfYXJnKGExKQorI2Vsc2UKKyNkZWZpbmUgX19wZXJjcHVfc3Rh YmxlX2FyZyBfX3BlcmNwdV9hcmcoUDEpCisjZW5kaWYKKwogI2RlZmluZSBwZXJjcHVfc3RhYmxl X29wKG9wLCB2YXIpCQkJXAogKHsJCQkJCQkJXAogCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJ XAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCi0JCWFzbShv cCAiYiAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJiICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1xIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCi0JCWFzbShv cCAidyAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJ3ICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCi0JCWFzbShv cCAibCAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJsICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgODoJCQkJCQlcCi0JCWFzbShv cCAicSAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJYXNtKG9wICJxICJfX3BlcmNwdV9zdGFi bGVfYXJnICIsJTAiCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKIAkJICAgIDogInAi ICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2Vy bmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYzkx NzZiYWU3ZmQ4Li44NzMyYzllNzE5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUv Y29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNDYxLDcgKzQ2 MSw5IEBAIHZvaWQgbG9hZF9wZXJjcHVfc2VnbWVudChpbnQgY3B1KQogCWxvYWRzZWdtZW50KGZz LCBfX0tFUk5FTF9QRVJDUFUpOwogI2Vsc2UKIAlfX2xvYWRzZWdtZW50X3NpbXBsZShncywgMCk7 Ci0Jd3Jtc3JsKE1TUl9HU19CQVNFLCAodW5zaWduZWQgbG9uZylwZXJfY3B1KGlycV9zdGFja191 bmlvbi5nc19iYXNlLCBjcHUpKTsKKwl3cm1zcmwoTVNSX0dTX0JBU0UsCisJICAgICAgICh1bnNp Z25lZCBsb25nKXBlcl9jcHUoaXJxX3N0YWNrX3VuaW9uLmdzX2Jhc2UsIGNwdSkgLQorCSAgICAg ICAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQpOwogI2VuZGlmCiAJbG9hZF9zdGFja19j YW5hcnlfc2VnbWVudCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQu UyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMzJkMTg5OWY0OGRmLi5kZjUxOThl MzEwZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94 ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtMjc0LDcgKzI3NCwxMSBAQCBFTkRQUk9DKHN0YXJ0X2Nw dTApCiAJR0xPQkFMKGluaXRpYWxfY29kZSkKIAkucXVhZAl4ODZfNjRfc3RhcnRfa2VybmVsCiAJ R0xPQkFMKGluaXRpYWxfZ3MpCisjaWZkZWYgQ09ORklHX1g4Nl9QSUUKKwkucXVhZAkwCisjZWxz ZQogCS5xdWFkCUlOSVRfUEVSX0NQVV9WQVIoaXJxX3N0YWNrX3VuaW9uKQorI2VuZGlmCiAJR0xP QkFMKGluaXRpYWxfc3RhY2spCiAJLyoKIAkgKiBUaGUgU0laRU9GX1BUUkVHUyBnYXAgaXMgYSBj b252ZW50aW9uIHdoaWNoIGhlbHBzIHRoZSBpbi1rZXJuZWwKZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpp bmRleCAyOGRhZmVkNmM2ODIuLjI3MTgyOWExY2MzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2Vy bmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpA QCAtMjUsNyArMjUsNyBAQAogREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoaW50LCBjcHVfbnVt YmVyKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfbnVtYmVyKTsKIAotI2lmZGVmIENPTkZJ R19YODZfNjQKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmICFkZWZpbmVkKENPTkZJR19Y ODZfUElFKQogI2RlZmluZSBCT09UX1BFUkNQVV9PRkZTRVQgKCh1bnNpZ25lZCBsb25nKV9fcGVy X2NwdV9sb2FkKQogI2Vsc2UKICNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKZGlmZiAtLWdp dCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGlu dXgubGRzLlMKaW5kZXggZjA1ZjAwYWNhYzg5Li40ODI2OGQwNTllYmUgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4 Lmxkcy5TCkBAIC0xODYsOSArMTg2LDE0IEBAIFNFQ1RJT05TCiAJLyoKIAkgKiBwZXJjcHUgb2Zm c2V0cyBhcmUgemVyby1iYXNlZCBvbiBTTVAuICBQRVJDUFVfVkFERFIoKSBjaGFuZ2VzIHRoZQog CSAqIG91dHB1dCBQSERSLCBzbyB0aGUgbmV4dCBvdXRwdXQgc2VjdGlvbiAtIC5pbml0LnRleHQg LSBzaG91bGQKLQkgKiBzdGFydCBhbm90aGVyIHNlZ21lbnQgLSBpbml0LgorCSAqIHN0YXJ0IGFu b3RoZXIgc2VnbWVudCAtIGluaXQuIEZvciBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlLCB0aGUK KwkgKiBwZXItY3B1IHNlY3Rpb24gY2Fubm90IGJlIHplcm8tYmFzZWQgYmVjYXVzZSBldmVyeXRo aW5nIGlzIHJlbGF0aXZlLgogCSAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisJUEVSQ1BVX1NF Q1RJT04oSU5URVJOT0RFX0NBQ0hFX0JZVEVTKQorI2Vsc2UKIAlQRVJDUFVfVkFERFIoSU5URVJO T0RFX0NBQ0hFX0JZVEVTLCAwLCA6cGVyY3B1KQorI2VuZGlmCiAJQVNTRVJUKFNJWkVPRiguZGF0 YS4ucGVyY3B1KSA8IENPTkZJR19QSFlTSUNBTF9TVEFSVCwKIAkgICAgICAgInBlci1DUFUgZGF0 YSB0b28gbGFyZ2UgLSBpbmNyZWFzZSBDT05GSUdfUEhZU0lDQUxfU1RBUlQiKQogI2VuZGlmCkBA IC0zNjQsNyArMzY5LDExIEBAIFNFQ1RJT05TCiAgKiBQZXItY3B1IHN5bWJvbHMgd2hpY2ggbmVl ZCB0byBiZSBvZmZzZXQgZnJvbSBfX3Blcl9jcHVfbG9hZAogICogZm9yIHRoZSBib290IHByb2Nl c3Nvci4KICAqLworI2lmZGVmIENPTkZJR19YODZfUElFCisjZGVmaW5lIElOSVRfUEVSX0NQVSh4 KSBpbml0X3Blcl9jcHVfXyMjeCA9IHgKKyNlbHNlCiAjZGVmaW5lIElOSVRfUEVSX0NQVSh4KSBp bml0X3Blcl9jcHVfXyMjeCA9IHggKyBfX3Blcl9jcHVfbG9hZAorI2VuZGlmCiBJTklUX1BFUl9D UFUoZ2R0X3BhZ2UpOwogSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CiAKQEAgLTM3NCw3 ICszODMsNyBAQCBJTklUX1BFUl9DUFUoaXJxX3N0YWNrX3VuaW9uKTsKIC4gPSBBU1NFUlQoKF9l bmQgLSBfdGV4dCA8PSBLRVJORUxfSU1BR0VfU0laRSksCiAJICAgImtlcm5lbCBpbWFnZSBiaWdn ZXIgdGhhbiBLRVJORUxfSU1BR0VfU0laRSIpOwogCi0jaWZkZWYgQ09ORklHX1NNUAorI2lmIGRl ZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl9QSUUpCiAuID0gQVNTRVJU KChpcnFfc3RhY2tfdW5pb24gPT0gMCksCiAgICAgICAgICAgICJpcnFfc3RhY2tfdW5pb24gaXMg bm90IGF0IHN0YXJ0IG9mIHBlci1jcHUgYXJlYSIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUyBiL2FyY2gveDg2L2xpYi9jbXB4Y2hnMTZiX2VtdS5T CmluZGV4IDliMzMwMjQyZTc0MC4uMjU0OTUwNjA0YWU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9s aWIvY21weGNoZzE2Yl9lbXUuUworKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZzE2Yl9lbXUuUwpA QCAtMzMsMTMgKzMzLDEzIEBAIEVOVFJZKHRoaXNfY3B1X2NtcHhjaGcxNmJfZW11KQogCXB1c2hm cQogCWNsaQogCi0JY21wcSBQRVJfQ1BVX1ZBUigoJXJzaSkpLCAlcmF4CisJY21wcSBQRVJfQ1BV X1ZBUl9BQlMoKCVyc2kpKSwgJXJheAogCWpuZSAuTG5vdF9zYW1lCi0JY21wcSBQRVJfQ1BVX1ZB Uig4KCVyc2kpKSwgJXJkeAorCWNtcHEgUEVSX0NQVV9WQVJfQUJTKDgoJXJzaSkpLCAlcmR4CiAJ am5lIC5Mbm90X3NhbWUKIAotCW1vdnEgJXJieCwgUEVSX0NQVV9WQVIoKCVyc2kpKQotCW1vdnEg JXJjeCwgUEVSX0NQVV9WQVIoOCglcnNpKSkKKwltb3ZxICVyYngsIFBFUl9DUFVfVkFSX0FCUygo JXJzaSkpCisJbW92cSAlcmN4LCBQRVJfQ1BVX1ZBUl9BQlMoOCglcnNpKSkKIAogCXBvcGZxCiAJ bW92ICQxLCAlYWwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMgYi9hcmNoL3g4 Ni94ZW4veGVuLWFzbS5TCmluZGV4IGRjZDMxZmEzOWI1ZC4uNDk1ZDdmNDJmMjU0IDEwMDY0NAot LS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbS5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMK QEAgLTIwLDcgKzIwLDcgQEAKIEVOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKIAlGUkFNRV9C RUdJTgogCS8qIFVubWFzayBldmVudHMgKi8KLQltb3ZiICQwLCBQRVJfQ1BVX1ZBUih4ZW5fdmNw dV9pbmZvKSArIFhFTl92Y3B1X2luZm9fbWFzaworCW1vdmIgJDAsIFBFUl9DUFVfVkFSKHhlbl92 Y3B1X2luZm8gKyBYRU5fdmNwdV9pbmZvX21hc2spCiAKIAkvKgogCSAqIFByZWVtcHQgaGVyZSBk b2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoYXQgd2lsbCBkZWFsIHdpdGggYW55CkBAIC0yOSw3ICsy OSw3IEBAIEVOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKIAkgKi8KIAogCS8qIFRlc3QgZm9y IHBlbmRpbmcgKi8KLQl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBY RU5fdmNwdV9pbmZvX3BlbmRpbmcKKwl0ZXN0YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVf aW5mbyArIFhFTl92Y3B1X2luZm9fcGVuZGluZykKIAlqeiAxZgogCiAJY2FsbCBjaGVja19ldmVu dHMKQEAgLTQ0LDcgKzQ0LDcgQEAgRU5UUlkoeGVuX2lycV9lbmFibGVfZGlyZWN0KQogICogbm9u LXplcm8uCiAgKi8KIEVOVFJZKHhlbl9pcnFfZGlzYWJsZV9kaXJlY3QpCi0JbW92YiAkMSwgUEVS X0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKwltb3ZiICQxLCBQ RVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvICsgWEVOX3ZjcHVfaW5mb19tYXNrKQogCXJldAogRU5E UFJPQyh4ZW5faXJxX2Rpc2FibGVfZGlyZWN0KQogCkBAIC01OCw3ICs1OCw3IEBAIEVORFBST0Mo eGVuX2lycV9kaXNhYmxlX2RpcmVjdCkKICAqIHg4NiB1c2Ugb3Bwb3NpdGUgc2Vuc2VzIChtYXNr IHZzIGVuYWJsZSkuCiAgKi8KIEVOVFJZKHhlbl9zYXZlX2ZsX2RpcmVjdCkKLQl0ZXN0YiAkMHhm ZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbykgKyBYRU5fdmNwdV9pbmZvX21hc2sKKwl0ZXN0 YiAkMHhmZiwgUEVSX0NQVV9WQVIoeGVuX3ZjcHVfaW5mbyArIFhFTl92Y3B1X2luZm9fbWFzaykK IAlzZXR6ICVhaAogCWFkZGIgJWFoLCAlYWgKIAlyZXQKQEAgLTc5LDcgKzc5LDcgQEAgRU5UUlko eGVuX3Jlc3RvcmVfZmxfZGlyZWN0KQogI2Vsc2UKIAl0ZXN0YiAkWDg2X0VGTEFHU19JRj4+OCwg JWFoCiAjZW5kaWYKLQlzZXR6IFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVOX3ZjcHVf aW5mb19tYXNrCisJc2V0eiBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvICsgWEVOX3ZjcHVfaW5m b19tYXNrKQogCS8qCiAJICogUHJlZW1wdCBoZXJlIGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2UgdGhh dCB3aWxsIGRlYWwgd2l0aCBhbnkKIAkgKiBwZW5kaW5nIGludGVycnVwdHMuICBUaGUgcGVuZGlu ZyBjaGVjayBtYXkgZW5kIHVwIGJlaW5nIHJ1bgpAQCAtODcsNyArODcsNyBAQCBFTlRSWSh4ZW5f cmVzdG9yZV9mbF9kaXJlY3QpCiAJICovCiAKIAkvKiBjaGVjayBmb3IgdW5tYXNrZWQgYW5kIHBl bmRpbmcgKi8KLQljbXB3ICQweDAwMDEsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pICsgWEVO X3ZjcHVfaW5mb19wZW5kaW5nCisJY21wdyAkMHgwMDAxLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9p bmZvICsgWEVOX3ZjcHVfaW5mb19wZW5kaW5nKQogCWpueiAxZgogCWNhbGwgY2hlY2tfZXZlbnRz CiAxOgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDc4Y2Iy NDYxMDEyZS4uY2NiMWQ4ZGFmMjQxIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5p dC9LY29uZmlnCkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBjb25maWcgS0FMTFNZTVNfQUxMCiBjb25m aWcgS0FMTFNZTVNfQUJTT0xVVEVfUEVSQ1BVCiAJYm9vbAogCWRlcGVuZHMgb24gS0FMTFNZTVMK LQlkZWZhdWx0IFg4Nl82NCAmJiBTTVAKKwlkZWZhdWx0IFg4Nl82NCAmJiBTTVAgJiYgIVg4Nl9Q SUUKIAogY29uZmlnIEtBTExTWU1TX0JBU0VfUkVMQVRJVkUKIAlib29sCi0tIAoyLjE0LjIuOTIw LmdjZjBjNjc5NzljLWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK