From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v5 09/28] xsplice: Add helper elf routines Date: Thu, 24 Mar 2016 16:00:21 -0400 Message-ID: <1458849640-22588-10-git-send-email-konrad.wilk@oracle.com> References: <1458849640-22588-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ajBRY-0007Pt-TZ for xen-devel@lists.xenproject.org; Thu, 24 Mar 2016 20:01:21 +0000 In-Reply-To: <1458849640-22588-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, ross.lagerwall@citrix.com, konrad@kernel.org, andrew.cooper3@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com Cc: Keir Fraser , Tim Deegan , Ian Jackson , Jan Beulich , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgpBZGQgRWxm IHJvdXRpbmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW4gcHJlcGFyYXRpb24gZm9yIGxvYWRpbmcg YW4KeFNwbGljZSBwYXlsb2FkLgoKV2UgbWFrZSBhbiBhc3N1bXB0aW9uIHRoYXQgdGhlIG1heCBu dW1iZXIgb2Ygc2VjdGlvbnMgYW4gRUxGIHBheWxvYWQKY2FuIGhhdmUgaXMgNjQuIFdlIGNhbiBp biBmdXR1cmUgbWFrZSB0aGlzIGJlIGRlcGVuZGVudCBvbiB0aGUKbmFtZXMgb2YgdGhlIHNlY3Rp b25zIGFuZCB2ZXJpZnlpbmcgYWdhaW5zdCBhIGxpc3QsIGJ1dCBmb3IgcmlnaHQgbm93CnRoaXMg c3VmZmljZXMuCgpBbHNvIHdlIGEgd2hvbGUgbG90IG9mIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhh dCB0aGUgRUxGIHBheWxvYWQKZmlsZSBpcyBub3QgY29ycnVwdGVkIG5vciB0aGF0IHRoZSBvZmZz ZXRzIHBvaW50IHBhc3QgdGhlIGZpbGUuCgpGb3IgbW9zdCBvZiB0aGUgY2hlY2tzIHdlIHByaW50 IGFuIG1lc3NhZ2UgaWYgdGhlIGh5cGVydmlzb3IgaXMgYnVpbHQKd2l0aCBkZWJ1ZyBlbmFibGVk LgoKU2lnbmVkLW9mZi1ieTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5j b20+ClNpZ25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3Jh Y2xlLmNvbT4KLS0tCkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4K Q2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEtlaXIgRnJhc2VyIDxrZWly QHhlbi5vcmc+CkNjOiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4KCnYyOiAtIFdpdGggdGhlICNk ZWZpbmUgRUxGU0laRSBpbiB0aGUgQVJNIGZpbGUgd2UgY2FuIHVzZSB0aGUgY29tbW9uCiAgICAg I2RlZmluZXMgaW5zdGVhZCBvZiB1c2luZyAjaWZkZWYgQ09ORklHX0FSTV8zMi4gTW92ZWQgdG8g YW5vdGhlcgogICAgcGF0Y2guCiAgICAtIEFkZCBjaGVja3MgZm9yIEVMRiBmaWxlLgogICAgLSBB ZGQgbmFtZSB0byBiZSBwcmludGVkLgogICAgLSBBZGQgbGVuIGZvciBlYXNpZXIgRUxGIGNoZWNr cy4KICAgIC0gRXhwYW5kIG9uIHRoZSBjaGVja3MuIEFkZCBtYWNyby4KdjM6IFJlbW92ZSB0aGUg cmV0dXJuXyBtYWNybwogIC0gQWRkIHJldHVybl8gbWFjcm8gYmFjayBidXQgbWFrZSBpdCBkZXBl bmQgb24gZGVidWc9eQogIC0gUGVyIEFuZHJldyByZXZpZXc6IGFkZCBsb2NhbCB2YXJpYWJsZS4g Rml4IG1lbW9yeSBsZWFrIGluCiAgICBlbGZfcmVzb2x2ZV9zZWN0aW9ucywgUmVtb3ZlIG1hY3Jv IGFuZCB1c2UgZHByaW50ay4gRml4IGFsaWdubWVudC4KICAgIFVzZSB2b2lkKiBpbnN0ZWFkIG9m IHVpbnQ4X3QgdG8gaGFuZGxlIHJhdyBwYXlsb2FkLgp2NCAtIEZpeCBtZW1vcnkgbGVhayBpbiBl bGZfZ2V0X3N5bQogIC0gQWRkIFhTUExJQ0UgdG8gcHJpbnRrL2RwcmludGsKdjU6IFNwcmlua2xl IG5ld2xpbmVzLgotLS0KIHhlbi9jb21tb24vTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHhl bi9jb21tb24veHNwbGljZV9lbGYuYyAgICAgIHwgMjk0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaCAgICAgfCAgIDMg KwogeGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmggfCAgNTEgKysrKysrKysKIDQgZmlsZXMg Y2hhbmdlZCwgMzQ5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9u L3hzcGxpY2VfZWxmLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4veHNwbGlj ZV9lbGYuaAoKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vTWFrZWZpbGUgYi94ZW4vY29tbW9uL01h a2VmaWxlCmluZGV4IDFlNGJjNzAuLmFmZDg0YjYgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vTWFr ZWZpbGUKKysrIGIveGVuL2NvbW1vbi9NYWtlZmlsZQpAQCAtNTksNiArNTksNyBAQCBvYmoteSAr PSB3YWl0Lm8KIG9iai0kKENPTkZJR19YRU5PUFJPRikgKz0geGVub3Byb2Yubwogb2JqLXkgKz0g eG1hbGxvY190bHNmLm8KIG9iai0kKENPTkZJR19YU1BMSUNFKSArPSB4c3BsaWNlLm8KK29iai0k KENPTkZJR19YU1BMSUNFKSArPSB4c3BsaWNlX2VsZi5vCiAKIG9iai1iaW4tJChDT05GSUdfWDg2 KSArPSAkKGZvcmVhY2ggbixkZWNvbXByZXNzIGJ1bnppcDIgdW54eiB1bmx6bWEgdW5sem8gdW5s ejQgZWFybHljcGlvLCQobikuaW5pdC5vKQogCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3hzcGxp Y2VfZWxmLmMgYi94ZW4vY29tbW9uL3hzcGxpY2VfZWxmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZjIyY2VkZQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9jb21tb24veHNw bGljZV9lbGYuYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBD aXRyaXggU3lzdGVtcyBSJkQgTHRkLgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNp bmNsdWRlIDx4ZW4vbGliLmg+CisjaW5jbHVkZSA8eGVuL3hzcGxpY2VfZWxmLmg+CisjaW5jbHVk ZSA8eGVuL3hzcGxpY2UuaD4KKworc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqeHNwbGljZV9lbGZf c2VjX2J5X25hbWUoY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmICplbGYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQorewor ICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBlbGYtPmhkci0+ZV9z aG51bTsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggIXN0cmNtcChuYW1lLCBlbGYtPnNlY1tp XS5uYW1lKSApCisgICAgICAgICAgICByZXR1cm4gJmVsZi0+c2VjW2ldOworICAgIH0KKworICAg IHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGVsZl9yZXNvbHZlX3NlY3Rpb25zKHN0cnVj dCB4c3BsaWNlX2VsZiAqZWxmLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCB4c3Bs aWNlX2VsZl9zZWMgKnNlYzsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIC8qIHhzcGxpY2Vf ZWxmX2xvYWQgc2FuaXR5IGNoZWNrZWQgZV9zaG51bSBjaGVja2VkLiAqLworICAgIHNlYyA9IHht YWxsb2NfYXJyYXkoc3RydWN0IHhzcGxpY2VfZWxmX3NlYywgZWxmLT5oZHItPmVfc2hudW0pOwor ICAgIGlmICggIXNlYyApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiJXMlczog Q291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc2VjdGlvbiB0YWJsZSFcbiIsCisgICAgICAg ICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAg ICB9CisKKyAgICBlbGYtPnNlYyA9IHNlYzsKKworICAgIC8qIE4uQi4gV2UgYWxzbyB3aWxsIGlu Z2VzdCBTSE5fVU5ERUYgc2VjdGlvbnMuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBlbGYtPmhk ci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAgICAgIHNzaXplX3QgZGVsdGEgPSBlbGYtPmhk ci0+ZV9zaG9mZiArIGkgKiBlbGYtPmhkci0+ZV9zaGVudHNpemU7CisKKyAgICAgICAgaWYgKCBk ZWx0YSArIHNpemVvZihFbGZfU2hkcikgPiBlbGYtPmxlbiApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogU2VjdGlvbiBoZWFkZXIgWyVkXSBpcyBw YXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxm LT5uYW1lLCBpKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAg ICAgICAgc2VjW2ldLnNlYyA9IChFbGZfU2hkciAqKShkYXRhICsgZGVsdGEpOworICAgICAgICBk ZWx0YSA9IHNlY1tpXS5zZWMtPnNoX29mZnNldDsKKworICAgICAgICBpZiAoIGRlbHRhID4gZWxm LT5sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywgIiVz JXM6IFNlY3Rpb24gWyVkXSBkYXRhIGlzIHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAg ICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUsIGkpOworICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICBzZWNbaV0uZGF0YSA9IGRhdGEgKyBkZWx0 YTsKKyAgICAgICAgLyogTmFtZSBpcyBwb3B1bGF0ZWQgaW4geHNwbGljZV9lbGZfc2VjdGlvbnNf bmFtZS4gKi8KKyAgICAgICAgc2VjW2ldLm5hbWUgPSBOVUxMOworCisgICAgICAgIGlmICggc2Vj W2ldLnNlYy0+c2hfdHlwZSA9PSBTSFRfU1lNVEFCICkKKyAgICAgICAgeworICAgICAgICAgICAg aWYgKCBlbGYtPnN5bXRhYiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHByaW50 ayhYRU5MT0dfREVCVUcsICIlcyVzOiBNdWx0aXBsZSBzeW1ib2wgdGFibGVzIVxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVsZi0+bmFtZSk7CisgICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVsZi0+c3ltdGFi ID0gJnNlY1tpXTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGVsZi0+c3ltdGFi LT5zZWMtPnNoX2xpbmsgd291bGQgcG9pbnQgdG8gdGhlIHJpZ2h0IHNlY3Rpb24KKyAgICAgICAg ICAgICAqIGJ1dCB3ZSBoYWRuJ3QgZmluaXNoZWQgcGFyc2luZyBhbGwgdGhlIHNlY3Rpb25zLgor ICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIGVsZi0+c3ltdGFiLT5zZWMtPnNoX2xp bmsgPiBlbGYtPmhkci0+ZV9zaG51bSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBTeW1ib2wgdGFibGUgaWR4ICglZCkgdG8gc3Ry dGFiIHBhc3QgZW5kICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBYU1BMSUNFLCBl bGYtPm5hbWUsIGVsZi0+c3ltdGFiLT5zZWMtPnNoX2xpbmssCisgICAgICAgICAgICAgICAgICAg ICAgICBlbGYtPmhkci0+ZV9zaG51bSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFlbGYtPnN5bXRh YiApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywgIiVzJXM6IE5vIHN5bWJv bCB0YWJsZSBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lKTsK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgLyogVGhlcmUgY2FuIGJlIG11 bHRpcGxlIFNIVF9TVFJUQUIgc28gcGljayB0aGUgcmlnaHQgb25lLiAqLworICAgIGVsZi0+c3Ry dGFiID0gJnNlY1tlbGYtPnN5bXRhYi0+c2VjLT5zaF9saW5rXTsKKworICAgIGlmICggIWVsZi0+ c3ltdGFiLT5zZWMtPnNoX3NpemUgfHwgIWVsZi0+c3ltdGFiLT5zZWMtPnNoX2VudHNpemUgfHwK KyAgICAgICAgIGVsZi0+c3ltdGFiLT5zZWMtPnNoX2VudHNpemUgIT0gc2l6ZW9mKEVsZl9TeW0p ICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogU3ltYm9sIHRh YmxlIGhlYWRlciBpcyBjb3JydXB0ZWQhXG4iLAorICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVs Zi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IGVsZl9yZXNvbHZlX3NlY3Rpb25fbmFtZXMoc3RydWN0IHhzcGxp Y2VfZWxmICplbGYsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgY29uc3QgY2hhciAqc2hzdHJ0 YWI7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgaW50IG9mZnNldCwgZGVsdGE7 CisKKyAgICAvKgorICAgICAqIFRoZSBlbGYtPnNlY1swIC0+IGVfc2hudW1dIHN0cnVjdHVyZXMg aGF2ZSBiZWVuIHZlcmlmaWVkIGJ5CisgICAgICogZWxmX3Jlc29sdmVfc2VjdGlvbnMuIEZpbmQg ZmlsZSBvZmZzZXQgZm9yIHNlY3Rpb24gc3RyaW5nIHRhYmxlLgorICAgICAqLworICAgIG9mZnNl dCA9ICBlbGYtPnNlY1tlbGYtPmhkci0+ZV9zaHN0cm5keF0uc2VjLT5zaF9vZmZzZXQ7CisKKyAg ICBpZiAoIG9mZnNldCA+IGVsZi0+bGVuICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9H X0RFQlVHLCAiJXMlczogc2hzdHJ0YWIgc2VjdGlvbiBvZmZzZXQgKCV1KSBwYXN0IGVuZCBvZiBw YXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUsIGVsZi0+aGRy LT5lX3Noc3RybmR4KTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgc2hz dHJ0YWIgPSAoZGF0YSArIG9mZnNldCk7CisKKyAgICAvKiBXZSBjb3VsZCBpZ25vcmUgdGhlIGZp cnN0IGFzIGl0IGlzIHJlc2VydmVkLi4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IGVsZi0+aGRy LT5lX3NobnVtOyBpKysgKQorICAgIHsKKyAgICAgICAgZGVsdGEgPSBlbGYtPnNlY1tpXS5zZWMt PnNoX25hbWU7CisKKyAgICAgICAgaWYgKCBvZmZzZXQgKyBkZWx0YSA+IGVsZi0+bGVuICkKKyAg ICAgICAgeworICAgICAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBzaHN0cnRh YiBbJWRdIGRhdGEgaXMgcGFzdCBlbmQgb2YgcGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAg ICAgIFhTUExJQ0UsIGVsZi0+bmFtZSwgaSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK KyAgICAgICAgfQorCisgICAgICAgIGVsZi0+c2VjW2ldLm5hbWUgPSBzaHN0cnRhYiArIGRlbHRh OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVsZl9nZXRfc3ltKHN0 cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCB4 c3BsaWNlX2VsZl9zZWMgKnN5bXRhYl9zZWMsICpzdHJ0YWJfc2VjOworICAgIHN0cnVjdCB4c3Bs aWNlX2VsZl9zeW0gKnN5bTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgZGVsdGEsIG9mZnNldCwgbnN5 bTsKKworICAgIHN5bXRhYl9zZWMgPSBlbGYtPnN5bXRhYjsKKyAgICBzdHJ0YWJfc2VjID0gZWxm LT5zdHJ0YWI7CisKKyAgICAvKiBQb2ludGVycyBhcml0aG1ldGljIHRvIGdldCBmaWxlIG9mZnNl dC4gKi8KKyAgICBvZmZzZXQgPSBzdHJ0YWJfc2VjLT5kYXRhIC0gZGF0YTsKKworICAgIEFTU0VS VChvZmZzZXQgPT0gc3RydGFiX3NlYy0+c2VjLT5zaF9vZmZzZXQpOworCisgICAgLyogc3ltdGFi X3NlYy0+ZGF0YSB3YXMgY29tcHV0ZWQgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMuICovCisgICAg QVNTRVJUKChzeW10YWJfc2VjLT5zZWMtPnNoX29mZnNldCArIGRhdGEpID09IHN5bXRhYl9zZWMt PmRhdGEpOworCisgICAgLyogTm8gbmVlZCB0byBjaGVjayB2YWx1ZXMgYXMgZWxmX3Jlc29sdmVf c2VjdGlvbnMgZGlkIGl0LiAqLworICAgIG5zeW0gPSBzeW10YWJfc2VjLT5zZWMtPnNoX3NpemUg LyBzeW10YWJfc2VjLT5zZWMtPnNoX2VudHNpemU7CisKKyAgICBzeW0gPSB4bWFsbG9jX2FycmF5 KHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0sIG5zeW0pOworICAgIGlmICggIXN5bSApCisgICAgewor ICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiJXMlczogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9y eSBmb3Igc3ltYm9sc1xuIiwKKyAgICAgICAgICAgICAgIFhTUExJQ0UsIGVsZi0+bmFtZSk7Cisg ICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIC8qIFNvIHdlIGRvbid0IGxlYWsg bWVtb3J5LiAqLworICAgIGVsZi0+c3ltID0gc3ltOworICAgIGZvciAoIGkgPSAwOyBpIDwgbnN5 bTsgaSsrICkKKyAgICB7CisgICAgICAgIEVsZl9TeW0gKnM7CisKKyAgICAgICAgaWYgKCBpICog c2l6ZW9mKEVsZl9TeW0pID4gZWxmLT5sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBkcHJp bnRrKFhFTkxPR19ERUJVRywgIiVzJXM6IFN5bWJvbCBoZWFkZXIgWyVkXSBpcyBwYXN0IGVuZCBv ZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lLCBp KTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgcyA9 ICYoKEVsZl9TeW0gKilzeW10YWJfc2VjLT5kYXRhKVtpXTsKKworICAgICAgICAvKiBJZiBzdC0+ bmFtZSBpcyBTVE5fVU5ERUYgaXMgemVybywgdGhlIGNoZWNrIHdpbGwgYWx3YXlzIGJlIHRydWUu ICovCisgICAgICAgIGRlbHRhID0gcy0+c3RfbmFtZTsKKworICAgICAgICAvKiBPZmZzZXQgaGFz IGJlZW4gY29tcHV0ZWQgZWFybGllci4gKi8KKyAgICAgICAgaWYgKCBvZmZzZXQgKyBkZWx0YSA+ IGVsZi0+bGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcs ICIlcyVzOiBTeW1ib2wgWyV1XSBkYXRhIGlzIHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAg ICAgICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUsIGkpOworICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICBzeW1baV0uc3ltID0gczsKKyAgICAg ICAgaWYgKCBzLT5zdF9uYW1lID09IFNUTl9VTkRFRiApCisgICAgICAgICAgICBzeW1baV0ubmFt ZSA9IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN5bVtpXS5uYW1lID0gZGF0YSAr ICggZGVsdGEgKyBvZmZzZXQgKTsKKyAgICB9CisgICAgZWxmLT5uc3ltID0gbnN5bTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhzcGxpY2VfaGVhZGVyX2NoZWNrKGNvbnN0IHN0 cnVjdCB4c3BsaWNlX2VsZiAqZWxmKQoreworICAgIGlmICggc2l6ZW9mKCplbGYtPmhkcikgPj0g ZWxmLT5sZW4gKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBT ZWN0aW9uIGhlYWRlciBpcyBiaWdnZXIgdGhhbiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAg ICBYU1BMSUNFLCBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisK KyAgICBpZiAoIGVsZi0+aGRyLT5lX3Noc3RybmR4ID09IFNITl9VTkRFRiApCisgICAgeworICAg ICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywgIiVzJXM6IFNlY3Rpb24gbmFtZSBpZHggaXMgdW5k ZWZpbmVkIT9cbiIsCisgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lKTsKKyAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCBzZWN0aW9uIG5h bWUgaW5kZXggaXMgd2l0aGluIHRoZSBzZWN0aW9ucy4gKi8KKyAgICBpZiAoIGVsZi0+aGRyLT5l X3Noc3RybmR4ID4gZWxmLT5oZHItPmVfc2hudW0gKQorICAgIHsKKyAgICAgICAgZHByaW50ayhY RU5MT0dfREVCVUcsICIlcyVzOiBTZWN0aW9uIG5hbWUgaWR4ICglZCkgaXMgcGFzdCBlbmQgb2Yg IHNlY3Rpb25zICglZCkhXG4iLAorICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVsZi0+bmFtZSwg ZWxmLT5oZHItPmVfc2hzdHJuZHgsIGVsZi0+aGRyLT5lX3NobnVtKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaG51bSA+IDY0ICkKKyAg ICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogVG9vIG1hbnkgKCVkKSBz ZWN0aW9ucyFcbiIsCisgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lLCBlbGYtPmhk ci0+ZV9zaG51bSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJldHVy biAwOworfQorCitpbnQgeHNwbGljZV9lbGZfbG9hZChzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwg dm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBlbGYtPmhkciA9IGRhdGE7CisKKyAg ICByYyA9IHhzcGxpY2VfaGVhZGVyX2NoZWNrKGVsZik7CisgICAgaWYgKCByYyApCisgICAgICAg IHJldHVybiByYzsKKworICAgIHJjID0gZWxmX3Jlc29sdmVfc2VjdGlvbnMoZWxmLCBkYXRhKTsK KyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBlbGZfcmVzb2x2 ZV9zZWN0aW9uX25hbWVzKGVsZiwgZGF0YSk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVy biByYzsKKworICAgIHJjID0gZWxmX2dldF9zeW0oZWxmLCBkYXRhKTsKKyAgICBpZiAoIHJjICkK KyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeHNwbGljZV9l bGZfZnJlZShzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZikKK3sKKyAgICB4ZnJlZShlbGYtPnNlYyk7 CisgICAgZWxmLT5zZWMgPSBOVUxMOworICAgIHhmcmVlKGVsZi0+c3ltKTsKKyAgICBlbGYtPnN5 bSA9IE5VTEw7CisgICAgZWxmLT5uc3ltID0gMDsKKyAgICBlbGYtPm5hbWUgPSBOVUxMOworICAg IGVsZi0+bGVuID0gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMK KyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lk dGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQg YS94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oIGIveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaApp bmRleCA1Yzg0ODUxLi4wMDQ4MmQwIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4veHNwbGlj ZS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmgKQEAgLTEwLDYgKzEwLDkgQEAgc3Ry dWN0IHhlbl9zeXNjdGxfeHNwbGljZV9vcDsKIAogI2lmZGVmIENPTkZJR19YU1BMSUNFCiAKKy8q IENvbnZlbmllbmNlIGRlZmluZSBmb3IgcHJpbnRrLiAqLworI2RlZmluZSBYU1BMSUNFICJ4c3Bs aWNlOiAiCisKIGludCB4c3BsaWNlX29wKHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3AgKik7 CiAKICNlbHNlCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4veHNwbGljZV9lbGYuaCBiL3hl bi9pbmNsdWRlL3hlbi94c3BsaWNlX2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmUyZGVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS94ZW4veHNwbGlj ZV9lbGYuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENpdHJp eCBTeXN0ZW1zIFImRCBMdGQuCisgKi8KKworI2lmbmRlZiBfX1hFTl9YU1BMSUNFX0VMRl9IX18K KyNkZWZpbmUgX19YRU5fWFNQTElDRV9FTEZfSF9fCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4K KyNpbmNsdWRlIDx4ZW4vZWxmc3RydWN0cy5oPgorCisvKiBUaGUgZm9sbG93aW5nIGRlc2NyaWJl cyBhbiBFbGYgZmlsZSBhcyBjb25zdW1lZCBieSB4U3BsaWNlLiAqLworc3RydWN0IHhzcGxpY2Vf ZWxmX3NlYyB7CisgICAgRWxmX1NoZHIgKnNlYzsgICAgICAgICAgICAgICAgIC8qIEhvb2tlZCB1 cCBpbiBlbGZfcmVzb2x2ZV9zZWN0aW9ucy4gKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAg ICAgICAgICAgLyogSHVtYW4gcmVhZGFibGUgbmFtZSBob29rZWQgaW4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxmX3Jlc29sdmVfc2VjdGlvbl9uYW1lcy4gKi8KKyAg ICBjb25zdCB2b2lkICpkYXRhOyAgICAgICAgICAgICAgLyogUG9pbnRlciB0byB0aGUgc2VjdGlv biAoZG9uZSBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZfcmVz b2x2ZV9zZWN0aW9ucykuICovCit9OworCitzdHJ1Y3QgeHNwbGljZV9lbGZfc3ltIHsKKyAgICBF bGZfU3ltICpzeW07CisgICAgY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCB4c3BsaWNl X2VsZiB7CisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g cGF5bG9hZC0+bmFtZS4gKi8KKyAgICBzc2l6ZV90IGxlbjsgICAgICAgICAgICAgICAgICAgLyog TGVuZ3RoIG9mIHRoZSBFTEYgZmlsZS4gKi8KKyAgICBFbGZfRWhkciAqaGRyOyAgICAgICAgICAg ICAgICAgLyogRUxGIGZpbGUuICovCisgICAgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqc2VjOyAg IC8qIEFycmF5IG9mIHNlY3Rpb25zLCBhbGxvY2F0ZWQgYnkgdXMuICovCisgICAgc3RydWN0IHhz cGxpY2VfZWxmX3N5bSAqc3ltOyAgIC8qIEFycmF5IG9mIHN5bWJvbHMgLCBhbGxvY2F0ZWQgYnkg dXMuICovCisgICAgdW5zaWduZWQgaW50IG5zeW07CisgICAgc3RydWN0IHhzcGxpY2VfZWxmX3Nl YyAqc3ltdGFiOy8qIFBvaW50ZXIgdG8gLnN5bXRhYiBzZWN0aW9uIC0gYWthIHRvIHNlY1t4XS4g Ki8KKyAgICBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICpzdHJ0YWI7LyogUG9pbnRlciB0byAuc3Ry dGFiIHNlY3Rpb24gLSBha2EgdG8gc2VjW3ldLiAqLworfTsKKworc3RydWN0IHhzcGxpY2VfZWxm X3NlYyAqeHNwbGljZV9lbGZfc2VjX2J5X25hbWUoY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmICpl bGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpuYW1lKTsKK2ludCB4c3BsaWNlX2VsZl9sb2FkKHN0cnVjdCB4c3BsaWNlX2VsZiAq ZWxmLCB2b2lkICpkYXRhKTsKK3ZvaWQgeHNwbGljZV9lbGZfZnJlZShzdHJ1Y3QgeHNwbGljZV9l bGYgKmVsZik7CisKKyNlbmRpZiAvKiBfX1hFTl9YU1BMSUNFX0VMRl9IX18gKi8KKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCi0tIAoyLjUuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==