From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Date: Wed, 4 Oct 2017 14:20:02 -0700 Message-Id: <20171004212003.28296-27-thgarnie@google.com> In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Subject: [kernel-hardening] [RFC v3 26/27] x86/relocs: Add option to generate 64-bit relocations 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: The x86 relocation tool generates a list of 32-bit signed integers. There was no need to use 64-bit integers because all addresses where above the 2G top of the memory. This change add a large-reloc option to generate 64-bit unsigned integers. It can be used when the kernel plan to go below the top 2G and 32-bit integers are not enough. Signed-off-by: Thomas Garnier --- arch/x86/tools/relocs.c | 60 +++++++++++++++++++++++++++++++++--------- arch/x86/tools/relocs.h | 4 +-- arch/x86/tools/relocs_common.c | 15 +++++++---- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index bc032ad88b22..e7497ea1fe76 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -12,8 +12,14 @@ static Elf_Ehdr ehdr; +#if ELF_BITS == 64 +typedef uint64_t rel_off_t; +#else +typedef uint32_t rel_off_t; +#endif + struct relocs { - uint32_t *offset; + rel_off_t *offset; unsigned long count; unsigned long size; }; @@ -684,7 +690,7 @@ static void print_absolute_relocs(void) printf("\n"); } -static void add_reloc(struct relocs *r, uint32_t offset) +static void add_reloc(struct relocs *r, rel_off_t offset) { if (r->count == r->size) { unsigned long newsize = r->size + 50000; @@ -1058,26 +1064,48 @@ static void sort_relocs(struct relocs *r) qsort(r->offset, r->count, sizeof(r->offset[0]), cmp_relocs); } -static int write32(uint32_t v, FILE *f) +static int write32(rel_off_t rel, FILE *f) { - unsigned char buf[4]; + unsigned char buf[sizeof(uint32_t)]; + uint32_t v = (uint32_t)rel; put_unaligned_le32(v, buf); - return fwrite(buf, 1, 4, f) == 4 ? 0 : -1; + return fwrite(buf, 1, sizeof(buf), f) == sizeof(buf) ? 0 : -1; } -static int write32_as_text(uint32_t v, FILE *f) +static int write32_as_text(rel_off_t rel, FILE *f) { + uint32_t v = (uint32_t)rel; return fprintf(f, "\t.long 0x%08"PRIx32"\n", v) > 0 ? 0 : -1; } -static void emit_relocs(int as_text, int use_real_mode) +static int write64(rel_off_t rel, FILE *f) +{ + unsigned char buf[sizeof(uint64_t)]; + uint64_t v = (uint64_t)rel; + + put_unaligned_le64(v, buf); + return fwrite(buf, 1, sizeof(buf), f) == sizeof(buf) ? 0 : -1; +} + +static int write64_as_text(rel_off_t rel, FILE *f) +{ + uint64_t v = (uint64_t)rel; + return fprintf(f, "\t.quad 0x%016"PRIx64"\n", v) > 0 ? 0 : -1; +} + +static void emit_relocs(int as_text, int use_real_mode, int use_large_reloc) { int i; - int (*write_reloc)(uint32_t, FILE *) = write32; + int (*write_reloc)(rel_off_t, FILE *); int (*do_reloc)(struct section *sec, Elf_Rel *rel, Elf_Sym *sym, const char *symname); + if (use_large_reloc) + write_reloc = write64; + else + write_reloc = write32; + #if ELF_BITS == 64 if (!use_real_mode) do_reloc = do_reloc64; @@ -1088,6 +1116,9 @@ static void emit_relocs(int as_text, int use_real_mode) do_reloc = do_reloc32; else do_reloc = do_reloc_real; + + /* Large relocations only for 64-bit */ + use_large_reloc = 0; #endif /* Collect up the relocations */ @@ -1111,8 +1142,13 @@ static void emit_relocs(int as_text, int use_real_mode) * gas will like. */ printf(".section \".data.reloc\",\"a\"\n"); - printf(".balign 4\n"); - write_reloc = write32_as_text; + if (use_large_reloc) { + printf(".balign 8\n"); + write_reloc = write64_as_text; + } else { + printf(".balign 4\n"); + write_reloc = write32_as_text; + } } if (use_real_mode) { @@ -1180,7 +1216,7 @@ static void print_reloc_info(void) void process(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info) + int show_reloc_info, int use_large_reloc) { regex_init(use_real_mode); read_ehdr(fp); @@ -1203,5 +1239,5 @@ void process(FILE *fp, int use_real_mode, int as_text, print_reloc_info(); return; } - emit_relocs(as_text, use_real_mode); + emit_relocs(as_text, use_real_mode, use_large_reloc); } diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 1d23bf953a4a..cb771cc4412d 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -30,8 +30,8 @@ enum symtype { void process_32(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info); + int show_reloc_info, int use_large_reloc); void process_64(FILE *fp, int use_real_mode, int as_text, int show_absolute_syms, int show_absolute_relocs, - int show_reloc_info); + int show_reloc_info, int use_large_reloc); #endif /* RELOCS_H */ diff --git a/arch/x86/tools/relocs_common.c b/arch/x86/tools/relocs_common.c index acab636bcb34..9cf1391af50a 100644 --- a/arch/x86/tools/relocs_common.c +++ b/arch/x86/tools/relocs_common.c @@ -11,14 +11,14 @@ void die(char *fmt, ...) static void usage(void) { - die("relocs [--abs-syms|--abs-relocs|--reloc-info|--text|--realmode]" \ - " vmlinux\n"); + die("relocs [--abs-syms|--abs-relocs|--reloc-info|--text|--realmode|" \ + "--large-reloc] vmlinux\n"); } int main(int argc, char **argv) { int show_absolute_syms, show_absolute_relocs, show_reloc_info; - int as_text, use_real_mode; + int as_text, use_real_mode, use_large_reloc; const char *fname; FILE *fp; int i; @@ -29,6 +29,7 @@ int main(int argc, char **argv) show_reloc_info = 0; as_text = 0; use_real_mode = 0; + use_large_reloc = 0; fname = NULL; for (i = 1; i < argc; i++) { char *arg = argv[i]; @@ -53,6 +54,10 @@ int main(int argc, char **argv) use_real_mode = 1; continue; } + if (strcmp(arg, "--large-reloc") == 0) { + use_large_reloc = 1; + continue; + } } else if (!fname) { fname = arg; @@ -74,11 +79,11 @@ int main(int argc, char **argv) if (e_ident[EI_CLASS] == ELFCLASS64) process_64(fp, use_real_mode, as_text, show_absolute_syms, show_absolute_relocs, - show_reloc_info); + show_reloc_info, use_large_reloc); else process_32(fp, use_real_mode, as_text, show_absolute_syms, show_absolute_relocs, - show_reloc_info); + show_reloc_info, use_large_reloc); fclose(fp); return 0; } -- 2.14.2.920.gcf0c67979c-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 26/27] x86/relocs: Add option to generate 64-bit relocations Date: Wed, 4 Oct 2017 14:20:02 -0700 Message-ID: <20171004212003.28296-27-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 VGhlIHg4NiByZWxvY2F0aW9uIHRvb2wgZ2VuZXJhdGVzIGEgbGlzdCBvZiAzMi1iaXQgc2lnbmVk IGludGVnZXJzLiBUaGVyZQp3YXMgbm8gbmVlZCB0byB1c2UgNjQtYml0IGludGVnZXJzIGJlY2F1 c2UgYWxsIGFkZHJlc3NlcyB3aGVyZSBhYm92ZSB0aGUgMkcKdG9wIG9mIHRoZSBtZW1vcnkuCgpU aGlzIGNoYW5nZSBhZGQgYSBsYXJnZS1yZWxvYyBvcHRpb24gdG8gZ2VuZXJhdGUgNjQtYml0IHVu c2lnbmVkIGludGVnZXJzLgpJdCBjYW4gYmUgdXNlZCB3aGVuIHRoZSBrZXJuZWwgcGxhbiB0byBn byBiZWxvdyB0aGUgdG9wIDJHIGFuZCAzMi1iaXQKaW50ZWdlcnMgYXJlIG5vdCBlbm91Z2guCgpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgR2FybmllciA8dGhnYXJuaWVAZ29vZ2xlLmNvbT4KLS0tCiBh cmNoL3g4Ni90b29scy9yZWxvY3MuYyAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0KIGFyY2gveDg2L3Rvb2xzL3JlbG9jcy5oICAgICAgICB8ICA0 ICstLQogYXJjaC94ODYvdG9vbHMvcmVsb2NzX2NvbW1vbi5jIHwgMTUgKysrKysrKy0tLS0KIDMg ZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwpp bmRleCBiYzAzMmFkODhiMjIuLmU3NDk3ZWExZmU3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9v bHMvcmVsb2NzLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMKQEAgLTEyLDggKzEyLDE0 IEBACiAKIHN0YXRpYyBFbGZfRWhkciBlaGRyOwogCisjaWYgRUxGX0JJVFMgPT0gNjQKK3R5cGVk ZWYgdWludDY0X3QgcmVsX29mZl90OworI2Vsc2UKK3R5cGVkZWYgdWludDMyX3QgcmVsX29mZl90 OworI2VuZGlmCisKIHN0cnVjdCByZWxvY3MgewotCXVpbnQzMl90CSpvZmZzZXQ7CisJcmVsX29m Zl90CSpvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwljb3VudDsKIAl1bnNpZ25lZCBsb25nCXNpemU7 CiB9OwpAQCAtNjg0LDcgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2Fic29sdXRlX3JlbG9j cyh2b2lkKQogCQlwcmludGYoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1 Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBhZGRfcmVsb2Moc3Ry dWN0IHJlbG9jcyAqciwgcmVsX29mZl90IG9mZnNldCkKIHsKIAlpZiAoci0+Y291bnQgPT0gci0+ c2l6ZSkgewogCQl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSByLT5zaXplICsgNTAwMDA7CkBAIC0x MDU4LDI2ICsxMDY0LDQ4IEBAIHN0YXRpYyB2b2lkIHNvcnRfcmVsb2NzKHN0cnVjdCByZWxvY3Mg KnIpCiAJcXNvcnQoci0+b2Zmc2V0LCByLT5jb3VudCwgc2l6ZW9mKHItPm9mZnNldFswXSksIGNt cF9yZWxvY3MpOwogfQogCi1zdGF0aWMgaW50IHdyaXRlMzIodWludDMyX3QgdiwgRklMRSAqZikK K3N0YXRpYyBpbnQgd3JpdGUzMihyZWxfb2ZmX3QgcmVsLCBGSUxFICpmKQogewotCXVuc2lnbmVk IGNoYXIgYnVmWzRdOworCXVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZih1aW50MzJfdCldOworCXVp bnQzMl90IHYgPSAodWludDMyX3QpcmVsOwogCiAJcHV0X3VuYWxpZ25lZF9sZTMyKHYsIGJ1Zik7 Ci0JcmV0dXJuIGZ3cml0ZShidWYsIDEsIDQsIGYpID09IDQgPyAwIDogLTE7CisJcmV0dXJuIGZ3 cml0ZShidWYsIDEsIHNpemVvZihidWYpLCBmKSA9PSBzaXplb2YoYnVmKSA/IDAgOiAtMTsKIH0K IAotc3RhdGljIGludCB3cml0ZTMyX2FzX3RleHQodWludDMyX3QgdiwgRklMRSAqZikKK3N0YXRp YyBpbnQgd3JpdGUzMl9hc190ZXh0KHJlbF9vZmZfdCByZWwsIEZJTEUgKmYpCiB7CisJdWludDMy X3QgdiA9ICh1aW50MzJfdClyZWw7CiAJcmV0dXJuIGZwcmludGYoZiwgIlx0LmxvbmcgMHglMDgi UFJJeDMyIlxuIiwgdikgPiAwID8gMCA6IC0xOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0X3JlbG9j cyhpbnQgYXNfdGV4dCwgaW50IHVzZV9yZWFsX21vZGUpCitzdGF0aWMgaW50IHdyaXRlNjQocmVs X29mZl90IHJlbCwgRklMRSAqZikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2YodWludDY0 X3QpXTsKKwl1aW50NjRfdCB2ID0gKHVpbnQ2NF90KXJlbDsKKworCXB1dF91bmFsaWduZWRfbGU2 NCh2LCBidWYpOworCXJldHVybiBmd3JpdGUoYnVmLCAxLCBzaXplb2YoYnVmKSwgZikgPT0gc2l6 ZW9mKGJ1ZikgPyAwIDogLTE7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGU2NF9hc190ZXh0KHJlbF9v ZmZfdCByZWwsIEZJTEUgKmYpCit7CisJdWludDY0X3QgdiA9ICh1aW50NjRfdClyZWw7CisJcmV0 dXJuIGZwcmludGYoZiwgIlx0LnF1YWQgMHglMDE2IlBSSXg2NCJcbiIsIHYpID4gMCA/IDAgOiAt MTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9yZWxvY3MoaW50IGFzX3RleHQsIGludCB1c2VfcmVh bF9tb2RlLCBpbnQgdXNlX2xhcmdlX3JlbG9jKQogewogCWludCBpOwotCWludCAoKndyaXRlX3Jl bG9jKSh1aW50MzJfdCwgRklMRSAqKSA9IHdyaXRlMzI7CisJaW50ICgqd3JpdGVfcmVsb2MpKHJl bF9vZmZfdCwgRklMRSAqKTsKIAlpbnQgKCpkb19yZWxvYykoc3RydWN0IHNlY3Rpb24gKnNlYywg RWxmX1JlbCAqcmVsLCBFbGZfU3ltICpzeW0sCiAJCQljb25zdCBjaGFyICpzeW1uYW1lKTsKIAor CWlmICh1c2VfbGFyZ2VfcmVsb2MpCisJCXdyaXRlX3JlbG9jID0gd3JpdGU2NDsKKwllbHNlCisJ CXdyaXRlX3JlbG9jID0gd3JpdGUzMjsKKwogI2lmIEVMRl9CSVRTID09IDY0CiAJaWYgKCF1c2Vf cmVhbF9tb2RlKQogCQlkb19yZWxvYyA9IGRvX3JlbG9jNjQ7CkBAIC0xMDg4LDYgKzExMTYsOSBA QCBzdGF0aWMgdm9pZCBlbWl0X3JlbG9jcyhpbnQgYXNfdGV4dCwgaW50IHVzZV9yZWFsX21vZGUp CiAJCWRvX3JlbG9jID0gZG9fcmVsb2MzMjsKIAllbHNlCiAJCWRvX3JlbG9jID0gZG9fcmVsb2Nf cmVhbDsKKworCS8qIExhcmdlIHJlbG9jYXRpb25zIG9ubHkgZm9yIDY0LWJpdCAqLworCXVzZV9s YXJnZV9yZWxvYyA9IDA7CiAjZW5kaWYKIAogCS8qIENvbGxlY3QgdXAgdGhlIHJlbG9jYXRpb25z ICovCkBAIC0xMTExLDggKzExNDIsMTMgQEAgc3RhdGljIHZvaWQgZW1pdF9yZWxvY3MoaW50IGFz X3RleHQsIGludCB1c2VfcmVhbF9tb2RlKQogCQkgKiBnYXMgd2lsbCBsaWtlLgogCQkgKi8KIAkJ cHJpbnRmKCIuc2VjdGlvbiBcIi5kYXRhLnJlbG9jXCIsXCJhXCJcbiIpOwotCQlwcmludGYoIi5i YWxpZ24gNFxuIik7Ci0JCXdyaXRlX3JlbG9jID0gd3JpdGUzMl9hc190ZXh0OworCQlpZiAodXNl X2xhcmdlX3JlbG9jKSB7CisJCQlwcmludGYoIi5iYWxpZ24gOFxuIik7CisJCQl3cml0ZV9yZWxv YyA9IHdyaXRlNjRfYXNfdGV4dDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiLmJhbGlnbiA0XG4i KTsKKwkJCXdyaXRlX3JlbG9jID0gd3JpdGUzMl9hc190ZXh0OworCQl9CiAJfQogCiAJaWYgKHVz ZV9yZWFsX21vZGUpIHsKQEAgLTExODAsNyArMTIxNiw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3Jl bG9jX2luZm8odm9pZCkKIAogdm9pZCBwcm9jZXNzKEZJTEUgKmZwLCBpbnQgdXNlX3JlYWxfbW9k ZSwgaW50IGFzX3RleHQsCiAJICAgICBpbnQgc2hvd19hYnNvbHV0ZV9zeW1zLCBpbnQgc2hvd19h YnNvbHV0ZV9yZWxvY3MsCi0JICAgICBpbnQgc2hvd19yZWxvY19pbmZvKQorCSAgICAgaW50IHNo b3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9yZWxvYykKIHsKIAlyZWdleF9pbml0KHVzZV9y ZWFsX21vZGUpOwogCXJlYWRfZWhkcihmcCk7CkBAIC0xMjAzLDUgKzEyMzksNSBAQCB2b2lkIHBy b2Nlc3MoRklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJcHJpbnRf cmVsb2NfaW5mbygpOwogCQlyZXR1cm47CiAJfQotCWVtaXRfcmVsb2NzKGFzX3RleHQsIHVzZV9y ZWFsX21vZGUpOworCWVtaXRfcmVsb2NzKGFzX3RleHQsIHVzZV9yZWFsX21vZGUsIHVzZV9sYXJn ZV9yZWxvYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuaCBiL2FyY2gv eDg2L3Rvb2xzL3JlbG9jcy5oCmluZGV4IDFkMjNiZjk1M2E0YS4uY2I3NzFjYzQ0MTJkIDEwMDY0 NAotLS0gYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuaAorKysgYi9hcmNoL3g4Ni90b29scy9yZWxv Y3MuaApAQCAtMzAsOCArMzAsOCBAQCBlbnVtIHN5bXR5cGUgewogCiB2b2lkIHByb2Nlc3NfMzIo RklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJaW50IHNob3dfYWJz b2x1dGVfc3ltcywgaW50IHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQlpbnQgc2hvd19yZWxvY19p bmZvKTsKKwkJaW50IHNob3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9yZWxvYyk7CiB2b2lk IHByb2Nlc3NfNjQoRklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJ aW50IHNob3dfYWJzb2x1dGVfc3ltcywgaW50IHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQlpbnQg c2hvd19yZWxvY19pbmZvKTsKKwkJaW50IHNob3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9y ZWxvYyk7CiAjZW5kaWYgLyogUkVMT0NTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xz L3JlbG9jc19jb21tb24uYyBiL2FyY2gveDg2L3Rvb2xzL3JlbG9jc19jb21tb24uYwppbmRleCBh Y2FiNjM2YmNiMzQuLjljZjEzOTFhZjUwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvcmVs b2NzX2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL3JlbG9jc19jb21tb24uYwpAQCAtMTEs MTQgKzExLDE0IEBAIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKQogCiBzdGF0aWMgdm9pZCB1c2Fn ZSh2b2lkKQogewotCWRpZSgicmVsb2NzIFstLWFicy1zeW1zfC0tYWJzLXJlbG9jc3wtLXJlbG9j LWluZm98LS10ZXh0fC0tcmVhbG1vZGVdIiBcCi0JICAgICIgdm1saW51eFxuIik7CisJZGllKCJy ZWxvY3MgWy0tYWJzLXN5bXN8LS1hYnMtcmVsb2NzfC0tcmVsb2MtaW5mb3wtLXRleHR8LS1yZWFs bW9kZXwiIFwKKwkgICAgIi0tbGFyZ2UtcmVsb2NdICB2bWxpbnV4XG4iKTsKIH0KIAogaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBzaG93X2Fic29sdXRlX3N5bXMsIHNo b3dfYWJzb2x1dGVfcmVsb2NzLCBzaG93X3JlbG9jX2luZm87Ci0JaW50IGFzX3RleHQsIHVzZV9y ZWFsX21vZGU7CisJaW50IGFzX3RleHQsIHVzZV9yZWFsX21vZGUsIHVzZV9sYXJnZV9yZWxvYzsK IAljb25zdCBjaGFyICpmbmFtZTsKIAlGSUxFICpmcDsKIAlpbnQgaTsKQEAgLTI5LDYgKzI5LDcg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3dfcmVsb2NfaW5mbyA9IDA7 CiAJYXNfdGV4dCA9IDA7CiAJdXNlX3JlYWxfbW9kZSA9IDA7CisJdXNlX2xhcmdlX3JlbG9jID0g MDsKIAlmbmFtZSA9IE5VTEw7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljaGFy ICphcmcgPSBhcmd2W2ldOwpAQCAtNTMsNiArNTQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCXVzZV9yZWFsX21vZGUgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQor CQkJaWYgKHN0cmNtcChhcmcsICItLWxhcmdlLXJlbG9jIikgPT0gMCkgeworCQkJCXVzZV9sYXJn ZV9yZWxvYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KIAkJZWxzZSBpZiAoIWZuYW1l KSB7CiAJCQlmbmFtZSA9IGFyZzsKQEAgLTc0LDExICs3OSwxMSBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJaWYgKGVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCiAJ CXByb2Nlc3NfNjQoZnAsIHVzZV9yZWFsX21vZGUsIGFzX3RleHQsCiAJCQkgICBzaG93X2Fic29s dXRlX3N5bXMsIHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQkJICAgc2hvd19yZWxvY19pbmZvKTsK KwkJCSAgIHNob3dfcmVsb2NfaW5mbywgdXNlX2xhcmdlX3JlbG9jKTsKIAllbHNlCiAJCXByb2Nl c3NfMzIoZnAsIHVzZV9yZWFsX21vZGUsIGFzX3RleHQsCiAJCQkgICBzaG93X2Fic29sdXRlX3N5 bXMsIHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQkJICAgc2hvd19yZWxvY19pbmZvKTsKKwkJCSAg IHNob3dfcmVsb2NfaW5mbywgdXNlX2xhcmdlX3JlbG9jKTsKIAlmY2xvc2UoZnApOwogCXJldHVy biAwOwogfQotLSAKMi4xNC4yLjkyMC5nY2YwYzY3OTc5Yy1nb29nCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 26/27] x86/relocs: Add option to generate 64-bit relocations Date: Wed, 4 Oct 2017 14:20:02 -0700 Message-ID: <20171004212003.28296-27-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 VGhlIHg4NiByZWxvY2F0aW9uIHRvb2wgZ2VuZXJhdGVzIGEgbGlzdCBvZiAzMi1iaXQgc2lnbmVk IGludGVnZXJzLiBUaGVyZQp3YXMgbm8gbmVlZCB0byB1c2UgNjQtYml0IGludGVnZXJzIGJlY2F1 c2UgYWxsIGFkZHJlc3NlcyB3aGVyZSBhYm92ZSB0aGUgMkcKdG9wIG9mIHRoZSBtZW1vcnkuCgpU aGlzIGNoYW5nZSBhZGQgYSBsYXJnZS1yZWxvYyBvcHRpb24gdG8gZ2VuZXJhdGUgNjQtYml0IHVu c2lnbmVkIGludGVnZXJzLgpJdCBjYW4gYmUgdXNlZCB3aGVuIHRoZSBrZXJuZWwgcGxhbiB0byBn byBiZWxvdyB0aGUgdG9wIDJHIGFuZCAzMi1iaXQKaW50ZWdlcnMgYXJlIG5vdCBlbm91Z2guCgpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgR2FybmllciA8dGhnYXJuaWVAZ29vZ2xlLmNvbT4KLS0tCiBh cmNoL3g4Ni90b29scy9yZWxvY3MuYyAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0KIGFyY2gveDg2L3Rvb2xzL3JlbG9jcy5oICAgICAgICB8ICA0 ICstLQogYXJjaC94ODYvdG9vbHMvcmVsb2NzX2NvbW1vbi5jIHwgMTUgKysrKysrKy0tLS0KIDMg ZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwpp bmRleCBiYzAzMmFkODhiMjIuLmU3NDk3ZWExZmU3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9v bHMvcmVsb2NzLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMKQEAgLTEyLDggKzEyLDE0 IEBACiAKIHN0YXRpYyBFbGZfRWhkciBlaGRyOwogCisjaWYgRUxGX0JJVFMgPT0gNjQKK3R5cGVk ZWYgdWludDY0X3QgcmVsX29mZl90OworI2Vsc2UKK3R5cGVkZWYgdWludDMyX3QgcmVsX29mZl90 OworI2VuZGlmCisKIHN0cnVjdCByZWxvY3MgewotCXVpbnQzMl90CSpvZmZzZXQ7CisJcmVsX29m Zl90CSpvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwljb3VudDsKIAl1bnNpZ25lZCBsb25nCXNpemU7 CiB9OwpAQCAtNjg0LDcgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2Fic29sdXRlX3JlbG9j cyh2b2lkKQogCQlwcmludGYoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1 Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBhZGRfcmVsb2Moc3Ry dWN0IHJlbG9jcyAqciwgcmVsX29mZl90IG9mZnNldCkKIHsKIAlpZiAoci0+Y291bnQgPT0gci0+ c2l6ZSkgewogCQl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSByLT5zaXplICsgNTAwMDA7CkBAIC0x MDU4LDI2ICsxMDY0LDQ4IEBAIHN0YXRpYyB2b2lkIHNvcnRfcmVsb2NzKHN0cnVjdCByZWxvY3Mg KnIpCiAJcXNvcnQoci0+b2Zmc2V0LCByLT5jb3VudCwgc2l6ZW9mKHItPm9mZnNldFswXSksIGNt cF9yZWxvY3MpOwogfQogCi1zdGF0aWMgaW50IHdyaXRlMzIodWludDMyX3QgdiwgRklMRSAqZikK K3N0YXRpYyBpbnQgd3JpdGUzMihyZWxfb2ZmX3QgcmVsLCBGSUxFICpmKQogewotCXVuc2lnbmVk IGNoYXIgYnVmWzRdOworCXVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZih1aW50MzJfdCldOworCXVp bnQzMl90IHYgPSAodWludDMyX3QpcmVsOwogCiAJcHV0X3VuYWxpZ25lZF9sZTMyKHYsIGJ1Zik7 Ci0JcmV0dXJuIGZ3cml0ZShidWYsIDEsIDQsIGYpID09IDQgPyAwIDogLTE7CisJcmV0dXJuIGZ3 cml0ZShidWYsIDEsIHNpemVvZihidWYpLCBmKSA9PSBzaXplb2YoYnVmKSA/IDAgOiAtMTsKIH0K IAotc3RhdGljIGludCB3cml0ZTMyX2FzX3RleHQodWludDMyX3QgdiwgRklMRSAqZikKK3N0YXRp YyBpbnQgd3JpdGUzMl9hc190ZXh0KHJlbF9vZmZfdCByZWwsIEZJTEUgKmYpCiB7CisJdWludDMy X3QgdiA9ICh1aW50MzJfdClyZWw7CiAJcmV0dXJuIGZwcmludGYoZiwgIlx0LmxvbmcgMHglMDgi UFJJeDMyIlxuIiwgdikgPiAwID8gMCA6IC0xOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0X3JlbG9j cyhpbnQgYXNfdGV4dCwgaW50IHVzZV9yZWFsX21vZGUpCitzdGF0aWMgaW50IHdyaXRlNjQocmVs X29mZl90IHJlbCwgRklMRSAqZikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2YodWludDY0 X3QpXTsKKwl1aW50NjRfdCB2ID0gKHVpbnQ2NF90KXJlbDsKKworCXB1dF91bmFsaWduZWRfbGU2 NCh2LCBidWYpOworCXJldHVybiBmd3JpdGUoYnVmLCAxLCBzaXplb2YoYnVmKSwgZikgPT0gc2l6 ZW9mKGJ1ZikgPyAwIDogLTE7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGU2NF9hc190ZXh0KHJlbF9v ZmZfdCByZWwsIEZJTEUgKmYpCit7CisJdWludDY0X3QgdiA9ICh1aW50NjRfdClyZWw7CisJcmV0 dXJuIGZwcmludGYoZiwgIlx0LnF1YWQgMHglMDE2IlBSSXg2NCJcbiIsIHYpID4gMCA/IDAgOiAt MTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9yZWxvY3MoaW50IGFzX3RleHQsIGludCB1c2VfcmVh bF9tb2RlLCBpbnQgdXNlX2xhcmdlX3JlbG9jKQogewogCWludCBpOwotCWludCAoKndyaXRlX3Jl bG9jKSh1aW50MzJfdCwgRklMRSAqKSA9IHdyaXRlMzI7CisJaW50ICgqd3JpdGVfcmVsb2MpKHJl bF9vZmZfdCwgRklMRSAqKTsKIAlpbnQgKCpkb19yZWxvYykoc3RydWN0IHNlY3Rpb24gKnNlYywg RWxmX1JlbCAqcmVsLCBFbGZfU3ltICpzeW0sCiAJCQljb25zdCBjaGFyICpzeW1uYW1lKTsKIAor CWlmICh1c2VfbGFyZ2VfcmVsb2MpCisJCXdyaXRlX3JlbG9jID0gd3JpdGU2NDsKKwllbHNlCisJ CXdyaXRlX3JlbG9jID0gd3JpdGUzMjsKKwogI2lmIEVMRl9CSVRTID09IDY0CiAJaWYgKCF1c2Vf cmVhbF9tb2RlKQogCQlkb19yZWxvYyA9IGRvX3JlbG9jNjQ7CkBAIC0xMDg4LDYgKzExMTYsOSBA QCBzdGF0aWMgdm9pZCBlbWl0X3JlbG9jcyhpbnQgYXNfdGV4dCwgaW50IHVzZV9yZWFsX21vZGUp CiAJCWRvX3JlbG9jID0gZG9fcmVsb2MzMjsKIAllbHNlCiAJCWRvX3JlbG9jID0gZG9fcmVsb2Nf cmVhbDsKKworCS8qIExhcmdlIHJlbG9jYXRpb25zIG9ubHkgZm9yIDY0LWJpdCAqLworCXVzZV9s YXJnZV9yZWxvYyA9IDA7CiAjZW5kaWYKIAogCS8qIENvbGxlY3QgdXAgdGhlIHJlbG9jYXRpb25z ICovCkBAIC0xMTExLDggKzExNDIsMTMgQEAgc3RhdGljIHZvaWQgZW1pdF9yZWxvY3MoaW50IGFz X3RleHQsIGludCB1c2VfcmVhbF9tb2RlKQogCQkgKiBnYXMgd2lsbCBsaWtlLgogCQkgKi8KIAkJ cHJpbnRmKCIuc2VjdGlvbiBcIi5kYXRhLnJlbG9jXCIsXCJhXCJcbiIpOwotCQlwcmludGYoIi5i YWxpZ24gNFxuIik7Ci0JCXdyaXRlX3JlbG9jID0gd3JpdGUzMl9hc190ZXh0OworCQlpZiAodXNl X2xhcmdlX3JlbG9jKSB7CisJCQlwcmludGYoIi5iYWxpZ24gOFxuIik7CisJCQl3cml0ZV9yZWxv YyA9IHdyaXRlNjRfYXNfdGV4dDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiLmJhbGlnbiA0XG4i KTsKKwkJCXdyaXRlX3JlbG9jID0gd3JpdGUzMl9hc190ZXh0OworCQl9CiAJfQogCiAJaWYgKHVz ZV9yZWFsX21vZGUpIHsKQEAgLTExODAsNyArMTIxNiw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3Jl bG9jX2luZm8odm9pZCkKIAogdm9pZCBwcm9jZXNzKEZJTEUgKmZwLCBpbnQgdXNlX3JlYWxfbW9k ZSwgaW50IGFzX3RleHQsCiAJICAgICBpbnQgc2hvd19hYnNvbHV0ZV9zeW1zLCBpbnQgc2hvd19h YnNvbHV0ZV9yZWxvY3MsCi0JICAgICBpbnQgc2hvd19yZWxvY19pbmZvKQorCSAgICAgaW50IHNo b3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9yZWxvYykKIHsKIAlyZWdleF9pbml0KHVzZV9y ZWFsX21vZGUpOwogCXJlYWRfZWhkcihmcCk7CkBAIC0xMjAzLDUgKzEyMzksNSBAQCB2b2lkIHBy b2Nlc3MoRklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJcHJpbnRf cmVsb2NfaW5mbygpOwogCQlyZXR1cm47CiAJfQotCWVtaXRfcmVsb2NzKGFzX3RleHQsIHVzZV9y ZWFsX21vZGUpOworCWVtaXRfcmVsb2NzKGFzX3RleHQsIHVzZV9yZWFsX21vZGUsIHVzZV9sYXJn ZV9yZWxvYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuaCBiL2FyY2gv eDg2L3Rvb2xzL3JlbG9jcy5oCmluZGV4IDFkMjNiZjk1M2E0YS4uY2I3NzFjYzQ0MTJkIDEwMDY0 NAotLS0gYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuaAorKysgYi9hcmNoL3g4Ni90b29scy9yZWxv Y3MuaApAQCAtMzAsOCArMzAsOCBAQCBlbnVtIHN5bXR5cGUgewogCiB2b2lkIHByb2Nlc3NfMzIo RklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJaW50IHNob3dfYWJz b2x1dGVfc3ltcywgaW50IHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQlpbnQgc2hvd19yZWxvY19p bmZvKTsKKwkJaW50IHNob3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9yZWxvYyk7CiB2b2lk IHByb2Nlc3NfNjQoRklMRSAqZnAsIGludCB1c2VfcmVhbF9tb2RlLCBpbnQgYXNfdGV4dCwKIAkJ aW50IHNob3dfYWJzb2x1dGVfc3ltcywgaW50IHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQlpbnQg c2hvd19yZWxvY19pbmZvKTsKKwkJaW50IHNob3dfcmVsb2NfaW5mbywgaW50IHVzZV9sYXJnZV9y ZWxvYyk7CiAjZW5kaWYgLyogUkVMT0NTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xz L3JlbG9jc19jb21tb24uYyBiL2FyY2gveDg2L3Rvb2xzL3JlbG9jc19jb21tb24uYwppbmRleCBh Y2FiNjM2YmNiMzQuLjljZjEzOTFhZjUwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvcmVs b2NzX2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL3JlbG9jc19jb21tb24uYwpAQCAtMTEs MTQgKzExLDE0IEBAIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKQogCiBzdGF0aWMgdm9pZCB1c2Fn ZSh2b2lkKQogewotCWRpZSgicmVsb2NzIFstLWFicy1zeW1zfC0tYWJzLXJlbG9jc3wtLXJlbG9j LWluZm98LS10ZXh0fC0tcmVhbG1vZGVdIiBcCi0JICAgICIgdm1saW51eFxuIik7CisJZGllKCJy ZWxvY3MgWy0tYWJzLXN5bXN8LS1hYnMtcmVsb2NzfC0tcmVsb2MtaW5mb3wtLXRleHR8LS1yZWFs bW9kZXwiIFwKKwkgICAgIi0tbGFyZ2UtcmVsb2NdICB2bWxpbnV4XG4iKTsKIH0KIAogaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBzaG93X2Fic29sdXRlX3N5bXMsIHNo b3dfYWJzb2x1dGVfcmVsb2NzLCBzaG93X3JlbG9jX2luZm87Ci0JaW50IGFzX3RleHQsIHVzZV9y ZWFsX21vZGU7CisJaW50IGFzX3RleHQsIHVzZV9yZWFsX21vZGUsIHVzZV9sYXJnZV9yZWxvYzsK IAljb25zdCBjaGFyICpmbmFtZTsKIAlGSUxFICpmcDsKIAlpbnQgaTsKQEAgLTI5LDYgKzI5LDcg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3dfcmVsb2NfaW5mbyA9IDA7 CiAJYXNfdGV4dCA9IDA7CiAJdXNlX3JlYWxfbW9kZSA9IDA7CisJdXNlX2xhcmdlX3JlbG9jID0g MDsKIAlmbmFtZSA9IE5VTEw7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljaGFy ICphcmcgPSBhcmd2W2ldOwpAQCAtNTMsNiArNTQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCXVzZV9yZWFsX21vZGUgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQor CQkJaWYgKHN0cmNtcChhcmcsICItLWxhcmdlLXJlbG9jIikgPT0gMCkgeworCQkJCXVzZV9sYXJn ZV9yZWxvYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KIAkJZWxzZSBpZiAoIWZuYW1l KSB7CiAJCQlmbmFtZSA9IGFyZzsKQEAgLTc0LDExICs3OSwxMSBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJaWYgKGVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCiAJ CXByb2Nlc3NfNjQoZnAsIHVzZV9yZWFsX21vZGUsIGFzX3RleHQsCiAJCQkgICBzaG93X2Fic29s dXRlX3N5bXMsIHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQkJICAgc2hvd19yZWxvY19pbmZvKTsK KwkJCSAgIHNob3dfcmVsb2NfaW5mbywgdXNlX2xhcmdlX3JlbG9jKTsKIAllbHNlCiAJCXByb2Nl c3NfMzIoZnAsIHVzZV9yZWFsX21vZGUsIGFzX3RleHQsCiAJCQkgICBzaG93X2Fic29sdXRlX3N5 bXMsIHNob3dfYWJzb2x1dGVfcmVsb2NzLAotCQkJICAgc2hvd19yZWxvY19pbmZvKTsKKwkJCSAg IHNob3dfcmVsb2NfaW5mbywgdXNlX2xhcmdlX3JlbG9jKTsKIAlmY2xvc2UoZnApOwogCXJldHVy biAwOwogfQotLSAKMi4xNC4yLjkyMC5nY2YwYzY3OTc5Yy1nb29nCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==