From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5621 invoked by alias); 11 Feb 2020 01:23:06 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 5613 invoked by uid 89); 11 Feb 2020 01:23:06 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-ot1-f65.google.com Received: from mail-ot1-f65.google.com (HELO mail-ot1-f65.google.com) (209.85.210.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Feb 2020 01:23:02 +0000 Received: by mail-ot1-f65.google.com with SMTP id i6so8475559otr.7 for ; Mon, 10 Feb 2020 17:23:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KvXe4RSrH8nyFJVoaRvseSJqOM+AnkHj5WTBProCgdk=; b=odp4IAfWwXiwyzlysm0a7KNMQQIfPQ92GTXVNCw5IK6QBuvHfgIjFtzTBN1G1hrO/l zj2w68iRU2HI8UwxbqLbU3sc2a0D8jGtfPZgInp0yZCiw9E2sozyJhuRObH6VUMMOj3q dyQj8BADjKXpM0ZGba76TqCIhjzKkdLLIfxSX7hU+LnkGMN+t5bTMGtWjQBZo6Vaa6kA 3ub3EgMQ/lSSajHpup082z6Fd8ENNmxgxz7b+h/dnEIPY2IxmF9s1Lv86oh02/Bq1LPs PYttWEwpMO3VlSs907r5C91xz9S5+kM5OHLUXu/aZjpINnOx3E7TvCo5pbBHODP5mRLa xH9g== MIME-Version: 1.0 References: <20200210142435.397899-1-hjl.tools@gmail.com> <20200210230156.GR5669@bubble.grove.modra.org> In-Reply-To: <20200210230156.GR5669@bubble.grove.modra.org> From: "H.J. Lu" Date: Tue, 11 Feb 2020 01:23:00 -0000 Message-ID: Subject: Re: [PATCH] Use GCC LTO wrapper to get real symbols from LTO IR objects To: Alan Modra Cc: Binutils Content-Type: multipart/mixed; boundary="000000000000598835059e42b2a9" X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00161.txt.bz2 --000000000000598835059e42b2a9 Content-Type: text/plain; charset="UTF-8" Content-length: 1788 On Mon, Feb 10, 2020 at 3:02 PM Alan Modra wrote: > > Wow, that's a lot of work to get proper symbol type. What happens if Very true. I couldn't come up with a better solution without changing plugin API. > you run nm on a system where gcc isn't installed? Or where the lto > version doesn't match? I assume standard GCC installation directory layout like PREFIX/libexec/gcc/TARGET/VERSION/liblto_plugin.so PREFIX/libexec/gcc/TARGET/VERSION/lto-wrapper and PREFIX/bin/TARGET-gcc or PREFIX/bin/gcc If there is no gcc nor lto-wrapper at expected location, no real symbols will be used. If LTO version doesn't match, it is a GCC installation problem. > On Mon, Feb 10, 2020 at 01:31:16PM -0800, H.J. Lu wrote: > > + gcc_name = bfd_malloc (length + target_length + sizeof ("gcc")); > > + memcpy (gcc_name, real_name, length); > > No check of bfd_malloc return value before use. Fixed. > > + wrapper_name = bfd_malloc (length + sizeof ("lto-wrapper")); > > + memcpy (wrapper_name, real_name, length); > > Again. Fixed. > > + real_syms = (asymbol **) xmalloc (real_symsize); > > xmalloc shouldn't be used in libbfd. Fixed. > > struct plugin_data_struct *plugin_data = > > bfd_alloc (abfd, sizeof (plugin_data_struct)); > > This also doesn't check for NULL, preexisting bug. Fixed. > > + int i; > > + > > + /* NB: LTO symbols are owned by LTO plugin. Create a copy so that we > > + can use it in bfd_plugin_canonicalize_symtab. */ > > + copy_of_syms = bfd_alloc (abfd, nsyms * sizeof (*syms)); > > + memcpy (copy_of_syms, syms, nsyms * sizeof (*syms)); > > + for (i = 0; i < nsyms; i++) > > + copy_of_syms[i].name = xstrdup (syms[i].name); > > xstrdup shouldn't be used in libbfd. Fixed. Here is the updated patch. -- H.J. --000000000000598835059e42b2a9 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Use-GCC-LTO-wrapper-to-get-real-symbols-from-LTO-IR-.patch" Content-Disposition: attachment; filename="0001-Use-GCC-LTO-wrapper-to-get-real-symbols-from-LTO-IR-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k6h74vds0 Content-length: 30073 RnJvbSAzNmM5ZTA5ZTVmNTBlOGQwMDc4MmQxNDUyODM1MjQxMmE2OTA1ODhk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgOSBGZWIgMjAyMCAxMzoz NToxMCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFVzZSBHQ0MgTFRPIHdyYXBw ZXIgdG8gZ2V0IHJlYWwgc3ltYm9scyBmcm9tIExUTyBJUiBvYmplY3RzCgpH Q0MgTFRPIHdyYXBwZXIgaXMgbmVlZGVkIHRvIGV4dHJhY3QgcmVhbCBzeW1i b2xzIGZyb20gTFRPIElSIG9iamVjdHMuClRoaXMgcGF0Y2ggZG9lcyB0aGUg Zm9sbG93aW5nOgoKMS4gU2V0IHVwIEdDQyBMVE8gd3JhcHBlciBmb3IgZWFj aCBMVE8gSVIgb2JqZWN0LgoyLiBSdW4gR0NDIExUTyB3cmFwcGVyIHRvIGdl dCB0aGUgcmVhbCBvYmplY3QuCjMuIEV4dHJhY3Qgc3ltYm9sIGluZm8gZnJv bSB0aGUgcmVhbCBvYmplY3QuCjQuIENsZWFudXAgYWZ0ZXJ3YXJkcy4KCmJm ZC8KCglQUiBiaW51dGlscy8yNTM1NQoJKiBjb25maWd1cmUuYWMgKEhBVkVf RVhFQ1VUQUJMRV9TVUZGSVgpOiBOZXcgQUNfREVGSU5FLgoJKEVYRUNVVEFC TEVfU1VGRklYKTogTGlrZXdpc2UuCgkqIGNvbmZpZy5pbjogUmVnZW5lcmF0 ZWQuCgkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCgkqIHBsdWdpbi5jIChiZmRf cGx1Z2luX2Nsb3NlX2FuZF9jbGVhbnVwKTogUmVtb3ZlZC4KCShwbHVnaW5f bGlzdF9lbnRyeSk6IEFkZCBhbGxfc3ltYm9sc19yZWFkLCBjbGVhbnVwX2hh bmRsZXIsCglnY2MsIGx0b193cmFwcGVyLCByZXNvbHV0aW9uX2ZpbGUsIHJl c29sdXRpb25fb3B0aW9uLCBnY2NfZW52LAoJcmVhbF9iZmQsIHJlYWxfbnN5 bXMsIHJlYWxfc3ltcywgbHRvX25zeW1zIGFuZCBsdG9fc3ltcy4KCShnZXRf bHRvX3dyYXBwZXIpOiBOZXcuCgkoc2V0dXBfbHRvX3dyYXBwZXJfZW52KTog TGlrZXdpc2UuCgkoY3VycmVudF9wbHVnaW4pOiBMaWtld2lzZS4KCShyZWdp c3Rlcl9hbGxfc3ltYm9sc19yZWFkKTogTGlrZXdpc2UuCgkocmVnaXN0ZXJf Y2xlYW51cCk6IExpa2V3aXNlLgoJKGdldF9zeW1ib2xzKTogTGlrZXdpc2Uu CgkoYWRkX2lucHV0X2ZpbGUpOiBMaWtld2lzZS4KCShiZmRfcGx1Z2luX2Ns b3NlX2FuZF9jbGVhbnVwKTogTGlrZXdpc2UuCgkoY2xhaW1fZmlsZSk6IFJl bW92ZWQuCgkocmVnaXN0ZXJfY2xhaW1fZmlsZSk6IFNldCBjdXJyZW50X3Bs dWdpbi0+Y2xhaW1fZmlsZS4KCShhZGRfc3ltYm9scyk6IE1ha2UgYSBjb3B5 IG9mIExUTyBzeW1ib2xzLiAgU2V0IGx0b19uc3ltcyBhbmQKCWx0b19zeW1z IGluIGN1cnJlbnRfcGx1Z2luLgoJKHRyeV9jbGFpbSk6IFVzZSBjdXJyZW50 X3BsdWdpbi0+Y2xhaW1fZmlsZS4gIENhbGwgTFRPIHBsdWdpbgoJYWxsX3N5 bWJvbHNfcmVhZCBoYW5kbGVyLiAgQ29weSByZWFsIHN5bWJvbHMgdG8gcGx1 Z2luX2RhdGEuCglDYWxsIExUTyBwbHVnaW4gY2xlYW51cCBoYW5kbGVyLiAg Q2xlYW4gdXAgZm9yIExUTyB3cmFwcGVyLgoJKHRyeV9sb2FkX3BsdWdpbik6 IERvbid0IHJldXNlIHRoZSBwcmV2aW91cyBwbHVnaW4gZm9yIExUTwoJd3Jh cHBlci4gIFNldCB1cCBHQ0MgTFRPIHdyYXBwZXIgaWYgcG9zc2libGUuICBE b24ndCBzZXQKCXBsdWdpbl9saXN0X2l0ZXItPmNsYWltX2ZpbGUuCgkoYmZk X3BsdWdpbl9jYW5vbmljYWxpemVfc3ltdGFiKTogVXNlIHJlYWwgTFRPIHN5 bWJvbHMgaWYKCXBvc3NpYmxlLgoJKiBwbHVnaW4uaCAocGx1Z2luX2RhdGFf c3RydWN0KTogQWRkIHJlYWxfYmZkLCByZWFsX25zeW1zIGFuZAoJcmVhbF9z eW1zLgoKbGQvCgoJUFIgYmludXRpbHMvMjUzNTUKCSogdGVzdHN1aXRlL2xk LXBsdWdpbi9sdG8uZXhwOiBSdW4gUFIgYmludXRpbHMvMjUzNTUgdGVzdC4K CSogdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmM6IE5ldyBmaWxlLgoJ KiB0ZXN0c3VpdGUvbGQtcGx1Z2luL3ByMjUzNTUuZDogTGlrZXdpc2UuCgkq IHRlc3RzdWl0ZS9saWIvbGQtbGliLmV4cCAocnVuX2NjX2xpbmtfdGVzdHMp OiBTdXBwb3J0IGNvbXBpbGUKCW9ubHkgZHVtcC4KLS0tCiBiZmQvY29uZmln LmluICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBiZmQvY29uZmlndXJl ICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBiZmQvY29uZmlndXJlLmFj ICAgICAgICAgICAgICAgICB8ICAgNiArCiBiZmQvcGx1Z2luLmMgICAgICAg ICAgICAgICAgICAgICB8IDQ5NCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCiBiZmQvcGx1Z2luLmggICAgICAgICAgICAgICAgICAgICB8ICAg MyArCiBsZC90ZXN0c3VpdGUvbGQtcGx1Z2luL2x0by5leHAgICB8ICAgNSAr CiBsZC90ZXN0c3VpdGUvbGQtcGx1Z2luL3ByMjUzNTUuYyB8ICAgMiArCiBs ZC90ZXN0c3VpdGUvbGQtcGx1Z2luL3ByMjUzNTUuZCB8ICAgNCArCiBsZC90 ZXN0c3VpdGUvbGliL2xkLWxpYi5leHAgICAgICB8ICAgMSArCiA5IGZpbGVz IGNoYW5nZWQsIDUwOCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsZC90ZXN0c3VpdGUvbGQtcGx1Z2luL3By MjUzNTUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxkL3Rlc3RzdWl0ZS9sZC1w bHVnaW4vcHIyNTM1NS5kCgpkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5pbiBi L2JmZC9jb25maWcuaW4KaW5kZXggYmU1NzI5NjlmYzAuLmUxZGMwZjBjNDQ1 IDEwMDY0NAotLS0gYS9iZmQvY29uZmlnLmluCisrKyBiL2JmZC9jb25maWcu aW4KQEAgLTE4LDYgKzE4LDkgQEAKICAgIGxhbmd1YWdlIGlzIHJlcXVlc3Rl ZC4gKi8KICN1bmRlZiBFTkFCTEVfTkxTCiAKKy8qIFN1ZmZpeCB1c2VkIGZv ciBleGVjdXRhYmxlcywgaWYgYW55LiAqLworI3VuZGVmIEVYRUNVVEFCTEVf U1VGRklYCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxs b2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gK IApAQCAtOTUsNiArOTgsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh dmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZF X0RMRkNOX0gKIAorLyogRG9lcyB0aGUgcGxhdGZvcm0gdXNlIGFuIGV4ZWN1 dGFibGUgc3VmZml4PyAqLworI3VuZGVmIEhBVkVfRVhFQ1VUQUJMRV9TVUZG SVgKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY250bCcg ZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9GQ05UTAogCmRpZmYgLS1naXQg YS9iZmQvY29uZmlndXJlIGIvYmZkL2NvbmZpZ3VyZQppbmRleCBiY2MxYTRl YWYyZi4uY2NhNjdlZTEwODAgMTAwNzU1Ci0tLSBhL2JmZC9jb25maWd1cmUK KysrIGIvYmZkL2NvbmZpZ3VyZQpAQCAtMTI4MTMsNiArMTI4MTMsMTYgQEAg ZmkKIAogCiAKK2lmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCisKKyRhc19l Y2hvICIjZGVmaW5lIEhBVkVfRVhFQ1VUQUJMRV9TVUZGSVggMSIgPj5jb25m ZGVmcy5oCisKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNk ZWZpbmUgRVhFQ1VUQUJMRV9TVUZGSVggIiR7RVhFRVhUfSIKK19BQ0VPRgor CiAKIGhvc3Q2ND1mYWxzZQogdGFyZ2V0NjQ9ZmFsc2UKZGlmZiAtLWdpdCBh L2JmZC9jb25maWd1cmUuYWMgYi9iZmQvY29uZmlndXJlLmFjCmluZGV4IGM1 YmZiZDVkMTI5Li5hZjRkNGI4YzEzNSAxMDA2NDQKLS0tIGEvYmZkL2NvbmZp Z3VyZS5hYworKysgYi9iZmQvY29uZmlndXJlLmFjCkBAIC0xNTcsNiArMTU3 LDEyIEBAIEFNX01BSU5UQUlORVJfTU9ERQogQU1fQ09ORElUSU9OQUwoR0VO SU5TUkNfTkVWRVIsIGZhbHNlKQogQU1fSU5TVEFMTF9MSUJCRkQKIEFDX0VY RUVYVAoraWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgQUNfREVGSU5F KEhBVkVfRVhFQ1VUQUJMRV9TVUZGSVgsIDEsCisJICAgIFtEb2VzIHRoZSBw bGF0Zm9ybSB1c2UgYW4gZXhlY3V0YWJsZSBzdWZmaXg/XSkKK2ZpCitBQ19E RUZJTkVfVU5RVU9URUQoRVhFQ1VUQUJMRV9TVUZGSVgsICIke0VYRUVYVH0i LAorCQkgICBbU3VmZml4IHVzZWQgZm9yIGV4ZWN1dGFibGVzLCBpZiBhbnku XSkKIAogaG9zdDY0PWZhbHNlCiB0YXJnZXQ2ND1mYWxzZQpkaWZmIC0tZ2l0 IGEvYmZkL3BsdWdpbi5jIGIvYmZkL3BsdWdpbi5jCmluZGV4IDUzN2FiNjAz MTEwLi5mYzcwMmNiZjhkYiAxMDA2NDQKLS0tIGEvYmZkL3BsdWdpbi5jCisr KyBiL2JmZC9wbHVnaW4uYwpAQCAtNjksNyArNjksNiBAQCBkbGVycm9yICh2 b2lkKQogCiAjZW5kaWYgLyogIWRlZmluZWQgKEhBVkVfRExGQ05fSCkgJiYg ZGVmaW5lZCAoSEFWRV9XSU5ET1dTX0gpICAqLwogCi0jZGVmaW5lIGJmZF9w bHVnaW5fY2xvc2VfYW5kX2NsZWFudXAJCSAgICAgIF9iZmRfZ2VuZXJpY19j bG9zZV9hbmRfY2xlYW51cAogI2RlZmluZSBiZmRfcGx1Z2luX2JmZF9mcmVl X2NhY2hlZF9pbmZvCQkgICAgICBfYmZkX2dlbmVyaWNfYmZkX2ZyZWVfY2Fj aGVkX2luZm8KICNkZWZpbmUgYmZkX3BsdWdpbl9uZXdfc2VjdGlvbl9ob29r CQkgICAgICBfYmZkX2dlbmVyaWNfbmV3X3NlY3Rpb25faG9vawogI2RlZmlu ZSBiZmRfcGx1Z2luX2dldF9zZWN0aW9uX2NvbnRlbnRzCQkgICAgICBfYmZk X2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMKQEAgLTEyNCwxMyArMTIz LDMwOSBAQCBtZXNzYWdlIChpbnQgbGV2ZWwgQVRUUklCVVRFX1VOVVNFRCwK ICAgcmV0dXJuIExEUFNfT0s7CiB9CiAKK3N0cnVjdCBwbHVnaW5fbGlzdF9l bnRyeQoreworICAvKiBUaGVzZSBtdXN0IGJlIGluaXRpYWxpemVkIGZvciBl YWNoIElSIG9iamVjdCB3aXRoIExUTyB3cmFwcGVyLiAgKi8KKyAgdm9pZCAq aGFuZGxlOworICBsZF9wbHVnaW5fY2xhaW1fZmlsZV9oYW5kbGVyIGNsYWlt X2ZpbGU7CisgIGxkX3BsdWdpbl9hbGxfc3ltYm9sc19yZWFkX2hhbmRsZXIg YWxsX3N5bWJvbHNfcmVhZDsKKyAgbGRfcGx1Z2luX2FsbF9zeW1ib2xzX3Jl YWRfaGFuZGxlciBjbGVhbnVwX2hhbmRsZXI7CisgIGNoYXIgKnJlc29sdXRp b25fZmlsZTsKKyAgY2hhciAqcmVzb2x1dGlvbl9vcHRpb247CisgIGJmZCAq cmVhbF9iZmQ7CisgIGxvbmcgcmVhbF9uc3ltczsKKyAgYXN5bWJvbCAqKnJl YWxfc3ltczsKKyAgaW50IGx0b19uc3ltczsKKyAgY29uc3Qgc3RydWN0IGxk X3BsdWdpbl9zeW1ib2wgKmx0b19zeW1zOworCisgIHN0cnVjdCBwbHVnaW5f bGlzdF9lbnRyeSAqbmV4dDsKKworICAvKiBUaGVzZSBjYW4gYmUgcmV1c2Vk IGZvciBhbGwgSVIgb2JqZWN0cy4gICovCisgIGNvbnN0IGNoYXIgKnBsdWdp bl9uYW1lOworICBjaGFyICpnY2M7CisgIGNoYXIgKmx0b193cmFwcGVyOwor ICBjaGFyICpnY2NfZW52OworICBiZmRfYm9vbGVhbiBpbml0aWFsaXplZDsK K307CisKKy8qIFVzZSBHQ0MgTFRPIHdyYXBwZXIgdG8gY292ZXJ0IExUTyBJ UiBvYmplY3QgdG8gdGhlIHJlYWwgb2JqZWN0LiAgKi8KKworc3RhdGljIGJm ZF9ib29sZWFuCitnZXRfbHRvX3dyYXBwZXIgKHN0cnVjdCBwbHVnaW5fbGlz dF9lbnRyeSAqcGx1Z2luKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgY29u c3QgY2hhciAqcmVhbF9uYW1lOworICBjb25zdCBjaGFyICpiYXNlX25hbWU7 CisgIHNpemVfdCBsZW5ndGg7CisgIGNvbnN0IGNoYXIgKnRhcmdldF9zdGFy dCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnRhcmdldF9lbmQgPSBOVUxMOwor ICBzaXplX3QgdGFyZ2V0X2xlbmd0aCA9IDA7CisgIGNoYXIgKmdjY19uYW1l OworICBjaGFyICp3cmFwcGVyX25hbWU7CisgIGNoYXIgKnA7CisgIGNoYXIg ZGlyX3NlcGVyYXRvciA9ICdcMCc7CisgIGNoYXIgKnJlc29sdXRpb25fZmls ZTsKKworICBpZiAocGx1Z2luLT5pbml0aWFsaXplZCkKKyAgICB7CisgICAg ICBpZiAocGx1Z2luLT5sdG9fd3JhcHBlcikKKwl7CisJICByZXNvbHV0aW9u X2ZpbGUgPSBtYWtlX3RlbXBfZmlsZSAoIi5yZXMiKTsKKwkgIGlmIChyZXNv bHV0aW9uX2ZpbGUpCisJICAgIHsKKwkgICAgICBwbHVnaW4tPnJlc29sdXRp b25fZmlsZSA9IHJlc29sdXRpb25fZmlsZTsKKwkgICAgICBwbHVnaW4tPnJl c29sdXRpb25fb3B0aW9uID0gY29uY2F0ICgiLWZyZXNvbHV0aW9uPSIsCisJ CQkJCQkgIHJlc29sdXRpb25fZmlsZSwgTlVMTCk7CisJICAgICAgcmV0dXJu IFRSVUU7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFNv bWV0aGluZyBpcyB3cm9uZy4gIEdpdmUgdXAuICAqLworCSAgICAgIGZyZWUg KHBsdWdpbi0+Z2NjKTsKKwkgICAgICBmcmVlIChwbHVnaW4tPmx0b193cmFw cGVyKTsKKwkgICAgICBmcmVlIChwbHVnaW4tPmdjY19lbnYpOworCSAgICAg IHBsdWdpbi0+Z2NjID0gTlVMTDsKKwkgICAgICBwbHVnaW4tPmdjY19lbnYg PSBOVUxMOworCSAgICAgIHBsdWdpbi0+bHRvX3dyYXBwZXIgPSBOVUxMOwor CSAgICB9CisJfQorCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg IHBsdWdpbi0+aW5pdGlhbGl6ZWQgPSBUUlVFOworCisgIC8qIENoZWNrIGZv ciBQUkVGSVgvbGliZXhlYy9nY2MvVEFSR0VUL1ZFUlNJT04vbGlibHRvX3Bs dWdpbi5zby4gICovCisgIHJlYWxfbmFtZSA9IGxyZWFscGF0aCAocGx1Z2lu LT5wbHVnaW5fbmFtZSk7CisgIGJhc2VfbmFtZSA9IGxiYXNlbmFtZSAocmVh bF9uYW1lKTsKKworICAvKiBUaGUgZGlyZWN0b3J5IGxlbmd0aCBpbiBwbHVn aW4gcGF0aG5hbWUuICAqLworICBsZW5ndGggPSBiYXNlX25hbWUgLSByZWFs X25hbWU7CisKKyAgLyogU2tpcCBpZiB0aGVyZSBpcyBubyBQUkVGSVguICAq LworICBpZiAoIWxlbmd0aCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcCA9 IChjaGFyICopIHJlYWxfbmFtZSArIGxlbmd0aCAtIDE7CisgIGlmIChJU19E SVJfU0VQQVJBVE9SICgqcCkpCisgICAgeworICAgICAgaW50IGxldmVsID0g MDsKKyAgICAgIGZvciAoOyBwICE9IHJlYWxfbmFtZTsgcC0tKQorCWlmIChJ U19ESVJfU0VQQVJBVE9SICgqcCkpCisJICB7CisJICAgIGxldmVsKys7CisJ ICAgIGlmIChsZXZlbCA9PSAyKQorCSAgICAgIHRhcmdldF9lbmQgPSBwOwor CSAgICBlbHNlIGlmIChsZXZlbCA9PSAzKQorCSAgICAgIHsKKwkJdGFyZ2V0 X3N0YXJ0ID0gcCArIDE7CisJCXRhcmdldF9sZW5ndGggPSB0YXJnZXRfZW5k IC0gdGFyZ2V0X3N0YXJ0OworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAobGV2 ZWwgPT0gNSkKKwkgICAgICB7CisJCWRpcl9zZXBlcmF0b3IgPSAqcDsKKwkJ YnJlYWs7CisJICAgICAgfQorCSAgfQorICAgIH0KKworICAvKiBTa2lwIGlm IHRoZXJlIGlzIG5vIFRBUkdFVCBub3IgUFJFRklYLiAgKi8KKyAgaWYgKCF0 YXJnZXRfbGVuZ3RoIHx8ICFkaXJfc2VwZXJhdG9yKQorICAgIHJldHVybiBG QUxTRTsKKworI2lmZGVmIEhBVkVfRVhFQ1VUQUJMRV9TVUZGSVgKKyMgZGVm aW5lIEdDQ19FWEVDVVRBQkxFCQkiZ2NjIiBFWEVDVVRBQkxFX1NVRkZJWAor IyBkZWZpbmUgTFRPX1dSQVBQRVJfRVhFQ1VUQUJMRQkibHRvLXdyYXBwZXIi IEVYRUNVVEFCTEVfU1VGRklYCisjZWxzZQorIyBkZWZpbmUgR0NDX0VYRUNV VEFCTEUJCSJnY2MiCisjIGRlZmluZSBMVE9fV1JBUFBFUl9FWEVDVVRBQkxF CSJsdG8td3JhcHBlciIKKyNlbmRpZgorICBnY2NfbmFtZSA9IGJmZF9tYWxs b2MgKGxlbmd0aCArIHRhcmdldF9sZW5ndGgKKwkJCSArIHNpemVvZiAoR0ND X0VYRUNVVEFCTEUpKTsKKyAgaWYgKGdjY19uYW1lID09IE5VTEwpCisgICAg cmV0dXJuIEZBTFNFOworICBtZW1jcHkgKGdjY19uYW1lLCByZWFsX25hbWUs IGxlbmd0aCk7CisKKyAgLyogR2V0IFBSRUZJWC9iaW4vLiAgKi8KKyAgcCAr PSBnY2NfbmFtZSAtIHJlYWxfbmFtZTsKKyAgbWVtY3B5IChwICsgMSwgImJp biIsIDMpOworICBwWzRdID0gZGlyX3NlcGVyYXRvcjsKKworICAvKiBUcnkg UFJFRklYL2Jpbi9UQVJHRVQtZ2NjIGZpcnN0LiAgKi8KKyAgbWVtY3B5IChw ICsgNSwgdGFyZ2V0X3N0YXJ0LCB0YXJnZXRfbGVuZ3RoKTsKKyAgcFs1ICsg dGFyZ2V0X2xlbmd0aF0gPSAnLSc7CisgIG1lbWNweSAocCArIDUgKyB0YXJn ZXRfbGVuZ3RoICsgMSwgR0NDX0VYRUNVVEFCTEUsCisJICBzaXplb2YgKEdD Q19FWEVDVVRBQkxFKSk7CisgIGlmIChzdGF0IChnY2NfbmFtZSwgJnN0KSAh PSAwIHx8ICFTX0lTUkVHIChzdC5zdF9tb2RlKSkKKyAgICB7CisgICAgICAv KiBUaGVuIHRyeSBQUkVGSVgvYmluL2djYy4gICovCisgICAgICBtZW1jcHkg KHAgKyA1LCBHQ0NfRVhFQ1VUQUJMRSwgc2l6ZW9mIChHQ0NfRVhFQ1VUQUJM RSkpOworICAgICAgaWYgKHN0YXQgKGdjY19uYW1lLCAmc3QpICE9IDAgfHwg IVNfSVNSRUcgKHN0LnN0X21vZGUpKQorCXsKKwkgIGZyZWUgKGdjY19uYW1l KTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgfQorCisgIC8qIGx0by13 cmFwcGVyIHNob3VsZCBiZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2l0aCBM VE8gcGx1Z2luLiAgKi8KKyAgd3JhcHBlcl9uYW1lID0gYmZkX21hbGxvYyAo bGVuZ3RoICsgc2l6ZW9mIChMVE9fV1JBUFBFUl9FWEVDVVRBQkxFKSk7Cisg IGlmICh3cmFwcGVyX25hbWUgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcmVl IChnY2NfbmFtZSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICBt ZW1jcHkgKHdyYXBwZXJfbmFtZSwgcmVhbF9uYW1lLCBsZW5ndGgpOworICBt ZW1jcHkgKHdyYXBwZXJfbmFtZSArIGxlbmd0aCwgTFRPX1dSQVBQRVJfRVhF Q1VUQUJMRSwKKwkgIHNpemVvZiAoTFRPX1dSQVBQRVJfRVhFQ1VUQUJMRSkp OworICBpZiAoc3RhdCAod3JhcHBlcl9uYW1lLCAmc3QpID09IDAgJiYgU19J U1JFRyAoc3Quc3RfbW9kZSkpCisgICAgeworICAgICAgcmVzb2x1dGlvbl9m aWxlID0gbWFrZV90ZW1wX2ZpbGUgKCIucmVzIik7CisgICAgICBpZiAocmVz b2x1dGlvbl9maWxlKQorCXsKKwkgIHBsdWdpbi0+Z2NjID0gZ2NjX25hbWU7 CisJICBwbHVnaW4tPmx0b193cmFwcGVyID0gd3JhcHBlcl9uYW1lOworCSAg cGx1Z2luLT5nY2NfZW52ID0gY29uY2F0ICgiQ09MTEVDVF9HQ0M9IiwgZ2Nj X25hbWUsIE5VTEwpOworCSAgcGx1Z2luLT5yZXNvbHV0aW9uX2ZpbGUgPSBy ZXNvbHV0aW9uX2ZpbGU7CisJICBwbHVnaW4tPnJlc29sdXRpb25fb3B0aW9u ID0gY29uY2F0ICgiLWZyZXNvbHV0aW9uPSIsCisJCQkJCSAgICAgIHJlc29s dXRpb25fZmlsZSwgTlVMTCk7CisJICByZXR1cm4gVFJVRTsKKwl9CisgICAg fQorCisgIGZyZWUgKGdjY19uYW1lKTsKKyAgZnJlZSAod3JhcHBlcl9uYW1l KTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKiBTZXQgZW52aXJvbm1lbnQg dmFyaWFibGVzIGZvciBHQ0MgTFRPIHdyYXBwZXIgdG8gY292ZXJ0IExUTyBJ UgorICAgb2JqZWN0IHRvIHRoZSByZWFsIG9iamVjdC4gICovCisKK3N0YXRp YyBpbnQKK3NldHVwX2x0b193cmFwcGVyX2VudiAoc3RydWN0IHBsdWdpbl9s aXN0X2VudHJ5ICpwbHVnaW4pCit7CisgIHJldHVybiAocHV0ZW52IChwbHVn aW4tPmdjY19lbnYpCisJICB8fCBwdXRlbnYgKCJDT0xMRUNUX0dDQ19PUFRJ T05TPSIpKTsKK30KKworc3RhdGljIHN0cnVjdCBwbHVnaW5fbGlzdF9lbnRy eSAqcGx1Z2luX2xpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBwbHVnaW5f bGlzdF9lbnRyeSAqY3VycmVudF9wbHVnaW4gPSBOVUxMOworCiAvKiBSZWdp c3RlciBhIGNsYWltLWZpbGUgaGFuZGxlci4gKi8KLXN0YXRpYyBsZF9wbHVn aW5fY2xhaW1fZmlsZV9oYW5kbGVyIGNsYWltX2ZpbGUgPSBOVUxMOwogCiBz dGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCiByZWdpc3Rlcl9jbGFpbV9m aWxlIChsZF9wbHVnaW5fY2xhaW1fZmlsZV9oYW5kbGVyIGhhbmRsZXIpCiB7 Ci0gIGNsYWltX2ZpbGUgPSBoYW5kbGVyOworICBjdXJyZW50X3BsdWdpbi0+ Y2xhaW1fZmlsZSA9IGhhbmRsZXI7CisgIHJldHVybiBMRFBTX09LOworfQor CisvKiBSZWdpc3RlciBhbiBhbGwtc3ltYm9scy1yZWFkIGhhbmRsZXIuICAq LworCitzdGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCityZWdpc3Rlcl9h bGxfc3ltYm9sc19yZWFkIChsZF9wbHVnaW5fYWxsX3N5bWJvbHNfcmVhZF9o YW5kbGVyIGhhbmRsZXIpCit7CisgIGN1cnJlbnRfcGx1Z2luLT5hbGxfc3lt Ym9sc19yZWFkID0gaGFuZGxlcjsKKyAgcmV0dXJuIExEUFNfT0s7Cit9CisK Ky8qIFJlZ2lzdGVyIGEgY2xlYW51cCBoYW5kbGVyLiAgKi8KKworc3RhdGlj IGVudW0gbGRfcGx1Z2luX3N0YXR1cworcmVnaXN0ZXJfY2xlYW51cCAobGRf cGx1Z2luX2FsbF9zeW1ib2xzX3JlYWRfaGFuZGxlciBoYW5kbGVyKQorewor ICBjdXJyZW50X3BsdWdpbi0+Y2xlYW51cF9oYW5kbGVyID0gaGFuZGxlcjsK KyAgcmV0dXJuIExEUFNfT0s7Cit9CisKKy8qIEdldCB0aGUgc3ltYm9sIHJl c29sdXRpb24gaW5mbyBmb3IgYSBwbHVnaW4tY2xhaW1lZCBpbnB1dCBmaWxl LiAgKi8KKworc3RhdGljIGVudW0gbGRfcGx1Z2luX3N0YXR1cworZ2V0X3N5 bWJvbHMgKGNvbnN0IHZvaWQgKmhhbmRsZSBBVFRSSUJVVEVfVU5VU0VELCBp bnQgbnN5bXMsCisJICAgICBzdHJ1Y3QgbGRfcGx1Z2luX3N5bWJvbCAqc3lt cykKK3sKKyAgaWYgKHN5bXMpCisgICAgeworICAgICAgaW50IG47CisgICAg ICBmb3IgKG4gPSAwOyBuIDwgbnN5bXM7IG4rKykKKwl7CisJICBzd2l0Y2gg KHN5bXNbbl0uZGVmKQorCSAgICB7CisJICAgIGRlZmF1bHQ6CisJICAgICAg QkZEX0FTU0VSVCAoMCk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgTERQ S19VTkRFRjoKKwkgICAgY2FzZSBMRFBLX1dFQUtVTkRFRjoKKwkgICAgICBz eW1zW25dLnJlc29sdXRpb24gPSBMRFBSX1VOREVGOworCSAgICAgIGJyZWFr OworCSAgICBjYXNlIExEUEtfREVGOgorCSAgICBjYXNlIExEUEtfV0VBS0RF RjoKKwkgICAgY2FzZSBMRFBLX0NPTU1PTjoKKwkgICAgICAvKiBUZWxsIHBs dWdpbiB0aGF0IExUTyBzeW1ib2wgaGFzIHJlZmVyZW5jZXMgZnJvbSByZWd1 bGFyCisJCSBvYmplY3QgY29kZS4gKi8KKwkgICAgICBzeW1zW25dLnJlc29s dXRpb24gID0gTERQUl9QUkVWQUlMSU5HX0RFRjsKKwkgICAgICBicmVhazsK KwkgICAgfQorICAgICAgfQorICAgIH0KKworICByZXR1cm4gTERQU19PSzsK K30KKworLyogQWRkIGEgbmV3IChyZWFsKSBpbnB1dCBmaWxlIGdlbmVyYXRl ZCBieSBhIHBsdWdpbi4gICovCisKK3N0YXRpYyBlbnVtIGxkX3BsdWdpbl9z dGF0dXMKK2FkZF9pbnB1dF9maWxlIChjb25zdCBjaGFyICpwYXRobmFtZSkK K3sKKyAgLyogR2V0IHN5bWJvbHMgZnJvbSB0aGUgcmVhbCBMVE8gb2JqZWN0 LiAgKi8KKyAgY2hhciAqKm1hdGNoaW5nOworICBsb25nIHJlYWxfc3ltc2l6 ZTsKKyAgbG9uZyByZWFsX25zeW1zOworICBhc3ltYm9sICoqcmVhbF9zeW1z OworICBpbnQgbHRvX25zeW1zOworICBiZmRfYm9vbGVhbiBsdG9fc3ltYm9s X2ZvdW5kID0gRkFMU0U7CisgIGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5fc3lt Ym9sICpsdG9fc3ltczsKKyAgYmZkICpyYmZkOworICBpbnQgaSwgajsKKwor ICByYmZkID0gYmZkX29wZW5yIChwYXRobmFtZSwgTlVMTCk7CisgIGlmICgh YmZkX2NoZWNrX2Zvcm1hdF9tYXRjaGVzIChyYmZkLCBiZmRfb2JqZWN0LCAm bWF0Y2hpbmcpKQorICAgIEJGRF9BU1NFUlQgKDApOworCisgIHJlYWxfc3lt c2l6ZSA9IGJmZF9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kIChyYmZkKTsKKyAg aWYgKHJlYWxfc3ltc2l6ZSA8IDApCisgICAgQkZEX0FTU0VSVCAoMCk7CisK KyAgcmVhbF9zeW1zID0gKGFzeW1ib2wgKiopIGJmZF9tYWxsb2MgKHJlYWxf c3ltc2l6ZSk7CisgIGlmIChyZWFsX3N5bXMpCisgICAgeworICAgICAgcmVh bF9uc3ltcyA9IGJmZF9jYW5vbmljYWxpemVfc3ltdGFiIChyYmZkLCByZWFs X3N5bXMpOworICAgICAgaWYgKHJlYWxfbnN5bXMgPCAwKQorCUJGRF9BU1NF UlQgKDApOworCisgICAgICAvKiBOQjogTFRPIHBsdWdpbiBtYXkgZ2VuZXJh dGUgbW9yZSB0aGFuIG9uZSByZWFsIG9iamVjdCBmcm9tIG9uZQorCSBMVE8g SVIgb2JqZWN0LiAgV2UgdXNlIHRoZSBvbmUgd2hpY2ggY29udGFpbnMgTFRP IHN5bWJvbHMuICAqLworICAgICAgbHRvX3N5bXMgPSBjdXJyZW50X3BsdWdp bi0+bHRvX3N5bXM7CisgICAgICBsdG9fbnN5bXMgPSBjdXJyZW50X3BsdWdp bi0+bHRvX25zeW1zOworICAgICAgZm9yIChpID0gMDsgaSA8IGx0b19uc3lt czsgaSsrKQorCWZvciAoaiA9IDA7IGogPCByZWFsX25zeW1zOyBqKyspCisJ ICBpZiAocmVhbF9zeW1zW2pdLT5uYW1lCisJICAgICAgJiYgc3RyY21wIChs dG9fc3ltc1tpXS5uYW1lLCByZWFsX3N5bXNbal0tPm5hbWUpID09IDApCisJ ICAgIHsKKwkgICAgICBsdG9fc3ltYm9sX2ZvdW5kID0gVFJVRTsKKwkgICAg ICBicmVhazsKKwkgICAgfQorICAgIH0KKworICBpZiAobHRvX3N5bWJvbF9m b3VuZCkKKyAgICB7CisgICAgICBjdXJyZW50X3BsdWdpbi0+cmVhbF9uc3lt cyA9IHJlYWxfbnN5bXM7CisgICAgICBjdXJyZW50X3BsdWdpbi0+cmVhbF9z eW1zID0gcmVhbF9zeW1zOworICAgICAgLyogTkI6IFdlIGNhbid0IGNsb3Nl IFJCRkQgd2hpY2ggb3duIHRoZSByZWFsIHN5bWJvbCBpbmZvLiAgKi8KKyAg ICAgIGN1cnJlbnRfcGx1Z2luLT5yZWFsX2JmZCA9IHJiZmQ7CisgICAgfQor ICBlbHNlCisgICAgYmZkX2Nsb3NlIChyYmZkKTsKKwogICByZXR1cm4gTERQ U19PSzsKIH0KIApAQCAtMTQzLDEzICs0MzgsNTAgQEAgYWRkX3N5bWJvbHMg KHZvaWQgKiBoYW5kbGUsCiAgIHN0cnVjdCBwbHVnaW5fZGF0YV9zdHJ1Y3Qg KnBsdWdpbl9kYXRhID0KICAgICBiZmRfYWxsb2MgKGFiZmQsIHNpemVvZiAo cGx1Z2luX2RhdGFfc3RydWN0KSk7CiAKLSAgcGx1Z2luX2RhdGEtPm5zeW1z ID0gbnN5bXM7Ci0gIHBsdWdpbl9kYXRhLT5zeW1zID0gc3ltczsKKyAgaWYg KHBsdWdpbl9kYXRhKQorICAgIHsKKyAgICAgIHN0cnVjdCBsZF9wbHVnaW5f c3ltYm9sICpzeW1faW5mbzsKKyAgICAgIGNoYXIgKnN0cnRhYjsKKyAgICAg IHNpemVfdCBzeW1faW5mb19zaXplLCBuYW1lX2xlbmd0aDsKKyAgICAgIGlu dCBpOworCisgICAgICBhYmZkLT50ZGF0YS5wbHVnaW5fZGF0YSA9IHBsdWdp bl9kYXRhOworCisgICAgICAvKiBOQjogTFRPIHN5bWJvbHMgYXJlIG93bmVk IGJ5IExUTyBwbHVnaW4uICBDcmVhdGUgYSBjb3B5IHNvCisJIHRoYXQgd2Ug Y2FuIHVzZSBpdCBpbiBiZmRfcGx1Z2luX2Nhbm9uaWNhbGl6ZV9zeW10YWIu ICAqLworICAgICAgc3ltX2luZm9fc2l6ZSA9IG5zeW1zICogc2l6ZW9mICgq c3ltcyk7CisKKyAgICAgIC8qIEFsbG9jYXRlIGEgc3RyaW5nIHRhYmxlICAq LworICAgICAgZm9yIChpID0gMDsgaSA8IG5zeW1zOyBpKyspCisJc3ltX2lu Zm9fc2l6ZSArPSBzdHJsZW4gKHN5bXNbaV0ubmFtZSkgKyAxOworCisgICAg ICBzeW1faW5mbyA9IGJmZF9hbGxvYyAoYWJmZCwgc3ltX2luZm9fc2l6ZSk7 CisgICAgICBpZiAoc3ltX2luZm8pCisJeworCSAgLyogQ29weSBzeW1ib2wg dGFibGUuICAqLworCSAgbWVtY3B5IChzeW1faW5mbywgc3ltcywgbnN5bXMg KiBzaXplb2YgKCpzeW1zKSk7CisKKwkgIC8qIENvcHkgc3ltYm9sIG5hbWVz IGluIHN5bWJvbCB0YWJsZS4gICovCisJICBzdHJ0YWIgPSAoY2hhciAqKSAo c3ltX2luZm8gKyBuc3ltcyk7CisJICBmb3IgKGkgPSAwOyBpIDwgbnN5bXM7 IGkrKykKKwkgICAgeworCSAgICAgIG5hbWVfbGVuZ3RoID0gc3RybGVuIChz eW1zW2ldLm5hbWUpOworCSAgICAgIG1lbWNweSAoc3RydGFiLCBzeW1zW2ld Lm5hbWUsIG5hbWVfbGVuZ3RoICsgMSk7CisJICAgICAgc3ltX2luZm9baV0u bmFtZSA9IHN0cnRhYjsKKwkgICAgICBzdHJ0YWIgKz0gbmFtZV9sZW5ndGgg KyAxOworCSAgICB9CisKKwkgIHBsdWdpbl9kYXRhLT5uc3ltcyA9IG5zeW1z OworCSAgcGx1Z2luX2RhdGEtPnN5bXMgPSBzeW1faW5mbzsKKworCSAgY3Vy cmVudF9wbHVnaW4tPmx0b19uc3ltcyA9IG5zeW1zOworCSAgY3VycmVudF9w bHVnaW4tPmx0b19zeW1zID0gc3ltX2luZm87CisJfQorICAgIH0KIAogICBp ZiAobnN5bXMgIT0gMCkKICAgICBhYmZkLT5mbGFncyB8PSBIQVNfU1lNUzsK IAotICBhYmZkLT50ZGF0YS5wbHVnaW5fZGF0YSA9IHBsdWdpbl9kYXRhOwog ICByZXR1cm4gTERQU19PSzsKIH0KIApAQCAtMjE0LDI2ICs1NDYsNDggQEAg dHJ5X2NsYWltIChiZmQgKmFiZmQpCiAgIGZpbGUuaGFuZGxlID0gYWJmZDsK ICAgaWYgKCFiZmRfcGx1Z2luX29wZW5faW5wdXQgKGFiZmQsICZmaWxlKSkK ICAgICByZXR1cm4gMDsKLSAgaWYgKGNsYWltX2ZpbGUpCi0gICAgY2xhaW1f ZmlsZSAoJmZpbGUsICZjbGFpbWVkKTsKKyAgaWYgKGN1cnJlbnRfcGx1Z2lu LT5jbGFpbV9maWxlKQorICAgIHsKKyAgICAgIGN1cnJlbnRfcGx1Z2luLT5j bGFpbV9maWxlICgmZmlsZSwgJmNsYWltZWQpOworICAgICAgaWYgKGNsYWlt ZWQpCisJeworCSAgaWYgKGN1cnJlbnRfcGx1Z2luLT5hbGxfc3ltYm9sc19y ZWFkKQorCSAgICB7CisJICAgICAgc3RydWN0IHBsdWdpbl9kYXRhX3N0cnVj dCAqcGx1Z2luX2RhdGEKKwkJPSBhYmZkLT50ZGF0YS5wbHVnaW5fZGF0YTsK KwkgICAgICBpZiAocGx1Z2luX2RhdGEpCisJCXsKKwkJICAvKiBHZXQgcmVh bCBzeW1ib2xzIGZyb20gTFRPIHdyYXBwZXIuICAqLworCQkgIGN1cnJlbnRf cGx1Z2luLT5hbGxfc3ltYm9sc19yZWFkICgpOworCisJCSAgLyogQ29weSBy ZWFsIHN5bWJvbHMgdG8gcGx1Z2luX2RhdGEuICAqLworCQkgIHBsdWdpbl9k YXRhLT5yZWFsX2JmZCA9IGN1cnJlbnRfcGx1Z2luLT5yZWFsX2JmZDsKKwkJ ICBwbHVnaW5fZGF0YS0+cmVhbF9uc3ltcyA9IGN1cnJlbnRfcGx1Z2luLT5y ZWFsX25zeW1zOworCQkgIHBsdWdpbl9kYXRhLT5yZWFsX3N5bXMgPSBjdXJy ZW50X3BsdWdpbi0+cmVhbF9zeW1zOworCisJCSAgLyogQ2xlYW4gdXAgTFRP IHBsdWdpbi4gICovCisJCSAgaWYgKGN1cnJlbnRfcGx1Z2luLT5jbGVhbnVw X2hhbmRsZXIpCisJCSAgICBjdXJyZW50X3BsdWdpbi0+Y2xlYW51cF9oYW5k bGVyICgpOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChjdXJyZW50 X3BsdWdpbi0+bHRvX3dyYXBwZXIpCisJeworCSAgLyogQ2xlYW4gdXAgZm9y IExUTyB3cmFwcGVyLiAgKi8KKwkgIHVubGluayAoY3VycmVudF9wbHVnaW4t PnJlc29sdXRpb25fZmlsZSk7CisJICBmcmVlIChjdXJyZW50X3BsdWdpbi0+ cmVzb2x1dGlvbl9vcHRpb24pOworCX0KKyAgICB9CiAgIGNsb3NlIChmaWxl LmZkKTsKICAgcmV0dXJuIGNsYWltZWQ7CiB9CiAKLXN0cnVjdCBwbHVnaW5f bGlzdF9lbnRyeQotewotICB2b2lkICogICAgICAgICAgICAgICAgICAgICAg ICBoYW5kbGU7Ci0gIGxkX3BsdWdpbl9jbGFpbV9maWxlX2hhbmRsZXIgIGNs YWltX2ZpbGU7Ci0gIHN0cnVjdCBwbHVnaW5fbGlzdF9lbnRyeSAqICAgIG5l eHQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5ICog cGx1Z2luX2xpc3QgPSBOVUxMOwotCiBzdGF0aWMgaW50CiB0cnlfbG9hZF9w bHVnaW4gKGNvbnN0IGNoYXIgKnBuYW1lLCBiZmQgKmFiZmQsIGludCAqaGFz X3BsdWdpbl9wKQogewogICB2b2lkICpwbHVnaW5faGFuZGxlID0gTlVMTDsK LSAgc3RydWN0IGxkX3BsdWdpbl90diB0dls0XTsKKyAgc3RydWN0IGxkX3Bs dWdpbl90diB0dlsxMl07CiAgIGludCBpOwogICBsZF9wbHVnaW5fb25sb2Fk IG9ubG9hZDsKICAgZW51bSBsZF9wbHVnaW5fc3RhdHVzIHN0YXR1czsKQEAg LTI0MSw2ICs1OTUsMTggQEAgdHJ5X2xvYWRfcGx1Z2luIChjb25zdCBjaGFy ICpwbmFtZSwgYmZkICphYmZkLCBpbnQgKmhhc19wbHVnaW5fcCkKIAogICAq aGFzX3BsdWdpbl9wID0gMDsKIAorICAvKiBOQjogRWFjaCBvYmplY3QgaXMg aW5kZGVwZW5kZW50LiAgUmV1c2UgdGhlIHByZXZpb3VzIHBsdWdpbiBmcm9t CisgICAgIHRoZSBsYXN0IExUTyB3cmFwcGVyIHJ1biB3aWxsIGxlYWQgdG8g d3JvbmcgTFRPIGRhdGEuICAqLworICBpZiAoY3VycmVudF9wbHVnaW4KKyAg ICAgICYmIGN1cnJlbnRfcGx1Z2luLT5oYW5kbGUKKyAgICAgICYmIGN1cnJl bnRfcGx1Z2luLT5sdG9fd3JhcHBlcgorICAgICAgJiYgc3RyY21wIChjdXJy ZW50X3BsdWdpbi0+cGx1Z2luX25hbWUsIHBuYW1lKSA9PSAwKQorICAgIHsK KyAgICAgIGRsY2xvc2UgKGN1cnJlbnRfcGx1Z2luLT5oYW5kbGUpOworICAg ICAgbWVtc2V0IChjdXJyZW50X3BsdWdpbiwgMCwKKwkgICAgICBvZmZzZXRv ZiAoc3RydWN0IHBsdWdpbl9saXN0X2VudHJ5LCBuZXh0KSk7CisgICAgfQor CiAgIHBsdWdpbl9oYW5kbGUgPSBkbG9wZW4gKHBuYW1lLCBSVExEX05PVyk7 CiAgIGlmICghcGx1Z2luX2hhbmRsZSkKICAgICB7CkBAIC0yNTksMTggKzYy NSwyNSBAQCB0cnlfbG9hZF9wbHVnaW4gKGNvbnN0IGNoYXIgKnBuYW1lLCBi ZmQgKmFiZmQsIGludCAqaGFzX3BsdWdpbl9wKQogCSAgICByZXR1cm4gMDsK IAogCSAgcmVnaXN0ZXJfY2xhaW1fZmlsZSAocGx1Z2luX2xpc3RfaXRlci0+ Y2xhaW1fZmlsZSk7CisJICBjdXJyZW50X3BsdWdpbiA9IHBsdWdpbl9saXN0 X2l0ZXI7CiAJICBnb3RvIGhhdmVfY2xhaW1fZmlsZTsKIAl9CisgICAgICBl bHNlIGlmIChwbHVnaW5fbGlzdF9pdGVyLT5sdG9fd3JhcHBlcgorCSAgICAg ICAmJiBzdHJjbXAgKHBsdWdpbl9saXN0X2l0ZXItPnBsdWdpbl9uYW1lLCBw bmFtZSkgPT0gMCkKKwlnb3RvIGhhdmVfbHRvX3dyYXBwZXI7CiAgICAgfQog CiAgIHBsdWdpbl9saXN0X2l0ZXIgPSBiZmRfbWFsbG9jIChzaXplb2YgKnBs dWdpbl9saXN0X2l0ZXIpOwogICBpZiAocGx1Z2luX2xpc3RfaXRlciA9PSBO VUxMKQogICAgIHJldHVybiAwOwotICBwbHVnaW5fbGlzdF9pdGVyLT5oYW5k bGUgPSBwbHVnaW5faGFuZGxlOwotICBwbHVnaW5fbGlzdF9pdGVyLT5jbGFp bV9maWxlID0gTlVMTDsKKyAgbWVtc2V0IChwbHVnaW5fbGlzdF9pdGVyLCAw LCBzaXplb2YgKCpwbHVnaW5fbGlzdF9pdGVyKSk7CisgIHBsdWdpbl9saXN0 X2l0ZXItPnBsdWdpbl9uYW1lID0gcG5hbWU7CiAgIHBsdWdpbl9saXN0X2l0 ZXItPm5leHQgPSBwbHVnaW5fbGlzdDsKICAgcGx1Z2luX2xpc3QgPSBwbHVn aW5fbGlzdF9pdGVyOwogCitoYXZlX2x0b193cmFwcGVyOgorICBwbHVnaW5f bGlzdF9pdGVyLT5oYW5kbGUgPSBwbHVnaW5faGFuZGxlOworCiAgIG9ubG9h ZCA9IGRsc3ltIChwbHVnaW5faGFuZGxlLCAib25sb2FkIik7CiAgIGlmICgh b25sb2FkKQogICAgIHJldHVybiAwOwpAQCAtMjg3LDIzICs2NjAsNjMgQEAg dHJ5X2xvYWRfcGx1Z2luIChjb25zdCBjaGFyICpwbmFtZSwgYmZkICphYmZk LCBpbnQgKmhhc19wbHVnaW5fcCkKICAgdHZbaV0udHZfdGFnID0gTERQVF9B RERfU1lNQk9MUzsKICAgdHZbaV0udHZfdS50dl9hZGRfc3ltYm9scyA9IGFk ZF9zeW1ib2xzOwogCisgIGlmIChnZXRfbHRvX3dyYXBwZXIgKHBsdWdpbl9s aXN0X2l0ZXIpKQorICAgIHsKKyAgICAgICsraTsKKyAgICAgIHR2W2ldLnR2 X3RhZyA9IExEUFRfUkVHSVNURVJfQUxMX1NZTUJPTFNfUkVBRF9IT09LOwor ICAgICAgdHZbaV0udHZfdS50dl9yZWdpc3Rlcl9hbGxfc3ltYm9sc19yZWFk ID0gcmVnaXN0ZXJfYWxsX3N5bWJvbHNfcmVhZDsKKworICAgICAgKytpOwor ICAgICAgdHZbaV0udHZfdGFnID0gTERQVF9SRUdJU1RFUl9DTEVBTlVQX0hP T0s7CisgICAgICB0dltpXS50dl91LnR2X3JlZ2lzdGVyX2NsZWFudXAgPSBy ZWdpc3Rlcl9jbGVhbnVwOworCisgICAgICArK2k7CisgICAgICB0dltpXS50 dl90YWcgPSBMRFBUX0dFVF9TWU1CT0xTOworICAgICAgdHZbaV0udHZfdS50 dl9nZXRfc3ltYm9scyA9IGdldF9zeW1ib2xzOworCisgICAgICArK2k7Cisg ICAgICB0dltpXS50dl90YWcgPSBMRFBUX0dFVF9TWU1CT0xTX1YyOworICAg ICAgdHZbaV0udHZfdS50dl9nZXRfc3ltYm9scyA9IGdldF9zeW1ib2xzOwor CisgICAgICArK2k7CisgICAgICB0dltpXS50dl90YWcgPSBMRFBUX09QVElP TjsKKyAgICAgIHR2W2ldLnR2X3UudHZfc3RyaW5nID0gcGx1Z2luX2xpc3Rf aXRlci0+bHRvX3dyYXBwZXI7CisKKyAgICAgICsraTsKKyAgICAgIHR2W2ld LnR2X3RhZyA9IExEUFRfT1BUSU9OOworICAgICAgdHZbaV0udHZfdS50dl9z dHJpbmcgPSBwbHVnaW5fbGlzdF9pdGVyLT5yZXNvbHV0aW9uX29wdGlvbjsK KworICAgICAgKytpOworICAgICAgdHZbaV0udHZfdGFnID0gTERQVF9MSU5L RVJfT1VUUFVUOworICAgICAgdHZbaV0udHZfdS50dl92YWwgPSBMRFBPX0VY RUM7CisKKyAgICAgICsraTsKKyAgICAgIHR2W2ldLnR2X3RhZyA9IExEUFRf QUREX0lOUFVUX0ZJTEU7CisgICAgICB0dltpXS50dl91LnR2X2FkZF9pbnB1 dF9maWxlID0gYWRkX2lucHV0X2ZpbGU7CisgICAgfQorCiAgICsraTsKICAg dHZbaV0udHZfdGFnID0gTERQVF9OVUxMOwogICB0dltpXS50dl91LnR2X3Zh bCA9IDA7CiAKKyAgY3VycmVudF9wbHVnaW4gPSBwbHVnaW5fbGlzdF9pdGVy OworCisgIC8qIExUTyBwbHVnaW4gd2lsbCBjYWxsIGhhbmRsZXIgaG9va3Mg dG8gc2V0IHVwIHBsdWdpbiBoYW5kbGVycy4gICovCiAgIHN0YXR1cyA9ICgq b25sb2FkKSh0dik7CiAKICAgaWYgKHN0YXR1cyAhPSBMRFBTX09LKQogICAg IHJldHVybiAwOwogCi0gIHBsdWdpbl9saXN0X2l0ZXItPmNsYWltX2ZpbGUg PSBjbGFpbV9maWxlOworICBpZiAoY3VycmVudF9wbHVnaW4tPmx0b193cmFw cGVyCisgICAgICAmJiBzZXR1cF9sdG9fd3JhcHBlcl9lbnYgKGN1cnJlbnRf cGx1Z2luKSkKKyAgICByZXR1cm4gMDsKIAogaGF2ZV9jbGFpbV9maWxlOgog ICAqaGFzX3BsdWdpbl9wID0gMTsKIAogICBhYmZkLT5wbHVnaW5fZm9ybWF0 ID0gYmZkX3BsdWdpbl9ubzsKIAotICBpZiAoIWNsYWltX2ZpbGUpCisgIGlm ICghY3VycmVudF9wbHVnaW4tPmNsYWltX2ZpbGUpCiAgICAgcmV0dXJuIDA7 CiAKICAgaWYgKCF0cnlfY2xhaW0gKGFiZmQpKQpAQCAtNTYyLDcgKzk3NSwx NSBAQCBiZmRfcGx1Z2luX2Nhbm9uaWNhbGl6ZV9zeW10YWIgKGJmZCAqYWJm ZCwKIAkJCVNFQ19BTExPQyB8IFNFQ19MT0FEIHwgU0VDX0NPREUgfCBTRUNf SEFTX0NPTlRFTlRTKTsKICAgc3RhdGljIGFzZWN0aW9uIGZha2VfY29tbW9u X3NlY3Rpb24KICAgICA9IEJGRF9GQUtFX1NFQ1RJT04gKGZha2VfY29tbW9u X3NlY3Rpb24sIE5VTEwsICJwbHVnIiwgMCwgU0VDX0lTX0NPTU1PTik7Ci0g IGludCBpOworICBpbnQgaSwgajsKKyAgbG9uZyByZWFsX25zeW1zOworICBh c3ltYm9sICoqcmVhbF9zeW1zOworCisgIHJlYWxfc3ltcyA9IHBsdWdpbl9k YXRhLT5yZWFsX3N5bXM7CisgIGlmIChyZWFsX3N5bXMpCisgICAgcmVhbF9u c3ltcyA9IHBsdWdpbl9kYXRhLT5yZWFsX25zeW1zOworICBlbHNlCisgICAg cmVhbF9uc3ltcyA9IDA7CiAKICAgZm9yIChpID0gMDsgaSA8IG5zeW1zOyBp KyspCiAgICAgewpAQCAtNTg3LDYgKzEwMDgsMTUgQEAgYmZkX3BsdWdpbl9j YW5vbmljYWxpemVfc3ltdGFiIChiZmQgKmFiZmQsCiAJY2FzZSBMRFBLX0RF RjoKIAljYXNlIExEUEtfV0VBS0RFRjoKIAkgIHMtPnNlY3Rpb24gPSAmZmFr ZV9zZWN0aW9uOworCSAgaWYgKHJlYWxfbnN5bXMpCisJICAgIC8qIFVzZSBy ZWFsIExUTyBzeW1ib2xzIGlmIHBvc3NpYmxlLiAgKi8KKwkgICAgZm9yIChq ID0gMDsgaiA8IHJlYWxfbnN5bXM7IGorKykKKwkgICAgICBpZiAocmVhbF9z eW1zW2pdLT5uYW1lCisJCSAgJiYgc3RyY21wIChzeW1zW2ldLm5hbWUsIHJl YWxfc3ltc1tqXS0+bmFtZSkgPT0gMCkKKwkJeworCQkgIHMtPnNlY3Rpb24g PSByZWFsX3N5bXNbal0tPnNlY3Rpb247CisJCSAgYnJlYWs7CisJCX0KIAkg IGJyZWFrOwogCWRlZmF1bHQ6CiAJICBCRkRfQVNTRVJUICgwKTsKQEAgLTYz NSw2ICsxMDY1LDI0IEBAIGJmZF9wbHVnaW5fc2l6ZW9mX2hlYWRlcnMgKGJm ZCAqYSBBVFRSSUJVVEVfVU5VU0VELAogICByZXR1cm4gMDsKIH0KIAorc3Rh dGljIGJmZF9ib29sZWFuCitiZmRfcGx1Z2luX2Nsb3NlX2FuZF9jbGVhbnVw IChiZmQgKmFiZmQpCit7CisgIHN0cnVjdCBwbHVnaW5fZGF0YV9zdHJ1Y3Qg KnBsdWdpbl9kYXRhOworCisgIGlmIChhYmZkLT5mb3JtYXQgIT0gYmZkX2Fy Y2hpdmUKKyAgICAgICYmIChwbHVnaW5fZGF0YSA9IGFiZmQtPnRkYXRhLnBs dWdpbl9kYXRhKSkKKyAgICB7CisgICAgICBpZiAocGx1Z2luX2RhdGEtPnJl YWxfYmZkKQorCWJmZF9jbG9zZSAocGx1Z2luX2RhdGEtPnJlYWxfYmZkKTsK KworICAgICAgaWYgKHBsdWdpbl9kYXRhLT5yZWFsX3N5bXMpCisJZnJlZSAo cGx1Z2luX2RhdGEtPnJlYWxfc3ltcyk7CisgICAgfQorCisgIHJldHVybiBf YmZkX2dlbmVyaWNfY2xvc2VfYW5kX2NsZWFudXAgKGFiZmQpOworfQorCiBj b25zdCBiZmRfdGFyZ2V0IHBsdWdpbl92ZWMgPQogewogICAicGx1Z2luIiwJ CQkvKiBOYW1lLiAgKi8KZGlmZiAtLWdpdCBhL2JmZC9wbHVnaW4uaCBiL2Jm ZC9wbHVnaW4uaAppbmRleCAwOThiZjA4NDU1NC4uMDVjMzU3MzkzM2QgMTAw NjQ0Ci0tLSBhL2JmZC9wbHVnaW4uaAorKysgYi9iZmQvcGx1Z2luLmgKQEAg LTMzLDYgKzMzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcGx1Z2luX2RhdGFfc3Ry dWN0CiB7CiAgIGludCBuc3ltczsKICAgY29uc3Qgc3RydWN0IGxkX3BsdWdp bl9zeW1ib2wgKnN5bXM7CisgIGJmZCAqcmVhbF9iZmQ7CisgIGxvbmcgcmVh bF9uc3ltczsKKyAgYXN5bWJvbCAqKnJlYWxfc3ltczsKIH0KIHBsdWdpbl9k YXRhX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLXBs dWdpbi9sdG8uZXhwIGIvbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9sdG8uZXhw CmluZGV4IDliMDNiN2IzOTc3Li4xYjQ0YjBkYTNmZCAxMDA2NDQKLS0tIGEv bGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9sdG8uZXhwCisrKyBiL2xkL3Rlc3Rz dWl0ZS9sZC1wbHVnaW4vbHRvLmV4cApAQCAtMjM0LDYgKzIzNCwxMSBAQCBz ZXQgbHRvX2xpbmtfdGVzdHMgW2xpc3QgXAogICBbbGlzdCAiQnVpbGQgcHIy NDQwNi0yYi5vIiBcCiAgICAiIiAiLU8yIC1mbm8tbHRvIiBcCiAgICB7cHIy NDQwNi0yYi5jfV0gXAorICBbbGlzdCAicHIyNTM1NS5vIiBcCisgICAiIiBc CisgICAiLWZsdG8gLWZuby1jb21tb24gJGx0b19ub19mYXQiIFwKKyAgIHtw cjI1MzU1LmN9IFwKKyAgIFtsaXN0IFtsaXN0ICJubSIgIiRwbHVnX29wdCIg InByMjUzNTUuZCJdXV0gXAogXQogCiBpZiB7IFthdF9sZWFzdF9nY2NfdmVy c2lvbiA0IDddIH0gewpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLXBs dWdpbi9wcjI1MzU1LmMgYi9sZC90ZXN0c3VpdGUvbGQtcGx1Z2luL3ByMjUz NTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u OTlmMDFmYjVjODkKLS0tIC9kZXYvbnVsbAorKysgYi9sZC90ZXN0c3VpdGUv bGQtcGx1Z2luL3ByMjUzNTUuYwpAQCAtMCwwICsxLDIgQEAKK2ludCBubV90 ZXN0X3ZhcjsKK2ludCBubV90ZXN0X3ZhcjIgPSAxMjM0OwpkaWZmIC0tZ2l0 IGEvbGQvdGVzdHN1aXRlL2xkLXBsdWdpbi9wcjI1MzU1LmQgYi9sZC90ZXN0 c3VpdGUvbGQtcGx1Z2luL3ByMjUzNTUuZApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uOThkMTBhYmExY2YKLS0tIC9kZXYvbnVs bAorKysgYi9sZC90ZXN0c3VpdGUvbGQtcGx1Z2luL3ByMjUzNTUuZApAQCAt MCwwICsxLDQgQEAKKyMuLi4KK1swLTlhLWZdKyBCIF8/bm1fdGVzdF92YXIK K1swLTlhLWZdKyBEIF8/bm1fdGVzdF92YXIyCisjcGFzcwpkaWZmIC0tZ2l0 IGEvbGQvdGVzdHN1aXRlL2xpYi9sZC1saWIuZXhwIGIvbGQvdGVzdHN1aXRl L2xpYi9sZC1saWIuZXhwCmluZGV4IDA4ZTJkNjk3OGFmLi4wMTVlZGE2ZWI5 NyAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xpYi9sZC1saWIuZXhwCisr KyBiL2xkL3Rlc3RzdWl0ZS9saWIvbGQtbGliLmV4cApAQCAtOTI4LDYgKzky OCw3IEBAIHByb2MgcnVuX2NjX2xpbmtfdGVzdHMgeyBsZHRlc3RzIH0gewog CiAJaWYgeyAkYmluZmlsZSBlcSAidG1wZGlyLyIgfSB7CiAJICAgICMgY29t cGlsZSBvbmx5CisJICAgIHNldCBiaW5maWxlICRvYmpmaWxlCiAJfSBlbHNl aWYgeyBbcmVnZXhwICIuKlxcLmEkIiAkYmluZmlsZV0gfSB7CiAJICAgIGlm IHsgIVthcl9zaW1wbGVfY3JlYXRlICRhciAkbGRmbGFncyAkYmluZmlsZSAi JG9iamZpbGVzIl0gfSB7CiAJCXNldCBmYWlsZWQgMQotLSAKMi4yNC4xCgo= --000000000000598835059e42b2a9--