From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0852EC2D0A3 for ; Tue, 10 Nov 2020 02:30:08 +0000 (UTC) Received: from mother.openwall.net (mother.openwall.net [195.42.179.200]) by mail.kernel.org (Postfix) with SMTP id 45D7F206D8 for ; Tue, 10 Nov 2020 02:30:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gHoHuVOc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 45D7F206D8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kernel-hardening-return-20372-kernel-hardening=archiver.kernel.org@lists.openwall.com Received: (qmail 7616 invoked by uid 550); 10 Nov 2020 02:29:57 -0000 Mailing-List: contact kernel-hardening-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Received: (qmail 7588 invoked from network); 10 Nov 2020 02:29:57 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604975385; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=l6N9kLJEZw00t4oEwyOJU5MOUcho0W3yc7yyLi6tWGo=; b=gHoHuVOcUL1RV3SAcLh2OR2oaxIP80efv43jQKwkvXgf5vk2imUZ4OAEuj+c74lYhiJdMr XfodFukhrJqmkFz9ar8IuMXOt/a+sg/HzOmAnyMvCZXs18PK5CqU4Hv293sNJcTjNRg7hR cB2ko1TFFYE9On6J3eGFlp7KIvBun5I= X-MC-Unique: czCRQyAWP7G68EG9XekIZA-1 Date: Mon, 9 Nov 2020 20:29:24 -0600 From: Josh Poimboeuf To: Sami Tolvanen Cc: Peter Zijlstra , Jann Horn , the arch/x86 maintainers , Masahiro Yamada , Steven Rostedt , Will Deacon , Greg Kroah-Hartman , "Paul E. McKenney" , Kees Cook , Nick Desaulniers , clang-built-linux , Kernel Hardening , linux-arch , Linux ARM , linux-kbuild , kernel list , linux-pci@vger.kernel.org Subject: Re: [PATCH v6 22/25] x86/asm: annotate indirect jumps Message-ID: <20201110022924.tekltjo25wtrao7z@treble> References: <20201015102216.GB2611@hirez.programming.kicks-ass.net> <20201015203942.f3kwcohcwwa6lagd@treble> <20201020185217.ilg6w5l7ujau2246@treble> <20201021085606.GZ2628@hirez.programming.kicks-ass.net> <20201023173617.GA3021099@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 On Mon, Nov 09, 2020 at 03:11:41PM -0800, Sami Tolvanen wrote: > On Fri, Oct 23, 2020 at 10:36 AM Sami Tolvanen wrote: > > > > On Wed, Oct 21, 2020 at 05:22:59PM -0700, Sami Tolvanen wrote: > > > There are a couple of differences, like the first "undefined stack > > > state" warning pointing to set_bringup_idt_handler.constprop.0() > > > instead of __switch_to_asm(). I tried running this with --backtrace, > > > but objtool segfaults at the first .entry.text warning: > > > > Looks like it segfaults when calling BT_FUNC() for an instruction that > > doesn't have a section (?). Applying this patch allows objtool to finish > > with --backtrace: > > > > diff --git a/tools/objtool/check.c b/tools/objtool/check.c > > index c216dd4d662c..618b0c4f2890 100644 > > --- a/tools/objtool/check.c > > +++ b/tools/objtool/check.c > > @@ -2604,7 +2604,7 @@ static int validate_branch(struct objtool_file *file, struct symbol *func, > > ret = validate_branch(file, func, > > insn->jump_dest, state); > > if (ret) { > > - if (backtrace) > > + if (backtrace && insn->sec) > > BT_FUNC("(branch)", insn); > > return ret; > > } > > > > > > Running objtool -barfld on an allyesconfig+LTO vmlinux.o prints out the > > following, ignoring the crypto warnings for now: > > OK, I spent some time looking at these warnings and the configs needed > to reproduce them without building allyesconfig: > > CONFIG_XEN > > __switch_to_asm()+0x0: undefined stack state > xen_hypercall_set_trap_table()+0x0: <=== (sym) > > CONFIG_XEN_PV > > .entry.text+0xffd: sibling call from callable instruction with > modified stack frame > .entry.text+0xfcb: (branch) > .entry.text+0xfb5: (alt) > .entry.text+0xfb0: (alt) > .entry.text+0xf78: (branch) > .entry.text+0x9c: (branch) > xen_syscall_target()+0x15: (branch) > xen_syscall_target()+0x0: <=== (sym) > .entry.text+0x1754: unsupported instruction in callable function > .entry.text+0x171d: (branch) > .entry.text+0x1707: (alt) > .entry.text+0x1701: (alt) > xen_syscall32_target()+0x15: (branch) > xen_syscall32_target()+0x0: <=== (sym) > .entry.text+0x1634: redundant CLD > > Backtrace doesn’t print out anything useful for the “redundant CLD” > error, but it occurs when validate_branch is looking at > xen_sysenter_target. > > do_suspend_lowlevel()+0x116: sibling call from callable instruction > with modified stack frame > do_suspend_lowlevel()+0x9a: (branch) > do_suspend_lowlevel()+0x0: <=== (sym) > > .entry.text+0x48: stack state mismatch: cfa1=7-8 cfa2=-1+0 > .altinstr_replacement+0xffffffffffffffff: (branch) > .entry.text+0x21: (alt) > .entry.text+0x1c: (alt) > .entry.text+0x10: <=== (hint) > .entry.text+0x15fd: stack state mismatch: cfa1=7-8 cfa2=-1+0 > .altinstr_replacement+0xffffffffffffffff: (branch) > .entry.text+0x15dc: (alt) > .entry.text+0x15d7: (alt) > .entry.text+0x15d0: <=== (hint) > .entry.text+0x168c: stack state mismatch: cfa1=7-8 cfa2=-1+0 > .altinstr_replacement+0xffffffffffffffff: (branch) > .entry.text+0x166b: (alt) > .entry.text+0x1666: (alt) > .entry.text+0x1660: <=== (hint) I can't make much sense of most of these warnings. Disassembly would help. (Also, something like the patch below should help objtool show more symbol names.) > It looks like the stack state mismatch warnings can be fixed by adding > unwind hints also to entry_SYSCALL_64_after_hwframe, > entry_SYSENTER_compat_after_hwframe, and > entry_SYSCALL_compat_after_hwframe. Does that sound correct? No, those code paths should already have the hints they need, unless I'm missing something. > CONFIG_AMD_MEM_ENCRYPT > > .head.text+0xfb: unsupported instruction in callable function > .head.text+0x207: (branch) > sev_es_play_dead()+0xff: (branch) > sev_es_play_dead()+0xd2: (branch) > sev_es_play_dead()+0xa8: (alt) > sev_es_play_dead()+0x144: (branch) > sev_es_play_dead()+0x10b: (branch) > sev_es_play_dead()+0x1f: (branch) > sev_es_play_dead()+0x0: <=== (sym) > > This happens because sev_es_play_dead calls start_cpu0. It always has, > but objtool hasn’t been able to follow the call when processing only > sev-es.o. Any thoughts on the preferred way to fix this one? Objtool isn't supposed to traverse through call instructions like that. Is LTO inlining the call or something? > CONFIG_CRYPTO_CRC32C_INTEL > > __x86_retpoline_rdi()+0x10: return with modified stack frame > __x86_retpoline_rdi()+0x0: (branch) > .altinstr_replacement+0x147: (branch) > .text+0xaf4c7: (alt) > .text+0xb03b0: (branch) > .text+0xaf482: (branch) > crc_pcl()+0x10: (branch) > crc_pcl()+0x0: <=== (sym) > > __x86_retpoline_rdi()+0x0: stack state mismatch: cfa1=7+32 cfa2=7+8 > .altinstr_replacement+0x265: (branch) > __x86_indirect_thunk_rdi()+0x0: (alt) > __x86_indirect_thunk_rdi()+0x0: <=== (sym) > > This is different from the warnings in the rest of the arch/x86/crypto > code. Do we need some kind of a hint before the JMP_NOSPEC in crc_pcl? I'll need to look more into that one. > CONFIG_FUNCTION_TRACER > > __x86_retpoline_rdi()+0x0: stack state mismatch: cfa1=7+32 cfa2=-1+0 > .altinstr_replacement+0x111: (branch) > .text+0x28a5: (alt) > .text+0x2880: <=== (hint) > > This unwind hint is in return_to_handler. Removing it obviously stops > the warning and doesn’t seem to result in any other complaints from > objtool. Is this hint correct? The hint is supposed to be there. I don't understand this one either. Did it inline the call to ftrace_return_to_handler()? > The remaining warnings are all “unsupported stack pointer realignment” > issues in the crypto code and can be reproduced with the following > configs: > > CONFIG_CRYPTO_AES_NI_INTEL > CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 > CONFIG_CRYPTO_SHA1_SSSE3 > CONFIG_CRYPTO_SHA256_SSSE3 > CONFIG_CRYPTO_SHA512_SSSE3 > > Josh, have you had a chance to look at the crypto patches you mentioned earlier? I've been traveling for several weeks, but now my work schedule is getting more normal, so I'll hopefully be able to spend time on this. How would I recreate all these warnings? Is it https://github.com/samitolvanen/linux.git lto-v6 plus a certain version of clang? Also, any details on how to build clang would be appreciated, it's been a while since I tried. Here's the patch for hopefully making the warnings more helpful: diff --git a/tools/objtool/check.c b/tools/objtool/check.c index c6ab44543c92..e5f5cb107664 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -2432,6 +2432,9 @@ static int validate_branch(struct objtool_file *file, struct symbol *func, sec = insn->sec; while (1) { + + if (insn->offset == 0x48) + WARN_FUNC("yo", sec, insn->offset); next_insn = next_insn_same_sec(file, insn); if (file->c_file && func && insn->func && func != insn->func->pfunc) { diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c index 4e1d7460574b..ced7e4754cba 100644 --- a/tools/objtool/elf.c +++ b/tools/objtool/elf.c @@ -217,6 +217,21 @@ struct symbol *find_func_containing(struct section *sec, unsigned long offset) return NULL; } +struct symbol *find_symbol_preceding(struct section *sec, unsigned long offset) +{ + struct symbol *sym; + + /* + * This is slow, but used for warning messages. + */ + while (1) { + sym = find_symbol_by_offset(sec, offset); + if (sym || !offset) + return sym; + offset--; + } +} + struct symbol *find_symbol_by_name(const struct elf *elf, const char *name) { struct symbol *sym; diff --git a/tools/objtool/elf.h b/tools/objtool/elf.h index 807f8c670097..841902ed381e 100644 --- a/tools/objtool/elf.h +++ b/tools/objtool/elf.h @@ -136,10 +136,11 @@ struct symbol *find_func_by_offset(struct section *sec, unsigned long offset); struct symbol *find_symbol_by_offset(struct section *sec, unsigned long offset); struct symbol *find_symbol_by_name(const struct elf *elf, const char *name); struct symbol *find_symbol_containing(const struct section *sec, unsigned long offset); +struct symbol *find_func_containing(struct section *sec, unsigned long offset); +struct symbol *find_symbol_preceding(struct section *sec, unsigned long offset); struct reloc *find_reloc_by_dest(const struct elf *elf, struct section *sec, unsigned long offset); struct reloc *find_reloc_by_dest_range(const struct elf *elf, struct section *sec, unsigned long offset, unsigned int len); -struct symbol *find_func_containing(struct section *sec, unsigned long offset); int elf_rebuild_reloc_section(struct elf *elf, struct section *sec); #define for_each_sec(file, sec) \ diff --git a/tools/objtool/warn.h b/tools/objtool/warn.h index 7799f60de80a..33da0f2ed9d5 100644 --- a/tools/objtool/warn.h +++ b/tools/objtool/warn.h @@ -22,6 +22,8 @@ static inline char *offstr(struct section *sec, unsigned long offset) unsigned long name_off; func = find_func_containing(sec, offset); + if (!func) + func = find_symbol_preceding(sec, offset); if (func) { name = func->name; name_off = offset - func->offset; From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 42F58C2D0A3 for ; Tue, 10 Nov 2020 02:31:17 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A8252206F1 for ; Tue, 10 Nov 2020 02:31:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="PDNIGTmd"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gHoHuVOc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A8252206F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=HcPls9aP3KZZfHcFhIGQC7i7G5ii1lki+m6Y35qvY88=; b=PDNIGTmdxr9duiH+i+MnO9Y2R 6wz+uTE5arDA5AiA0r+hWojU/bVGdT5e5PQd6epdaWiL3f+H59gs4WnI3qGlmn2Yr5gpKn8+hh8Ri KvcvzgXwxEfqON8ReEuVmy/OF8ffON+a06CreQTDDGeM9E/6ltlEGAsihj1Uy/0yKqcYrC0HmYjUe 8t0iwIHAsfoZLb9Bq2t/njlVczu554J/8DGySbQbvtzBHy6UNBmlZ1NLPz0JMDFCfbaNzLw197fA4 /NglbYaODcvSehM2X1AhwVS5cfVwawQqyPTqPD8jKEs2ktju82NssKlBt/Oz4UySQrFueaml6MTX7 F7ynb3AQg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kcJPt-0008A7-FM; Tue, 10 Nov 2020 02:29:53 +0000 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kcJPm-00087n-Of for linux-arm-kernel@lists.infradead.org; Tue, 10 Nov 2020 02:29:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604975385; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=l6N9kLJEZw00t4oEwyOJU5MOUcho0W3yc7yyLi6tWGo=; b=gHoHuVOcUL1RV3SAcLh2OR2oaxIP80efv43jQKwkvXgf5vk2imUZ4OAEuj+c74lYhiJdMr XfodFukhrJqmkFz9ar8IuMXOt/a+sg/HzOmAnyMvCZXs18PK5CqU4Hv293sNJcTjNRg7hR cB2ko1TFFYE9On6J3eGFlp7KIvBun5I= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-30-czCRQyAWP7G68EG9XekIZA-1; Mon, 09 Nov 2020 21:29:41 -0500 X-MC-Unique: czCRQyAWP7G68EG9XekIZA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 480E7186841D; Tue, 10 Nov 2020 02:29:38 +0000 (UTC) Received: from treble (ovpn-112-15.rdu2.redhat.com [10.10.112.15]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 02D1A3C04; Tue, 10 Nov 2020 02:29:32 +0000 (UTC) Date: Mon, 9 Nov 2020 20:29:24 -0600 From: Josh Poimboeuf To: Sami Tolvanen Subject: Re: [PATCH v6 22/25] x86/asm: annotate indirect jumps Message-ID: <20201110022924.tekltjo25wtrao7z@treble> References: <20201015102216.GB2611@hirez.programming.kicks-ass.net> <20201015203942.f3kwcohcwwa6lagd@treble> <20201020185217.ilg6w5l7ujau2246@treble> <20201021085606.GZ2628@hirez.programming.kicks-ass.net> <20201023173617.GA3021099@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201109_212946_874252_D695F835 X-CRM114-Status: GOOD ( 42.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arch , Kees Cook , "Paul E. McKenney" , Jann Horn , Peter Zijlstra , Greg Kroah-Hartman , Masahiro Yamada , the arch/x86 maintainers , Nick Desaulniers , kernel list , Steven Rostedt , linux-kbuild , clang-built-linux , linux-pci@vger.kernel.org, Kernel Hardening , Will Deacon , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBOb3YgMDksIDIwMjAgYXQgMDM6MTE6NDFQTSAtMDgwMCwgU2FtaSBUb2x2YW5lbiB3 cm90ZToKPiBPbiBGcmksIE9jdCAyMywgMjAyMCBhdCAxMDozNiBBTSBTYW1pIFRvbHZhbmVuIDxz YW1pdG9sdmFuZW5AZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gV2VkLCBPY3QgMjEsIDIw MjAgYXQgMDU6MjI6NTlQTSAtMDcwMCwgU2FtaSBUb2x2YW5lbiB3cm90ZToKPiA+ID4gVGhlcmUg YXJlIGEgY291cGxlIG9mIGRpZmZlcmVuY2VzLCBsaWtlIHRoZSBmaXJzdCAidW5kZWZpbmVkIHN0 YWNrCj4gPiA+IHN0YXRlIiB3YXJuaW5nIHBvaW50aW5nIHRvIHNldF9icmluZ3VwX2lkdF9oYW5k bGVyLmNvbnN0cHJvcC4wKCkKPiA+ID4gaW5zdGVhZCBvZiBfX3N3aXRjaF90b19hc20oKS4gSSB0 cmllZCBydW5uaW5nIHRoaXMgd2l0aCAtLWJhY2t0cmFjZSwKPiA+ID4gYnV0IG9ianRvb2wgc2Vn ZmF1bHRzIGF0IHRoZSBmaXJzdCAuZW50cnkudGV4dCB3YXJuaW5nOgo+ID4KPiA+IExvb2tzIGxp a2UgaXQgc2VnZmF1bHRzIHdoZW4gY2FsbGluZyBCVF9GVU5DKCkgZm9yIGFuIGluc3RydWN0aW9u IHRoYXQKPiA+IGRvZXNuJ3QgaGF2ZSBhIHNlY3Rpb24gKD8pLiBBcHBseWluZyB0aGlzIHBhdGNo IGFsbG93cyBvYmp0b29sIHRvIGZpbmlzaAo+ID4gd2l0aCAtLWJhY2t0cmFjZToKPiA+Cj4gPiBk aWZmIC0tZ2l0IGEvdG9vbHMvb2JqdG9vbC9jaGVjay5jIGIvdG9vbHMvb2JqdG9vbC9jaGVjay5j Cj4gPiBpbmRleCBjMjE2ZGQ0ZDY2MmMuLjYxOGIwYzRmMjg5MCAxMDA2NDQKPiA+IC0tLSBhL3Rv b2xzL29ianRvb2wvY2hlY2suYwo+ID4gKysrIGIvdG9vbHMvb2JqdG9vbC9jaGVjay5jCj4gPiBA QCAtMjYwNCw3ICsyNjA0LDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9icmFuY2goc3RydWN0IG9i anRvb2xfZmlsZSAqZmlsZSwgc3RydWN0IHN5bWJvbCAqZnVuYywKPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsaWRhdGVfYnJhbmNoKGZpbGUsIGZ1bmMsCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNu LT5qdW1wX2Rlc3QsIHN0YXRlKTsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHJldCkgewo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChiYWNrdHJhY2UpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGJhY2t0cmFjZSAmJiBpbnNuLT5zZWMpCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCVF9GVU5DKCIoYnJhbmNoKSIsIGluc24pOwo+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiA+Cj4gPgo+ID4gUnVubmluZyBvYmp0b29s IC1iYXJmbGQgb24gYW4gYWxseWVzY29uZmlnK0xUTyB2bWxpbnV4Lm8gcHJpbnRzIG91dCB0aGUK PiA+IGZvbGxvd2luZywgaWdub3JpbmcgdGhlIGNyeXB0byB3YXJuaW5ncyBmb3Igbm93Ogo+IAo+ IE9LLCBJIHNwZW50IHNvbWUgdGltZSBsb29raW5nIGF0IHRoZXNlIHdhcm5pbmdzIGFuZCB0aGUg Y29uZmlncyBuZWVkZWQKPiB0byByZXByb2R1Y2UgdGhlbSB3aXRob3V0IGJ1aWxkaW5nIGFsbHll c2NvbmZpZzoKPiAKPiBDT05GSUdfWEVOCj4gCj4gX19zd2l0Y2hfdG9fYXNtKCkrMHgwOiB1bmRl ZmluZWQgc3RhY2sgc3RhdGUKPiAgIHhlbl9oeXBlcmNhbGxfc2V0X3RyYXBfdGFibGUoKSsweDA6 IDw9PT0gKHN5bSkKPiAKPiBDT05GSUdfWEVOX1BWCj4gCj4gLmVudHJ5LnRleHQrMHhmZmQ6IHNp YmxpbmcgY2FsbCBmcm9tIGNhbGxhYmxlIGluc3RydWN0aW9uIHdpdGgKPiBtb2RpZmllZCBzdGFj ayBmcmFtZQo+ICAgLmVudHJ5LnRleHQrMHhmY2I6IChicmFuY2gpCj4gICAuZW50cnkudGV4dCsw eGZiNTogKGFsdCkKPiAgIC5lbnRyeS50ZXh0KzB4ZmIwOiAoYWx0KQo+ICAgLmVudHJ5LnRleHQr MHhmNzg6IChicmFuY2gpCj4gICAuZW50cnkudGV4dCsweDljOiAoYnJhbmNoKQo+ICAgeGVuX3N5 c2NhbGxfdGFyZ2V0KCkrMHgxNTogKGJyYW5jaCkKPiAgIHhlbl9zeXNjYWxsX3RhcmdldCgpKzB4 MDogPD09PSAoc3ltKQo+IC5lbnRyeS50ZXh0KzB4MTc1NDogdW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rp b24gaW4gY2FsbGFibGUgZnVuY3Rpb24KPiAgIC5lbnRyeS50ZXh0KzB4MTcxZDogKGJyYW5jaCkK PiAgIC5lbnRyeS50ZXh0KzB4MTcwNzogKGFsdCkKPiAgIC5lbnRyeS50ZXh0KzB4MTcwMTogKGFs dCkKPiAgIHhlbl9zeXNjYWxsMzJfdGFyZ2V0KCkrMHgxNTogKGJyYW5jaCkKPiAgIHhlbl9zeXNj YWxsMzJfdGFyZ2V0KCkrMHgwOiA8PT09IChzeW0pCj4gLmVudHJ5LnRleHQrMHgxNjM0OiByZWR1 bmRhbnQgQ0xECj4gCj4gQmFja3RyYWNlIGRvZXNu4oCZdCBwcmludCBvdXQgYW55dGhpbmcgdXNl ZnVsIGZvciB0aGUg4oCccmVkdW5kYW50IENMROKAnQo+IGVycm9yLCBidXQgaXQgb2NjdXJzIHdo ZW4gdmFsaWRhdGVfYnJhbmNoIGlzIGxvb2tpbmcgYXQKPiB4ZW5fc3lzZW50ZXJfdGFyZ2V0Lgo+ IAo+IGRvX3N1c3BlbmRfbG93bGV2ZWwoKSsweDExNjogc2libGluZyBjYWxsIGZyb20gY2FsbGFi bGUgaW5zdHJ1Y3Rpb24KPiB3aXRoIG1vZGlmaWVkIHN0YWNrIGZyYW1lCj4gICBkb19zdXNwZW5k X2xvd2xldmVsKCkrMHg5YTogKGJyYW5jaCkKPiAgIGRvX3N1c3BlbmRfbG93bGV2ZWwoKSsweDA6 IDw9PT0gKHN5bSkKPiAKPiAuZW50cnkudGV4dCsweDQ4OiBzdGFjayBzdGF0ZSBtaXNtYXRjaDog Y2ZhMT03LTggY2ZhMj0tMSswCj4gICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQrMHhmZmZmZmZmZmZm ZmZmZmZmOiAoYnJhbmNoKQo+ICAgLmVudHJ5LnRleHQrMHgyMTogKGFsdCkKPiAgIC5lbnRyeS50 ZXh0KzB4MWM6IChhbHQpCj4gICAuZW50cnkudGV4dCsweDEwOiA8PT09IChoaW50KQo+IC5lbnRy eS50ZXh0KzB4MTVmZDogc3RhY2sgc3RhdGUgbWlzbWF0Y2g6IGNmYTE9Ny04IGNmYTI9LTErMAo+ ICAgLmFsdGluc3RyX3JlcGxhY2VtZW50KzB4ZmZmZmZmZmZmZmZmZmZmZjogKGJyYW5jaCkKPiAg IC5lbnRyeS50ZXh0KzB4MTVkYzogKGFsdCkKPiAgIC5lbnRyeS50ZXh0KzB4MTVkNzogKGFsdCkK PiAgIC5lbnRyeS50ZXh0KzB4MTVkMDogPD09PSAoaGludCkKPiAuZW50cnkudGV4dCsweDE2OGM6 IHN0YWNrIHN0YXRlIG1pc21hdGNoOiBjZmExPTctOCBjZmEyPS0xKzAKPiAgIC5hbHRpbnN0cl9y ZXBsYWNlbWVudCsweGZmZmZmZmZmZmZmZmZmZmY6IChicmFuY2gpCj4gICAuZW50cnkudGV4dCsw eDE2NmI6IChhbHQpCj4gICAuZW50cnkudGV4dCsweDE2NjY6IChhbHQpCj4gICAuZW50cnkudGV4 dCsweDE2NjA6IDw9PT0gKGhpbnQpCgpJIGNhbid0IG1ha2UgbXVjaCBzZW5zZSBvZiBtb3N0IG9m IHRoZXNlIHdhcm5pbmdzLiAgRGlzYXNzZW1ibHkgd291bGQKaGVscC4KCihBbHNvLCBzb21ldGhp bmcgbGlrZSB0aGUgcGF0Y2ggYmVsb3cgc2hvdWxkIGhlbHAgb2JqdG9vbCBzaG93IG1vcmUKc3lt Ym9sIG5hbWVzLikKCj4gSXQgbG9va3MgbGlrZSB0aGUgc3RhY2sgc3RhdGUgbWlzbWF0Y2ggd2Fy bmluZ3MgY2FuIGJlIGZpeGVkIGJ5IGFkZGluZwo+IHVud2luZCBoaW50cyBhbHNvIHRvIGVudHJ5 X1NZU0NBTExfNjRfYWZ0ZXJfaHdmcmFtZSwKPiBlbnRyeV9TWVNFTlRFUl9jb21wYXRfYWZ0ZXJf aHdmcmFtZSwgYW5kCj4gZW50cnlfU1lTQ0FMTF9jb21wYXRfYWZ0ZXJfaHdmcmFtZS4gRG9lcyB0 aGF0IHNvdW5kIGNvcnJlY3Q/CgpObywgdGhvc2UgY29kZSBwYXRocyBzaG91bGQgYWxyZWFkeSBo YXZlIHRoZSBoaW50cyB0aGV5IG5lZWQsIHVubGVzcyBJJ20KbWlzc2luZyBzb21ldGhpbmcuCgo+ IENPTkZJR19BTURfTUVNX0VOQ1JZUFQKPiAKPiAuaGVhZC50ZXh0KzB4ZmI6IHVuc3VwcG9ydGVk IGluc3RydWN0aW9uIGluIGNhbGxhYmxlIGZ1bmN0aW9uCj4gICAuaGVhZC50ZXh0KzB4MjA3OiAo YnJhbmNoKQo+ICAgc2V2X2VzX3BsYXlfZGVhZCgpKzB4ZmY6IChicmFuY2gpCj4gICBzZXZfZXNf cGxheV9kZWFkKCkrMHhkMjogKGJyYW5jaCkKPiAgIHNldl9lc19wbGF5X2RlYWQoKSsweGE4OiAo YWx0KQo+ICAgc2V2X2VzX3BsYXlfZGVhZCgpKzB4MTQ0OiAoYnJhbmNoKQo+ICAgc2V2X2VzX3Bs YXlfZGVhZCgpKzB4MTBiOiAoYnJhbmNoKQo+ICAgc2V2X2VzX3BsYXlfZGVhZCgpKzB4MWY6IChi cmFuY2gpCj4gICBzZXZfZXNfcGxheV9kZWFkKCkrMHgwOiA8PT09IChzeW0pCj4gCj4gVGhpcyBo YXBwZW5zIGJlY2F1c2Ugc2V2X2VzX3BsYXlfZGVhZCBjYWxscyBzdGFydF9jcHUwLiBJdCBhbHdh eXMgaGFzLAo+IGJ1dCBvYmp0b29sIGhhc27igJl0IGJlZW4gYWJsZSB0byBmb2xsb3cgdGhlIGNh bGwgd2hlbiBwcm9jZXNzaW5nIG9ubHkKPiBzZXYtZXMuby4gQW55IHRob3VnaHRzIG9uIHRoZSBw cmVmZXJyZWQgd2F5IHRvIGZpeCB0aGlzIG9uZT8KCk9ianRvb2wgaXNuJ3Qgc3VwcG9zZWQgdG8g dHJhdmVyc2UgdGhyb3VnaCBjYWxsIGluc3RydWN0aW9ucyBsaWtlIHRoYXQuCklzIExUTyBpbmxp bmluZyB0aGUgY2FsbCBvciBzb21ldGhpbmc/Cgo+IENPTkZJR19DUllQVE9fQ1JDMzJDX0lOVEVM Cj4gCj4gX194ODZfcmV0cG9saW5lX3JkaSgpKzB4MTA6IHJldHVybiB3aXRoIG1vZGlmaWVkIHN0 YWNrIGZyYW1lCj4gICBfX3g4Nl9yZXRwb2xpbmVfcmRpKCkrMHgwOiAoYnJhbmNoKQo+ICAgLmFs dGluc3RyX3JlcGxhY2VtZW50KzB4MTQ3OiAoYnJhbmNoKQo+ICAgLnRleHQrMHhhZjRjNzogKGFs dCkKPiAgIC50ZXh0KzB4YjAzYjA6IChicmFuY2gpCj4gICAudGV4dCsweGFmNDgyOiAoYnJhbmNo KQo+ICAgY3JjX3BjbCgpKzB4MTA6IChicmFuY2gpCj4gICBjcmNfcGNsKCkrMHgwOiA8PT09IChz eW0pCj4gCj4gX194ODZfcmV0cG9saW5lX3JkaSgpKzB4MDogc3RhY2sgc3RhdGUgbWlzbWF0Y2g6 IGNmYTE9NyszMiBjZmEyPTcrOAo+ICAgLmFsdGluc3RyX3JlcGxhY2VtZW50KzB4MjY1OiAoYnJh bmNoKQo+ICAgX194ODZfaW5kaXJlY3RfdGh1bmtfcmRpKCkrMHgwOiAoYWx0KQo+ICAgX194ODZf aW5kaXJlY3RfdGh1bmtfcmRpKCkrMHgwOiA8PT09IChzeW0pCj4gCj4gVGhpcyBpcyBkaWZmZXJl bnQgZnJvbSB0aGUgd2FybmluZ3MgaW4gdGhlIHJlc3Qgb2YgdGhlIGFyY2gveDg2L2NyeXB0bwo+ IGNvZGUuIERvIHdlIG5lZWQgc29tZSBraW5kIG9mIGEgaGludCBiZWZvcmUgdGhlIEpNUF9OT1NQ RUMgaW4gY3JjX3BjbD8KCkknbGwgbmVlZCB0byBsb29rIG1vcmUgaW50byB0aGF0IG9uZS4KCj4g Q09ORklHX0ZVTkNUSU9OX1RSQUNFUgo+IAo+IF9feDg2X3JldHBvbGluZV9yZGkoKSsweDA6IHN0 YWNrIHN0YXRlIG1pc21hdGNoOiBjZmExPTcrMzIgY2ZhMj0tMSswCj4gICAuYWx0aW5zdHJfcmVw bGFjZW1lbnQrMHgxMTE6IChicmFuY2gpCj4gICAudGV4dCsweDI4YTU6IChhbHQpCj4gICAudGV4 dCsweDI4ODA6IDw9PT0gKGhpbnQpCj4gCj4gVGhpcyB1bndpbmQgaGludCBpcyBpbiByZXR1cm5f dG9faGFuZGxlci4gUmVtb3ZpbmcgaXQgb2J2aW91c2x5IHN0b3BzCj4gdGhlIHdhcm5pbmcgYW5k IGRvZXNu4oCZdCBzZWVtIHRvIHJlc3VsdCBpbiBhbnkgb3RoZXIgY29tcGxhaW50cyBmcm9tCj4g b2JqdG9vbC4gSXMgdGhpcyBoaW50IGNvcnJlY3Q/CgpUaGUgaGludCBpcyBzdXBwb3NlZCB0byBi ZSB0aGVyZS4gIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIG9uZSBlaXRoZXIuCkRpZCBpdCBpbmxp bmUgdGhlIGNhbGwgdG8gZnRyYWNlX3JldHVybl90b19oYW5kbGVyKCk/Cgo+IFRoZSByZW1haW5p bmcgd2FybmluZ3MgYXJlIGFsbCDigJx1bnN1cHBvcnRlZCBzdGFjayBwb2ludGVyIHJlYWxpZ25t ZW504oCdCj4gaXNzdWVzIGluIHRoZSBjcnlwdG8gY29kZSBhbmQgY2FuIGJlIHJlcHJvZHVjZWQg d2l0aCB0aGUgZm9sbG93aW5nCj4gY29uZmlnczoKPiAKPiBDT05GSUdfQ1JZUFRPX0FFU19OSV9J TlRFTAo+IENPTkZJR19DUllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYMl9YODZfNjQKPiBDT05GSUdf Q1JZUFRPX1NIQTFfU1NTRTMKPiBDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TU1NFMwo+IENPTkZJR19D UllQVE9fU0hBNTEyX1NTU0UzCj4gCj4gSm9zaCwgaGF2ZSB5b3UgaGFkIGEgY2hhbmNlIHRvIGxv b2sgYXQgdGhlIGNyeXB0byBwYXRjaGVzIHlvdSBtZW50aW9uZWQgZWFybGllcj8KCkkndmUgYmVl biB0cmF2ZWxpbmcgZm9yIHNldmVyYWwgd2Vla3MsIGJ1dCBub3cgbXkgd29yayBzY2hlZHVsZSBp cwpnZXR0aW5nIG1vcmUgbm9ybWFsLCBzbyBJJ2xsIGhvcGVmdWxseSBiZSBhYmxlIHRvIHNwZW5k IHRpbWUgb24gdGhpcy4KCkhvdyB3b3VsZCBJIHJlY3JlYXRlIGFsbCB0aGVzZSB3YXJuaW5ncz8K CklzIGl0CgogIGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1pdG9sdmFuZW4vbGludXguZ2l0IGx0by12 NgoKcGx1cyBhIGNlcnRhaW4gdmVyc2lvbiBvZiBjbGFuZz8KCkFsc28sIGFueSBkZXRhaWxzIG9u IGhvdyB0byBidWlsZCBjbGFuZyB3b3VsZCBiZSBhcHByZWNpYXRlZCwgaXQncyBiZWVuCmEgd2hp bGUgc2luY2UgSSB0cmllZC4KCgpIZXJlJ3MgdGhlIHBhdGNoIGZvciBob3BlZnVsbHkgbWFraW5n IHRoZSB3YXJuaW5ncyBtb3JlIGhlbHBmdWw6CgoKZGlmZiAtLWdpdCBhL3Rvb2xzL29ianRvb2wv Y2hlY2suYyBiL3Rvb2xzL29ianRvb2wvY2hlY2suYwppbmRleCBjNmFiNDQ1NDNjOTIuLmU1ZjVj YjEwNzY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvb2JqdG9vbC9jaGVjay5jCisrKyBiL3Rvb2xzL29i anRvb2wvY2hlY2suYwpAQCAtMjQzMiw2ICsyNDMyLDkgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9i cmFuY2goc3RydWN0IG9ianRvb2xfZmlsZSAqZmlsZSwgc3RydWN0IHN5bWJvbCAqZnVuYywKIAlz ZWMgPSBpbnNuLT5zZWM7CiAKIAl3aGlsZSAoMSkgeworCisJCWlmIChpbnNuLT5vZmZzZXQgPT0g MHg0OCkKKwkJCVdBUk5fRlVOQygieW8iLCBzZWMsIGluc24tPm9mZnNldCk7CiAJCW5leHRfaW5z biA9IG5leHRfaW5zbl9zYW1lX3NlYyhmaWxlLCBpbnNuKTsKIAogCQlpZiAoZmlsZS0+Y19maWxl ICYmIGZ1bmMgJiYgaW5zbi0+ZnVuYyAmJiBmdW5jICE9IGluc24tPmZ1bmMtPnBmdW5jKSB7CmRp ZmYgLS1naXQgYS90b29scy9vYmp0b29sL2VsZi5jIGIvdG9vbHMvb2JqdG9vbC9lbGYuYwppbmRl eCA0ZTFkNzQ2MDU3NGIuLmNlZDdlNDc1NGNiYSAxMDA2NDQKLS0tIGEvdG9vbHMvb2JqdG9vbC9l bGYuYworKysgYi90b29scy9vYmp0b29sL2VsZi5jCkBAIC0yMTcsNiArMjE3LDIxIEBAIHN0cnVj dCBzeW1ib2wgKmZpbmRfZnVuY19jb250YWluaW5nKHN0cnVjdCBzZWN0aW9uICpzZWMsIHVuc2ln bmVkIGxvbmcgb2Zmc2V0KQogCXJldHVybiBOVUxMOwogfQogCitzdHJ1Y3Qgc3ltYm9sICpmaW5k X3N5bWJvbF9wcmVjZWRpbmcoc3RydWN0IHNlY3Rpb24gKnNlYywgdW5zaWduZWQgbG9uZyBvZmZz ZXQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCisJLyoKKwkgKiBUaGlzIGlzIHNsb3csIGJ1 dCB1c2VkIGZvciB3YXJuaW5nIG1lc3NhZ2VzLgorCSAqLworCXdoaWxlICgxKSB7CisJCXN5bSA9 IGZpbmRfc3ltYm9sX2J5X29mZnNldChzZWMsIG9mZnNldCk7CisJCWlmIChzeW0gfHwgIW9mZnNl dCkKKwkJCXJldHVybiBzeW07CisJCW9mZnNldC0tOworCX0KK30KKwogc3RydWN0IHN5bWJvbCAq ZmluZF9zeW1ib2xfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZWxmICplbGYsIGNvbnN0IGNoYXIgKm5h bWUpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwpkaWZmIC0tZ2l0IGEvdG9vbHMvb2JqdG9vbC9l bGYuaCBiL3Rvb2xzL29ianRvb2wvZWxmLmgKaW5kZXggODA3ZjhjNjcwMDk3Li44NDE5MDJlZDM4 MWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL29ianRvb2wvZWxmLmgKKysrIGIvdG9vbHMvb2JqdG9vbC9l bGYuaApAQCAtMTM2LDEwICsxMzYsMTEgQEAgc3RydWN0IHN5bWJvbCAqZmluZF9mdW5jX2J5X29m ZnNldChzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBzdHJ1Y3Qg c3ltYm9sICpmaW5kX3N5bWJvbF9ieV9vZmZzZXQoc3RydWN0IHNlY3Rpb24gKnNlYywgdW5zaWdu ZWQgbG9uZyBvZmZzZXQpOwogc3RydWN0IHN5bWJvbCAqZmluZF9zeW1ib2xfYnlfbmFtZShjb25z dCBzdHJ1Y3QgZWxmICplbGYsIGNvbnN0IGNoYXIgKm5hbWUpOwogc3RydWN0IHN5bWJvbCAqZmlu ZF9zeW1ib2xfY29udGFpbmluZyhjb25zdCBzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCB1bnNpZ25lZCBs b25nIG9mZnNldCk7CitzdHJ1Y3Qgc3ltYm9sICpmaW5kX2Z1bmNfY29udGFpbmluZyhzdHJ1Y3Qg c2VjdGlvbiAqc2VjLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CitzdHJ1Y3Qgc3ltYm9sICpmaW5k X3N5bWJvbF9wcmVjZWRpbmcoc3RydWN0IHNlY3Rpb24gKnNlYywgdW5zaWduZWQgbG9uZyBvZmZz ZXQpOwogc3RydWN0IHJlbG9jICpmaW5kX3JlbG9jX2J5X2Rlc3QoY29uc3Qgc3RydWN0IGVsZiAq ZWxmLCBzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBzdHJ1Y3Qg cmVsb2MgKmZpbmRfcmVsb2NfYnlfZGVzdF9yYW5nZShjb25zdCBzdHJ1Y3QgZWxmICplbGYsIHN0 cnVjdCBzZWN0aW9uICpzZWMsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWdu ZWQgaW50IGxlbik7Ci1zdHJ1Y3Qgc3ltYm9sICpmaW5kX2Z1bmNfY29udGFpbmluZyhzdHJ1Y3Qg c2VjdGlvbiAqc2VjLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBpbnQgZWxmX3JlYnVpbGRfcmVs b2Nfc2VjdGlvbihzdHJ1Y3QgZWxmICplbGYsIHN0cnVjdCBzZWN0aW9uICpzZWMpOwogCiAjZGVm aW5lIGZvcl9lYWNoX3NlYyhmaWxlLCBzZWMpCQkJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvb2Jq dG9vbC93YXJuLmggYi90b29scy9vYmp0b29sL3dhcm4uaAppbmRleCA3Nzk5ZjYwZGU4MGEuLjMz ZGEwZjJlZDlkNSAxMDA2NDQKLS0tIGEvdG9vbHMvb2JqdG9vbC93YXJuLmgKKysrIGIvdG9vbHMv b2JqdG9vbC93YXJuLmgKQEAgLTIyLDYgKzIyLDggQEAgc3RhdGljIGlubGluZSBjaGFyICpvZmZz dHIoc3RydWN0IHNlY3Rpb24gKnNlYywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiAJdW5zaWduZWQg bG9uZyBuYW1lX29mZjsKIAogCWZ1bmMgPSBmaW5kX2Z1bmNfY29udGFpbmluZyhzZWMsIG9mZnNl dCk7CisJaWYgKCFmdW5jKQorCQlmdW5jID0gZmluZF9zeW1ib2xfcHJlY2VkaW5nKHNlYywgb2Zm c2V0KTsKIAlpZiAoZnVuYykgewogCQluYW1lID0gZnVuYy0+bmFtZTsKIAkJbmFtZV9vZmYgPSBv ZmZzZXQgLSBmdW5jLT5vZmZzZXQ7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=