From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44890 invoked by alias); 11 Aug 2019 23:38:01 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 44863 invoked by uid 89); 11 Aug 2019 23:38:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.100.3 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-19.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS,T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.1 spammy=audited, reporting, leaves, took X-Spam-Status: No, score=-19.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS,T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on sourceware.org X-Spam-Level: X-HELO: gnu.wildebeest.org Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (212.238.236.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 11 Aug 2019 23:37:58 +0000 Received: from tarox.wildebeest.org (tarox.wildebeest.org [172.31.17.39]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 7E31B30A807F; Mon, 12 Aug 2019 01:37:54 +0200 (CEST) Received: by tarox.wildebeest.org (Postfix, from userid 1000) id 31CAB48C980A; Mon, 12 Aug 2019 01:37:54 +0200 (CEST) Message-ID: Subject: Re: [PATCH] elfclassify tool From: Mark Wielaard To: Florian Weimer Cc: elfutils-devel@sourceware.org, Panu Matilainen Date: Sun, 11 Aug 2019 23:38:00 -0000 In-Reply-To: <20190729142419.GB2881@wildebeest.org> References: <87k1fz8c9q.fsf@oldenburg2.str.redhat.com> <2e6a27c552ae5e365db54ca6b432c77c9ad5b041.camel@klomp.org> <871s22yybt.fsf@oldenburg2.str.redhat.com> <8736mfzhob.fsf@oldenburg2.str.redhat.com> <87k1cadpym.fsf@oldenburg2.str.redhat.com> <20190726221124.GA39429@wildebeest.org> <87ef296xir.fsf@oldenburg2.str.redhat.com> <20190729142419.GB2881@wildebeest.org> Content-Type: multipart/mixed; boundary="=-toE0+m6zySy2incb7ZmC" X-Mailer: Evolution 3.28.5 (3.28.5-5.el7) Mime-Version: 1.0 X-Spam-Flag: NO X-IsSubscribed: yes X-SW-Source: 2019-q3/txt/msg00103.txt.bz2 --=-toE0+m6zySy2incb7ZmC Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 3347 On Mon, 2019-07-29 at 16:24 +0200, Mark Wielaard wrote: > On Mon, Jul 29, 2019 at 10:43:56AM +0200, Florian Weimer wrote: > > * Mark Wielaard: > >=20 > > > + if (elf =3D=3D NULL) > > > + { > > > + /* This likely means it just isn't an ELF file, probably not a > > > + real issue, but warn if verbose reporting. */ > > > + if (verbose > 0) > > > + fprintf (stderr, "warning: %s: %s\n", current_path, elf_errmsg (-1)= ); > > > + return false; > > > + } > >=20 > > Is it possible to distinguish the error from a memory allocation error? > > It would be wrong to mis-classify a file just because the system is low > > on memory. >=20 > You are right this is not the proper way to report the issue. > Normally, when just using elf_begin, a NULL return should be reported > through elf_issue (which will set the issues flag). >=20 > But, because I added -z, we are using either elf_begin or > dwelf_elf_begin. dwelf_elf_begin will return NULL (instead of a an > empty (ELF_K_NONE) Elf descriptor when there is an issue, or the > (decompressed) file wasn't an ELF file. >=20 > So we should split the error reporting. If we called elf_begin and get > NULL we should call elf_issue to report the proper issue. >=20 > If we called dwefl_elf_begin and we get NULL, I am not sure yet what > the proper way is to detect whether it is a real issue, or "just" not > a (decompressed) ELF file. I am afraid the current handling is the > best we can do. >=20 > Maybe we can fix dwelf_elf_begin to return an empty (ELF_K_NONE) Elf > descriptor if there was no issue, but the (decompressed) file wasn't > an ELF file. Sorry this took so long. And this is indeed the last issue holding up the release. But this is a tricky problem. We made a mistake when we wrote the contract for dwelf_elf_begin by saying it would never return ELF_K_NONE. That made it different from elf_begin and made it impossible to distinguish between a real (file or decompression) error and whether the file simply wasn't an ELF file and also wasn't a compressed ELF file. I think we should fix the contract. Technically it would be an API break, but I think no user is really relying on the fact that the Elf handle returned is never ELF_K_NONE. Users still need to distinguish between ELF_K_ELF and ELF_K_AR (and theoretically any other ELF_K_type, like COFF, which we currently don't support, but we do define it). So that is what the attached patch does. I also audited all decompression code to make sure it returns error codes consistently. The decompression will either decompress successfully and return DWFL_E_NOERROR, or if the file wasn't compressed (or an embedded image) it will return DWFL_E_BADELF. In all other cases (file or decompression error) it will set a a different DWFL_E error. This "only" leaves the problem that we don't have a good way to translate those errors into "real" libelf error codes. So for now we just fake one if it wasn't an elf_errno value. I don't intent to try to solve this error translation issue before the release (I don't know how to do it yet). What do you think about this change to dwelf_elf_begin? The change would make it possible to detect real errors in the elfclassify code, whether elf_begin or dwelf_elf_begin was used. So we would not misclassify files (but return an error status of 2). Thanks, Mark --=-toE0+m6zySy2incb7ZmC Content-Disposition: inline; filename*0=0001-libdwelf-Make-dwelf_elf_begin-return-NULL-only-when-.pat; filename*1=ch Content-Type: text/x-patch; name="0001-libdwelf-Make-dwelf_elf_begin-return-NULL-only-when-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 Content-length: 10570 RnJvbSA2NDg4MzdhOWYxYmU3NjI4ZTljZWVlNjgxOGJmNTZjODBiOWQzZmEx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJrIFdpZWxhYXJk IDxtYXJrQGtsb21wLm9yZz4KRGF0ZTogTW9uLCAxMiBBdWcgMjAxOSAwMDo0 MzoyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmR3ZWxmOiBNYWtlIGR3 ZWxmX2VsZl9iZWdpbiByZXR1cm4gTlVMTCBvbmx5IHdoZW4gdGhlcmUgaXMK IGFuIGVycm9yLgoKZHdlbGZfZWxmX2JlZ2luIHdhcyBzbGlnaHRseSBkaWZm ZXJlbnQgZnJvbSBlbGZfYmVnaW4gaW4gY2FzZSB0aGUgZmlsZQp0dXJuZWQg b3V0IHRvIG5vdCBiZSBhbiBFTEYgZmlsZS4gZWxmX2JlZ2luIHdvdWxkIHJl dHVybiBhbiBFbGYgaGFuZGxlCndpdGggRUxGX0tfTk9ORS4gQnV0IGR3ZWxm X2VsZl9iZWdpbiB3b3VsZCByZXR1cm4gTlVMTC4gVGhpcyBtYWRlIGl0Cmlt cG9zc2libGUgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgZmls ZSBvciBkZWNvbXByZXNzaW9uIGVycm9yCmFuZCBhIChkZWNvbXByZXNzZWQp IGZpbGUgbm90IGJlaW5nIGFuIEVMRiBmaWxlLgoKU2luY2UgZHdlbGZfZWxm X2JlZ2luIGNvdWxkIHN0aWxsIHJldHVybiBkaWZmZXJlbnQga2luZHMgb2Yg RUxGIGZpbGVzCihFTEZfS19FTEYgb3IgRUxGX0tfQVIgLSBhbmQgdGhlb3Jl dGljYWxseSBFTEZfS19DT0ZGKSB0aGlzIHdhcyBub3QKcmVhbGx5IHVzZWZ1 bCBhbnl3YXkuIFNvIG1ha2UgaXQgc28gdGhhdCBkd2VsZl9lbGZfYmVnaW4g YWx3YXlzIHJldHVybnMKYW4gRWxmIGhhbmRsZSB1bmxlc3MgdGhlcmUgd2Fz IGEgcmVhbCBlcnJvciByZWFkaW5nIG9yIGRlY29tcHJlc3NpbmcKdGhlIGZp bGUuIE90aGVyd2lzZSByZXR1cm4gTlVMTCB0byBtYWtlIGNsZWFyIHRoZXJl IHdhcyBhIHJlYWwgZXJyb3IuCgpNYWtlIHN1cmUgdGhhdCB0aGUgZGVjb21w cmVzc2lvbiBmdW5jdGlvbiByZXR1cm5zIERXRkxfRV9CQURFTEYgb25seQp3 aGVuIHRoZSBmaWxlIGlzbid0IGNvbXByZXNzZWQuIEluIHdoaWNoIGNhc2Ug dGhlIEVsZiBoYW5kbGUgd29uJ3QKYmUgcmVwbGFjZWQgYW5kIGNhbiBiZSBy ZXR1cm5lZCAoYXMgRUxGX0tfTk9ORSkuCgpBZGQgYSBuZXcgdmVyc2lvbiB0 byBkd2VsZl9lbGZfYmVnaW4gc28gcHJvZ3JhbXMgY2FuIHJlbHkgb24gaXQK cmV0dXJuaW5nIE5VTEwgb25seSBmb3IgcmVhbCBlcnJvcnMuCgpTaWduZWQt b2ZmLWJ5OiBNYXJrIFdpZWxhYXJkIDxtYXJrQGtsb21wLm9yZz4KLS0tCiBs aWJkdy9DaGFuZ2VMb2cgICAgICAgICAgICB8ICA0ICsrKysKIGxpYmR3L2xp YmR3Lm1hcCAgICAgICAgICAgIHwgIDQgKysrKwogbGliZHdlbGYvQ2hhbmdl TG9nICAgICAgICAgfCAgNiArKysrKysKIGxpYmR3ZWxmL2R3ZWxmX2VsZl9i ZWdpbi5jIHwgMTIgKysrKysrKy0tLS0tCiBsaWJkd2VsZi9saWJkd2VsZi5o ICAgICAgICB8ICA5ICsrKysrKy0tLQogbGliZHdmbC9DaGFuZ2VMb2cgICAg ICAgICAgfCAgOCArKysrKysrKwogbGliZHdmbC9nemlwLmMgICAgICAgICAg ICAgfCAgNSArKystLQogbGliZHdmbC9vcGVuLmMgICAgICAgICAgICAgfCAx MCArKysrKysrLS0tCiA4IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMo KyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYmR3L0NoYW5n ZUxvZyBiL2xpYmR3L0NoYW5nZUxvZwppbmRleCA2Yjc3OWU3Ny4uYmYxZjQ4 NTcgMTAwNjQ0Ci0tLSBhL2xpYmR3L0NoYW5nZUxvZworKysgYi9saWJkdy9D aGFuZ2VMb2cKQEAgLTEsMyArMSw3IEBACisyMDE5LTA4LTEyICBNYXJrIFdp ZWxhYXJkICA8bWFya0BrbG9tcC5vcmc+CisKKwkqIGxpYmR3Lm1hcCAoRUxG VVRJTFNfMC4xNzcpOiBBZGQgbmV3IHZlcnNpb24gb2YgZHdlbGZfZWxmX2Jl Z2luLgorCiAyMDE5LTA2LTI4ICBNYXJrIFdpZWxhYXJkICA8bWFya0BrbG9t cC5vcmc+CiAKIAkqIGxpYmR3Lm1hcCAoRUxGVVRJTFNfMC4xNzcpOiBOZXcg c2VjdGlvbi4gQWRkCmRpZmYgLS1naXQgYS9saWJkdy9saWJkdy5tYXAgYi9s aWJkdy9saWJkdy5tYXAKaW5kZXggMmUxYzBlOWUuLmRlY2FjMDVjIDEwMDY0 NAotLS0gYS9saWJkdy9saWJkdy5tYXAKKysrIGIvbGliZHcvbGliZHcubWFw CkBAIC0zNjUsNCArMzY1LDggQEAgRUxGVVRJTFNfMC4xNzUgewogRUxGVVRJ TFNfMC4xNzcgewogICBnbG9iYWw6CiAgICAgZHdlbGZfZWxmX2VfbWFjaGlu ZV9zdHJpbmc7CisgICAgIyBSZXBsYWNlZCBFTEZVVElMU18wLjE3NSB2ZXJz aW9ucy4gIEJvdGggdmVyc2lvbnMgcG9pbnQgdG8gdGhlCisgICAgIyBzYW1l IGltcGxlbWVudGF0aW9uLCBidXQgdXNlcnMgb2YgdGhlIG5ldyBzeW1ib2wg dmVyc2lvbiBjYW4KKyAgICAjIHByZXN1bWUgdGhhdCBOVUxMIGlzIG9ubHkg cmV0dXJuZWQgb24gZXJyb3IgKG90aGVyd2lzZSBFTEZfS19OT05FKS4KKyAg ICBkd2VsZl9lbGZfYmVnaW47CiB9IEVMRlVUSUxTXzAuMTc1OwpkaWZmIC0t Z2l0IGEvbGliZHdlbGYvQ2hhbmdlTG9nIGIvbGliZHdlbGYvQ2hhbmdlTG9n CmluZGV4IDI5ZjlhNTA5Li41YjQ4ZWQ4ZiAxMDA2NDQKLS0tIGEvbGliZHdl bGYvQ2hhbmdlTG9nCisrKyBiL2xpYmR3ZWxmL0NoYW5nZUxvZwpAQCAtMSwz ICsxLDkgQEAKKzIwMTktMDgtMTIgIE1hcmsgV2llbGFhcmQgIDxtYXJrQGts b21wLm9yZz4KKworCSogbGliZHdlbGYuaCAoZHdlbGZfZWxmX2JlZ2luKTog VXBkYXRlIGRvY3VtZW50YXRpb24uCisJKiBkd2VsZl9lbGZfYmVnaW4uYyAo ZHdlbGZfZWxmX2JlZ2luKTogRG9uJ3Qgc3VwcHJlc3MgRUxGX0tfTk9ORS4K KwlNYXJrIG9sZCBhbmQgbmV3IHZlcnNpb24uCisKIDIwMTktMDYtMjggIE1h cmsgV2llbGFhcmQgIDxtYXJrQGtsb21wLm9yZz4KIAogCSogTWFrZWZpbGUu YW0gKGxpYmR3ZWxmX2FfU09VUkNFUyk6IEFkZCBkd2VsZl9lbGZfZV9tYWNo aW5lX3N0cmluZy5jLgpkaWZmIC0tZ2l0IGEvbGliZHdlbGYvZHdlbGZfZWxm X2JlZ2luLmMgYi9saWJkd2VsZi9kd2VsZl9lbGZfYmVnaW4uYwppbmRleCA3 OTgyNTMzOC4uYzdkNjNhMWMgMTAwNjQ0Ci0tLSBhL2xpYmR3ZWxmL2R3ZWxm X2VsZl9iZWdpbi5jCisrKyBiL2xpYmR3ZWxmL2R3ZWxmX2VsZl9iZWdpbi5j CkBAIC00MSwxMyArNDEsMTMgQEAgZHdlbGZfZWxmX2JlZ2luIChpbnQgZmQp CiB7CiAgIEVsZiAqZWxmID0gTlVMTDsKICAgRHdmbF9FcnJvciBlID0gX19s aWJkd19vcGVuX2VsZiAoZmQsICZlbGYpOwotICBpZiAoZWxmICE9IE5VTEwg JiYgZWxmX2tpbmQgKGVsZikgIT0gRUxGX0tfTk9ORSkKKyAgaWYgKGUgPT0g RFdGTF9FX05PRVJST1IpCiAgICAgcmV0dXJuIGVsZjsKIAotICAvKiBFbGYg d2Fzbid0IHVzYWJsZS4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHByb3BlciBl bGYgZXJyb3IgbWVzc2FnZS4gICovCi0KLSAgaWYgKGVsZiAhPSBOVUxMKQot ICAgIGVsZl9lbmQgKGVsZik7CisgIC8qIEVsZiB3YXNuJ3QgdXNhYmxlLiAg TWFrZSBzdXJlIHRoZXJlIGlzIGEgcHJvcGVyIGVsZiBlcnJvcgorICAgICBt ZXNzYWdlLiAgVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIHJlYWwgZXJyb3Is IGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgbm8gZ29vZCB3YXkgdG8gcHJvcGFn YXRlIGVycm5vcyBvciBkZWNvbXByZXNzaW9uIGVycm9ycywgYnV0CisgICAg IGJldHRlciB0aGFuIG5vdGhpbmcuICAqLwogCiAgIGlmIChlICE9IERXRkxf RV9MSUJFTEYpCiAgICAgewpAQCAtNjAsMyArNjAsNSBAQCBkd2VsZl9lbGZf YmVnaW4gKGludCBmZCkKIAogICByZXR1cm4gTlVMTDsKIH0KK09MRF9WRVJT SU9OIChkd2VsZl9lbGZfYmVnaW4sIEVMRlVUSUxTXzAuMTc1KQorTkVXX1ZF UlNJT04gKGR3ZWxmX2VsZl9iZWdpbiwgRUxGVVRJTFNfMC4xNzcpCmRpZmYg LS1naXQgYS9saWJkd2VsZi9saWJkd2VsZi5oIGIvbGliZHdlbGYvbGliZHdl bGYuaAppbmRleCBjYjdlYTA5MS4uZGJiOGYwOGMgMTAwNjQ0Ci0tLSBhL2xp YmR3ZWxmL2xpYmR3ZWxmLmgKKysrIGIvbGliZHdlbGYvbGliZHdlbGYuaApA QCAtMTI4LDkgKzEyOCwxMiBAQCBleHRlcm4gdm9pZCBkd2VsZl9zdHJ0YWJf ZnJlZSAoRHdlbGZfU3RydGFiICpzdCkKIC8qIENyZWF0ZXMgYSByZWFkLW9u bHkgRWxmIGhhbmRsZSBmcm9tIHRoZSBnaXZlbiBmaWxlIGhhbmRsZS4gIFRo ZQogICAgZmlsZSBtYXkgYmUgY29tcHJlc3NlZCBhbmQvb3IgY29udGFpbiBh IGxpbnV4IGtlcm5lbCBpbWFnZSBoZWFkZXIsCiAgICBpbiB3aGljaCBjYXNl IGl0IGlzIGVhZ2VybHkgZGVjb21wcmVzc2VkIGluIGZ1bGwgYW5kIHRoZSBF bGYgaGFuZGxlCi0gICBpcyBjcmVhdGVkIGFzIGlmIGNyZWF0ZWQgd2l0aCBl bGZfbWVtb3J5ICgpLiAgT24gZXJyb3IgTlVMTCBpcwotICAgcmV0dXJuZWQu ICBUaGUgRWxmIGhhbmRsZSBzaG91bGQgYmUgY2xvc2VkIHdpdGggZWxmX2Vu ZCAoKS4gIFRoZQotICAgZmlsZSBoYW5kbGUgd2lsbCBub3QgYmUgY2xvc2Vk LiAgRG9lcyBub3QgcmV0dXJuIEVMRl9LX05PTkUgaGFuZGxlcy4gICovCisg ICBpcyBjcmVhdGVkIGFzIGlmIGNyZWF0ZWQgd2l0aCBlbGZfbWVtb3J5ICgp LiAgT24gZGVjb21wcmVzc2lvbiBvcgorICAgZmlsZSBlcnJvcnMgTlVMTCBp cyByZXR1cm5lZCAoYW5kIGVsZl9lcnJubyB3aWxsIGJlIHNldCkuICBJZiB0 aGVyZQorICAgd2FzIG5vIGVycm9yLCBidXQgdGhlIGZpbGUgaXMgbm90IGFu IEVMRiBmaWxlLCB0aGVuIGFuIEVMRl9LX05PTkUKKyAgIEVsZiBoYW5kbGUg aXMgcmV0dXJuZWQgKGp1c3QgbGlrZSB3aXRoIGVsZl9iZWdpbikuICBUaGUg RWxmIGhhbmRsZQorICAgc2hvdWxkIGJlIGNsb3NlZCB3aXRoIGVsZl9lbmQg KCkuICBUaGUgZmlsZSBoYW5kbGUgd2lsbCBub3QgYmUKKyAgIGNsb3NlZC4g ICovCiBleHRlcm4gRWxmICpkd2VsZl9lbGZfYmVnaW4gKGludCBmZCk7CiAK IC8qIFJldHVybnMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgZm9yIHRoZSBn aXZlbiBFTEYgaGVhZGVyIGVfbWFjaGluZQpkaWZmIC0tZ2l0IGEvbGliZHdm bC9DaGFuZ2VMb2cgYi9saWJkd2ZsL0NoYW5nZUxvZwppbmRleCA4Y2JlOTBj OS4uMDRhMzk2MzcgMTAwNjQ0Ci0tLSBhL2xpYmR3ZmwvQ2hhbmdlTG9nCisr KyBiL2xpYmR3ZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTkt MDgtMTIgIE1hcmsgV2llbGFhcmQgIDxtYXJrQGtsb21wLm9yZz4KKworCSog Z3ppcC5jIChvcGVuX3N0cmVhbSk6IFJldHVybiBEV0ZMX0VfRVJSTk8gb24g YmFkIGZpbGUgb3BlcmF0aW9uLgorCSogb3Blbi5jIChsaWJkd19vcGVuX2Vs Zik6IE5ldyBhcmd1bWVudCBiYWRfZWxmX29rLiBDaGVjayBpdCBhbmQKKwly ZXR1cm4gRFdGTF9FX05PRVJST1IgaW4gY2FzZSBpdCBpcyBzZXQgYW5kIGVy cm9yIHdhcyBEV0ZMX0VfQkFERUxGLgorCShfX2xpYmR3X29wZW5fZmlsZSk6 IENhbGwgbGliZHdfb3Blbl9lbGYgd2l0aCBiYWRfZWxmX29rIGZhbHNlLgor CShfX2xpYmR3X29wZW5fZWxmKTogQ2FsbCBsaWJkd19vcGVuX2VsZiB3aXRo IGJhZF9lbGZfb2sgdHJ1ZS4KKwogMjAxOS0wOC0wNSAgT21hciBTYW5kb3Zh bCAgPG9zYW5kb3ZAZmIuY29tPgogCiAJKiBkd2ZsX3NlZ21lbnRfcmVwb3J0 X21vZHVsZS5jIChkd2ZsX3NlZ21lbnRfcmVwb3J0X21vZHVsZSk6IEFzc2ln bgpkaWZmIC0tZ2l0IGEvbGliZHdmbC9nemlwLmMgYi9saWJkd2ZsL2d6aXAu YwppbmRleCBjMmMxM2JhZi4uMDQzZDBiNmUgMTAwNjQ0Ci0tLSBhL2xpYmR3 ZmwvZ3ppcC5jCisrKyBiL2xpYmR3ZmwvZ3ppcC5jCkBAIC0xMzksMTQgKzEz OSwxNCBAQCBvcGVuX3N0cmVhbSAoaW50IGZkLCBvZmZfdCBzdGFydF9vZmZz ZXQsIHN0cnVjdCB1bnppcF9zdGF0ZSAqc3RhdGUpCiB7CiAgICAgaW50IGQg PSBkdXAgKGZkKTsKICAgICBpZiAodW5saWtlbHkgKGQgPCAwKSkKLSAgICAg IHJldHVybiBEV0ZMX0VfQkFERUxGOworICAgICAgcmV0dXJuIERXRkxfRV9F UlJOTzsKICAgICBpZiAoc3RhcnRfb2Zmc2V0ICE9IDApCiAgICAgICB7CiAJ b2ZmX3Qgb2ZmID0gbHNlZWsgKGQsIHN0YXJ0X29mZnNldCwgU0VFS19TRVQp OwogCWlmIChvZmYgIT0gc3RhcnRfb2Zmc2V0KQogCSAgewogCSAgICBjbG9z ZSAoZCk7Ci0JICAgIHJldHVybiBEV0ZMX0VfQkFERUxGOworCSAgICByZXR1 cm4gRFdGTF9FX0VSUk5POwogCSAgfQogICAgICAgfQogICAgIHN0YXRlLT56 ZiA9IGd6ZG9wZW4gKGQsICJyIik7CkBAIC0yODgsNiArMjg4LDcgQEAgdW56 aXAgKGludCBmZCwgb2ZmX3Qgc3RhcnRfb2Zmc2V0LAogICBpZiAocmVzdWx0 ID09IERXRkxfRV9OT0VSUk9SICYmIGd6ZGlyZWN0IChzdGF0ZS56ZikpCiAg ICAgewogICAgICAgZ3pjbG9zZSAoc3RhdGUuemYpOworICAgICAgLyogTm90 IGEgY29tcHJlc3NlZCBzdHJlYW0gYWZ0ZXIgYWxsLiAgKi8KICAgICAgIHJl dHVybiBmYWlsICgmc3RhdGUsIERXRkxfRV9CQURFTEYpOwogICAgIH0KIApk aWZmIC0tZ2l0IGEvbGliZHdmbC9vcGVuLmMgYi9saWJkd2ZsL29wZW4uYwpp bmRleCA3NDM2NzM1OS4uMzVmYzUyODMgMTAwNjQ0Ci0tLSBhL2xpYmR3Zmwv b3Blbi5jCisrKyBiL2xpYmR3Zmwvb3Blbi5jCkBAIC0xMTgsNyArMTE4LDcg QEAgd2hhdF9raW5kIChpbnQgZmQsIEVsZiAqKmVsZnAsIEVsZl9LaW5kICpr aW5kLCBib29sICptYXlfY2xvc2VfZmQpCiAKIHN0YXRpYyBEd2ZsX0Vycm9y CiBsaWJkd19vcGVuX2VsZiAoaW50ICpmZHAsIEVsZiAqKmVsZnAsIGJvb2wg Y2xvc2Vfb25fZmFpbCwgYm9vbCBhcmNoaXZlX29rLAotCQlib29sIG5ldmVy X2Nsb3NlX2ZkKQorCQlib29sIG5ldmVyX2Nsb3NlX2ZkLCBib29sIGJhZF9l bGZfb2spCiB7CiAgIGJvb2wgbWF5X2Nsb3NlX2ZkID0gZmFsc2U7CiAKQEAg LTE2NCw2ICsxNjQsMTAgQEAgbGliZHdfb3Blbl9lbGYgKGludCAqZmRwLCBF bGYgKiplbGZwLCBib29sIGNsb3NlX29uX2ZhaWwsIGJvb2wgYXJjaGl2ZV9v aywKICAgICAgICYmICEoYXJjaGl2ZV9vayAmJiBraW5kID09IEVMRl9LX0FS KSkKICAgICBlcnJvciA9IERXRkxfRV9CQURFTEY7CiAKKyAgLyogVGhpcyBi YXNpY2FsbHkgbWVhbnMsIHdlIGtlZXAgYSBFTEZfS19OT05FIEVsZiBoYW5k bGUgYW5kIHJldHVybiBpdC4gICovCisgIGlmIChiYWRfZWxmX29rICYmIGVy cm9yID09IERXRkxfRV9CQURFTEYpCisgICAgZXJyb3IgPSBEV0ZMX0VfTk9F UlJPUjsKKwogICBpZiAoZXJyb3IgIT0gRFdGTF9FX05PRVJST1IpCiAgICAg ewogICAgICAgZWxmX2VuZCAoZWxmKTsKQEAgLTE4NCwxMSArMTg4LDExIEBA IGxpYmR3X29wZW5fZWxmIChpbnQgKmZkcCwgRWxmICoqZWxmcCwgYm9vbCBj bG9zZV9vbl9mYWlsLCBib29sIGFyY2hpdmVfb2ssCiBEd2ZsX0Vycm9yIGlu dGVybmFsX2Z1bmN0aW9uCiBfX2xpYmR3X29wZW5fZmlsZSAoaW50ICpmZHAs IEVsZiAqKmVsZnAsIGJvb2wgY2xvc2Vfb25fZmFpbCwgYm9vbCBhcmNoaXZl X29rKQogewotICByZXR1cm4gbGliZHdfb3Blbl9lbGYgKGZkcCwgZWxmcCwg Y2xvc2Vfb25fZmFpbCwgYXJjaGl2ZV9vaywgZmFsc2UpOworICByZXR1cm4g bGliZHdfb3Blbl9lbGYgKGZkcCwgZWxmcCwgY2xvc2Vfb25fZmFpbCwgYXJj aGl2ZV9vaywgZmFsc2UsIGZhbHNlKTsKIH0KIAogRHdmbF9FcnJvciBpbnRl cm5hbF9mdW5jdGlvbgogX19saWJkd19vcGVuX2VsZiAoaW50IGZkLCBFbGYg KiplbGZwKQogewotICByZXR1cm4gbGliZHdfb3Blbl9lbGYgKCZmZCwgZWxm cCwgZmFsc2UsIHRydWUsIHRydWUpOworICByZXR1cm4gbGliZHdfb3Blbl9l bGYgKCZmZCwgZWxmcCwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUpOwogfQot LSAKMi4xOC4xCgo= --=-toE0+m6zySy2incb7ZmC--