From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 15/34] xsplice: Add helper elf routines Date: Tue, 15 Mar 2016 13:56:37 -0400 Message-ID: <1458064616-23101-16-git-send-email-konrad.wilk@oracle.com> References: <1458064616-23101-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aftGf-00018f-1w for xen-devel@lists.xenproject.org; Tue, 15 Mar 2016 18:00:29 +0000 In-Reply-To: <1458064616-23101-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 cmV0dXJuXyBtYWNybwp2NDogQWRkIHJldHVybl8gbWFjcm8gYmFjayBidXQgbWFrZSBpdCBkZXBl bmQgb24gZGVidWc9eQp2NTogUGVyIEFuZHJldyByZXZpZXc6IGRkZCBsb2NhbCB2YXJpYWJsZS4g Rml4IG1lbW9yeSBsZWFrIGluCiAgICBlbGZfcmVzb2x2ZV9zZWN0aW9ucywgUmVtb3ZlIG1hY3Jv IGFuZCB1c2UgZHByaW50ay4gRml4IGFsaWdubWVudC4KICAgIFVzZSB2b2lkKiBpbnN0ZWFkIG9m IHVpbnQ4X3QgdG8gaGFuZGxlIHJhdyBwYXlsb2FkLgp2NjogRml4IG1lbW9yeSBsZWFrIGluIGVs Zl9nZXRfc3ltCnY3OiBBZGQgWFNQTElDRSB0byBwcmludGsvZHByaW50awotLS0KIHhlbi9jb21t b24vTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHhlbi9jb21tb24veHNwbGljZV9lbGYuYyAg ICAgIHwgMjg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVu L2luY2x1ZGUveGVuL3hzcGxpY2UuaCAgICAgfCAgIDMgKwogeGVuL2luY2x1ZGUveGVuL3hzcGxp Y2VfZWxmLmggfCAgNTEgKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMzQyIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9uL3hzcGxpY2VfZWxmLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4veHNwbGljZV9lbGYuaAoKZGlmZiAtLWdpdCBhL3hl bi9jb21tb24vTWFrZWZpbGUgYi94ZW4vY29tbW9uL01ha2VmaWxlCmluZGV4IDBjOGJhMmMuLjli N2ZhYzcgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vTWFrZWZpbGUKKysrIGIveGVuL2NvbW1vbi9N YWtlZmlsZQpAQCAtNjEsNiArNjEsNyBAQCBvYmoteSArPSB3YWl0Lm8KIG9iai0kKENPTkZJR19Y RU5PUFJPRikgKz0geGVub3Byb2Yubwogb2JqLXkgKz0geG1hbGxvY190bHNmLm8KIG9iai0kKENP TkZJR19YU1BMSUNFKSArPSB4c3BsaWNlLm8KK29iai0kKENPTkZJR19YU1BMSUNFKSArPSB4c3Bs aWNlX2VsZi5vCiAKIG9iai1iaW4tJChDT05GSUdfWDg2KSArPSAkKGZvcmVhY2ggbixkZWNvbXBy ZXNzIGJ1bnppcDIgdW54eiB1bmx6bWEgdW5sem8gdW5sejQgZWFybHljcGlvLCQobikuaW5pdC5v KQogCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3hzcGxpY2VfZWxmLmMgYi94ZW4vY29tbW9uL3hz cGxpY2VfZWxmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4NzM2MQot LS0gL2Rldi9udWxsCisrKyBiL3hlbi9jb21tb24veHNwbGljZV9lbGYuYwpAQCAtMCwwICsxLDI4 NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBDaXRyaXggU3lzdGVtcyBSJkQgTHRkLgor ICovCisKKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vbGliLmg+CisjaW5j bHVkZSA8eGVuL3hzcGxpY2VfZWxmLmg+CisjaW5jbHVkZSA8eGVuL3hzcGxpY2UuaD4KKworc3Ry dWN0IHhzcGxpY2VfZWxmX3NlYyAqeHNwbGljZV9lbGZfc2VjX2J5X25hbWUoY29uc3Qgc3RydWN0 IHhzcGxpY2VfZWxmICplbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisg ICAgZm9yICggaSA9IDA7IGkgPCBlbGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAg ICAgIGlmICggIXN0cmNtcChuYW1lLCBlbGYtPnNlY1tpXS5uYW1lKSApCisgICAgICAgICAgICBy ZXR1cm4gJmVsZi0+c2VjW2ldOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0 aWMgaW50IGVsZl9yZXNvbHZlX3NlY3Rpb25zKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBjb25z dCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnNlYzsKKyAgICB1 bnNpZ25lZCBpbnQgaTsKKworICAgIC8qIHhzcGxpY2VfZWxmX2xvYWQgc2FuaXR5IGNoZWNrZWQg ZV9zaG51bSBjaGVja2VkLiAqLworICAgIHNlYyA9IHhtYWxsb2NfYXJyYXkoc3RydWN0IHhzcGxp Y2VfZWxmX3NlYywgZWxmLT5oZHItPmVfc2hudW0pOworICAgIGlmICggIXNlYyApCisgICAgewor ICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiJXMlczogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9y eSBmb3Igc2VjdGlvbiB0YWJsZSFcbiIsCisgICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5h bWUpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CisKKyAgICBlbGYtPnNlYyA9IHNl YzsKKworICAgIC8qIE4uQi4gV2UgYWxzbyB3aWxsIGluZ2VzdCBTSE5fVU5ERUYgc2VjdGlvbnMu ICovCisgICAgZm9yICggaSA9IDA7IGkgPCBlbGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7 CisgICAgICAgIHNzaXplX3QgZGVsdGEgPSBlbGYtPmhkci0+ZV9zaG9mZiArIGkgKiBlbGYtPmhk ci0+ZV9zaGVudHNpemU7CisKKyAgICAgICAgaWYgKCBkZWx0YSArIHNpemVvZihFbGZfU2hkcikg PiBlbGYtPmxlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVH LCAiJXMlczogU2VjdGlvbiBoZWFkZXIgWyVkXSBpcyBwYXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwK KyAgICAgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lLCBpKTsKKyAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIHNlY1tpXS5zZWMgPSAoRWxmX1No ZHIgKikoZGF0YSArIGRlbHRhKTsKKyAgICAgICAgZGVsdGEgPSBzZWNbaV0uc2VjLT5zaF9vZmZz ZXQ7CisKKyAgICAgICAgaWYgKCBkZWx0YSA+IGVsZi0+bGVuICkKKyAgICAgICAgeworICAgICAg ICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBTZWN0aW9uIFslZF0gZGF0YSBpcyBw YXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxm LT5uYW1lLCBpKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAg ICAgIHNlY1tpXS5kYXRhID0gZGF0YSArIGRlbHRhOworCisgICAgICAgIC8qIE5hbWUgaXMgcG9w dWxhdGVkIGluIHhzcGxpY2VfZWxmX3NlY3Rpb25zX25hbWUuICovCisgICAgICAgIHNlY1tpXS5u YW1lID0gTlVMTDsKKworICAgICAgICBpZiAoIHNlY1tpXS5zZWMtPnNoX3R5cGUgPT0gU0hUX1NZ TVRBQiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZWxmLT5zeW10YWIgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogTXVs dGlwbGUgc3ltYm9sIHRhYmxlcyFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBYU1BMSUNF LCBlbGYtPm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgZWxmLT5zeW10YWIgPSAmc2VjW2ldOworCisgICAgICAgICAgICAv KgorICAgICAgICAgICAgICogZWxmLT5zeW10YWItPnNlYy0+c2hfbGluayB3b3VsZCBwb2ludCB0 byB0aGUgcmlnaHQgc2VjdGlvbgorICAgICAgICAgICAgICogYnV0IHdlIGhhZG4ndCBmaW5pc2hl ZCBwYXJzaW5nIGFsbCB0aGUgc2VjdGlvbnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg IGlmICggZWxmLT5zeW10YWItPnNlYy0+c2hfbGluayA+IGVsZi0+aGRyLT5lX3NobnVtICkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywgIiVzJXM6 IFN5bWJvbCB0YWJsZSBpZHggKCVkKSB0byBzdHJ0YWIgcGFzdCBlbmQgKCVkKVxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVsZi0+bmFtZSwgZWxmLT5zeW10YWItPnNlYy0+ c2hfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZi0+aGRyLT5lX3NobnVtKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmICggIWVsZi0+c3ltdGFiICkKKyAgICB7CisgICAgICAgIGRwcmludGso WEVOTE9HX0RFQlVHLCAiJXMlczogTm8gc3ltYm9sIHRhYmxlIGZvdW5kIVxuIiwKKyAgICAgICAg ICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAg ICB9CisKKyAgICAvKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgU0hUX1NUUlRBQiBzbyBwaWNrIHRo ZSByaWdodCBvbmUuICovCisgICAgZWxmLT5zdHJ0YWIgPSAmc2VjW2VsZi0+c3ltdGFiLT5zZWMt PnNoX2xpbmtdOworCisgICAgaWYgKCAhZWxmLT5zeW10YWItPnNlYy0+c2hfc2l6ZSB8fCAhZWxm LT5zeW10YWItPnNlYy0+c2hfZW50c2l6ZSB8fAorICAgICAgICAgZWxmLT5zeW10YWItPnNlYy0+ c2hfZW50c2l6ZSAhPSBzaXplb2YoRWxmX1N5bSkgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhY RU5MT0dfREVCVUcsICIlcyVzOiBTeW1ib2wgdGFibGUgaGVhZGVyIGlzIGNvcnJ1cHRlZCFcbiIs CisgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVsZl9yZXNvbHZl X3NlY3Rpb25fbmFtZXMoc3RydWN0IHhzcGxpY2VfZWxmICplbGYsIGNvbnN0IHZvaWQgKmRhdGEp Cit7CisgICAgY29uc3QgY2hhciAqc2hzdHJ0YWI7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAg dW5zaWduZWQgaW50IG9mZnNldCwgZGVsdGE7CisKKyAgICAvKgorICAgICAqIFRoZSBlbGYtPnNl Y1swIC0+IGVfc2hudW1dIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIHZlcmlmaWVkIGJ5CisgICAgICog ZWxmX3Jlc29sdmVfc2VjdGlvbnMuIEZpbmQgZmlsZSBvZmZzZXQgZm9yIHNlY3Rpb24gc3RyaW5n IHRhYmxlLgorICAgICAqLworICAgIG9mZnNldCA9ICBlbGYtPnNlY1tlbGYtPmhkci0+ZV9zaHN0 cm5keF0uc2VjLT5zaF9vZmZzZXQ7CisKKyAgICBpZiAoIG9mZnNldCA+IGVsZi0+bGVuICkKKyAg ICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogc2hzdHJ0YWIgc2VjdGlv biBvZmZzZXQgKCV1KSBwYXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICBY U1BMSUNFLCBlbGYtPm5hbWUsIGVsZi0+aGRyLT5lX3Noc3RybmR4KTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorICAgIHNoc3RydGFiID0gKGRhdGEgKyBvZmZzZXQpOworCisgICAg LyogV2UgY291bGQgaWdub3JlIHRoZSBmaXJzdCBhcyBpdCBpcyByZXNlcnZlZC4uICovCisgICAg Zm9yICggaSA9IDA7IGkgPCBlbGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAgICAg IGRlbHRhID0gZWxmLT5zZWNbaV0uc2VjLT5zaF9uYW1lOworCisgICAgICAgIGlmICggb2Zmc2V0 ICsgZGVsdGEgPiBlbGYtPmxlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRwcmludGsoWEVO TE9HX0RFQlVHLCAiJXMlczogc2hzdHJ0YWIgWyVkXSBkYXRhIGlzIHBhc3QgZW5kIG9mIHBheWxv YWQhXG4iLAorICAgICAgICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5hbWUsIGkpOworICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICAgICAgZWxmLT5zZWNbaV0u bmFtZSA9IHNoc3RydGFiICsgZGVsdGE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGVsZl9nZXRfc3ltKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBjb25zdCB2b2lkICpk YXRhKQoreworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnN5bXRhYl9zZWMsICpzdHJ0YWJf c2VjOworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0gKnN5bTsKKyAgICB1bnNpZ25lZCBpbnQg aSwgZGVsdGEsIG9mZnNldCwgbnN5bTsKKworICAgIHN5bXRhYl9zZWMgPSBlbGYtPnN5bXRhYjsK KworICAgIHN0cnRhYl9zZWMgPSBlbGYtPnN0cnRhYjsKKworICAgIC8qIFBvaW50ZXJzIGFyaXRo bWV0aWMgdG8gZ2V0IGZpbGUgb2Zmc2V0LiAqLworICAgIG9mZnNldCA9IHN0cnRhYl9zZWMtPmRh dGEgLSBkYXRhOworCisgICAgQVNTRVJUKCBvZmZzZXQgPT0gc3RydGFiX3NlYy0+c2VjLT5zaF9v ZmZzZXQgKTsKKworICAgIC8qIHN5bXRhYl9zZWMtPmRhdGEgd2FzIGNvbXB1dGVkIGluIGVsZl9y ZXNvbHZlX3NlY3Rpb25zLiAqLworICAgIEFTU0VSVCgoc3ltdGFiX3NlYy0+c2VjLT5zaF9vZmZz ZXQgKyBkYXRhKSA9PSBzeW10YWJfc2VjLT5kYXRhICk7CisKKyAgICAvKiBObyBuZWVkIHRvIGNo ZWNrIHZhbHVlcyBhcyBlbGZfcmVzb2x2ZV9zZWN0aW9ucyBkaWQgaXQuICovCisgICAgbnN5bSA9 IHN5bXRhYl9zZWMtPnNlYy0+c2hfc2l6ZSAvIHN5bXRhYl9zZWMtPnNlYy0+c2hfZW50c2l6ZTsK KworICAgIHN5bSA9IHhtYWxsb2NfYXJyYXkoc3RydWN0IHhzcGxpY2VfZWxmX3N5bSwgbnN5bSk7 CisgICAgaWYgKCAhc3ltICkKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICIlcyVz OiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzeW1ib2xzXG4iLAorICAgICAgICAgICAg ICAgWFNQTElDRSwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQor CisgICAgLyogU28gd2UgZG9uJ3QgbGVhayBtZW1vcnkuICovCisgICAgZWxmLT5zeW0gPSBzeW07 CisgICAgZm9yICggaSA9IDA7IGkgPCBuc3ltOyBpKysgKQorICAgIHsKKyAgICAgICAgRWxmX1N5 bSAqczsKKworICAgICAgICBpZiAoIGkgKiBzaXplb2YoRWxmX1N5bSkgPiBlbGYtPmxlbiApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogU3ltYm9s IGhlYWRlciBbJWRdIGlzIHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAgICAgICAgICAg ICAgICBYU1BMSUNFLCBlbGYtPm5hbWUsIGkpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisgICAgICAgIH0KKyAgICAgICAgcyA9ICYoKEVsZl9TeW0gKilzeW10YWJfc2VjLT5kYXRhKVtp XTsKKworICAgICAgICAvKiBJZiBzdC0+bmFtZSBpcyBTVE5fVU5ERUYgaXMgemVybywgdGhlIGNo ZWNrIHdpbGwgYWx3YXlzIGJlIHRydWUuICovCisgICAgICAgIGRlbHRhID0gcy0+c3RfbmFtZTsK KworICAgICAgICAvKiBPZmZzZXQgaGFzIGJlZW4gY29tcHV0ZWQgZWFybGllci4gKi8KKyAgICAg ICAgaWYgKCBvZmZzZXQgKyBkZWx0YSA+IGVsZi0+bGVuICkKKyAgICAgICAgeworICAgICAgICAg ICAgZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBTeW1ib2wgWyV1XSBkYXRhIGlzIHBhc3Qg ZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAgICAgICAgICAgICAgICBYU1BMSUNFLCBlbGYtPm5h bWUsIGkpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICAgICAg c3ltW2ldLnN5bSA9IHM7CisgICAgICAgIGlmICggcy0+c3RfbmFtZSA9PSBTVE5fVU5ERUYgKQor ICAgICAgICAgICAgc3ltW2ldLm5hbWUgPSBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAg ICBzeW1baV0ubmFtZSA9IGRhdGEgKyAoIGRlbHRhICsgb2Zmc2V0ICk7CisgICAgfQorICAgIGVs Zi0+bnN5bSA9IG5zeW07CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4c3BsaWNl X2hlYWRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZikKK3sKKyAgICBpZiAo IHNpemVvZigqZWxmLT5oZHIpID49IGVsZi0+bGVuICkKKyAgICB7CisgICAgICAgIGRwcmludGso WEVOTE9HX0RFQlVHLCAiJXMlczogU2VjdGlvbiBoZWFkZXIgaXMgYmlnZ2VyIHRoYW4gcGF5bG9h ZCFcbiIsCisgICAgICAgICAgICAgICAgWFNQTElDRSwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaHN0cm5keCA9PSBT SE5fVU5ERUYgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsICIlcyVzOiBT ZWN0aW9uIG5hbWUgaWR4IGlzIHVuZGVmaW5lZCE/XG4iLAorICAgICAgICAgICAgICAgIFhTUExJ Q0UsIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIC8q IENoZWNrIHRoYXQgc2VjdGlvbiBuYW1lIGluZGV4IGlzIHdpdGhpbiB0aGUgc2VjdGlvbnMuICov CisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaHN0cm5keCA+IGVsZi0+aGRyLT5lX3NobnVtICkKKyAg ICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCAiJXMlczogU2VjdGlvbiBuYW1lIGlk eCAoJWQpIGlzIHBhc3QgZW5kIG9mICBzZWN0aW9ucyAoJWQpIVxuIiwKKyAgICAgICAgICAgICAg ICBYU1BMSUNFLCBlbGYtPm5hbWUsIGVsZi0+aGRyLT5lX3Noc3RybmR4LCBlbGYtPmhkci0+ZV9z aG51bSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggZWxmLT5o ZHItPmVfc2hudW0gPiA2NCApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywg IiVzJXM6IFRvbyBtYW55ICglZCkgc2VjdGlvbnMhXG4iLAorICAgICAgICAgICAgICAgIFhTUExJ Q0UsIGVsZi0+bmFtZSwgZWxmLT5oZHItPmVfc2hudW0pOworICAgICAgICByZXR1cm4gLUVJTlZB TDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHhzcGxpY2VfZWxmX2xvYWQoc3Ry dWN0IHhzcGxpY2VfZWxmICplbGYsIHZvaWQgKmRhdGEpCit7CisgICAgaW50IHJjOworCisgICAg ZWxmLT5oZHIgPSBkYXRhOworCisgICAgcmMgPSB4c3BsaWNlX2hlYWRlcl9jaGVjayhlbGYpOwor ICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9yZXNvbHZl X3NlY3Rpb25zKGVsZiwgZGF0YSk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsK KworICAgIHJjID0gZWxmX3Jlc29sdmVfc2VjdGlvbl9uYW1lcyhlbGYsIGRhdGEpOworICAgIGlm ICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9nZXRfc3ltKGVsZiwg ZGF0YSk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAw OworfQorCit2b2lkIHhzcGxpY2VfZWxmX2ZyZWUoc3RydWN0IHhzcGxpY2VfZWxmICplbGYpCit7 CisgICAgeGZyZWUoZWxmLT5zZWMpOworICAgIGVsZi0+c2VjID0gTlVMTDsKKyAgICB4ZnJlZShl bGYtPnN5bSk7CisgICAgZWxmLT5zeW0gPSBOVUxMOworICAgIGVsZi0+bnN5bSA9IDA7CisgICAg ZWxmLT5uYW1lID0gTlVMTDsKKyAgICBlbGYtPmxlbiA9IDA7Cit9CisKKy8qCisgKiBMb2NhbCB2 YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2lj LW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaCBiL3hlbi9p bmNsdWRlL3hlbi94c3BsaWNlLmgKaW5kZXggYjlmMDhjZC4uY2Q4MDVhOCAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5o CkBAIC0xMCw2ICsxMCw5IEBAIHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3A7CiAKICNpZmRl ZiBDT05GSUdfWFNQTElDRQogCisvKiBDb252ZW5pZW5jZSBkZWZpbmUgZm9yIHByaW50ay4gKi8K KyNkZWZpbmUgWFNQTElDRSAieHNwbGljZTogIgorCiBpbnQgeHNwbGljZV9vcChzdHJ1Y3QgeGVu X3N5c2N0bF94c3BsaWNlX29wICopOwogCiAjZWxzZQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv eGVuL3hzcGxpY2VfZWxmLmggYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZV9lbGYuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmRlYTE4Ci0tLSAvZGV2L251bGwKKysrIGIv eGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgMjAxNiBDaXRyaXggU3lzdGVtcyBSJkQgTHRkLgorICovCisKKyNpZm5kZWYg X19YRU5fWFNQTElDRV9FTEZfSF9fCisjZGVmaW5lIF9fWEVOX1hTUExJQ0VfRUxGX0hfXworCisj aW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVuL2VsZnN0cnVjdHMuaD4KKworLyog VGhlIGZvbGxvd2luZyBkZXNjcmliZXMgYW4gRWxmIGZpbGUgYXMgY29uc3VtZWQgYnkgeFNwbGlj ZS4gKi8KK3N0cnVjdCB4c3BsaWNlX2VsZl9zZWMgeworICAgIEVsZl9TaGRyICpzZWM7ICAgICAg ICAgICAgICAgICAvKiBIb29rZWQgdXAgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMuICovCisgICAg Y29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgIC8qIEh1bWFuIHJlYWRhYmxlIG5hbWUgaG9v a2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZl9yZXNvbHZl X3NlY3Rpb25fbmFtZXMuICovCisgICAgY29uc3Qgdm9pZCAqZGF0YTsgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gKGRvbmUgYnkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxmX3Jlc29sdmVfc2VjdGlvbnMpLiAqLworfTsKKworc3RydWN0IHhz cGxpY2VfZWxmX3N5bSB7CisgICAgRWxmX1N5bSAqc3ltOworICAgIGNvbnN0IGNoYXIgKm5hbWU7 Cit9OworCitzdHJ1Y3QgeHNwbGljZV9lbGYgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIHBheWxvYWQtPm5hbWUuICovCisgICAgc3NpemVfdCBsZW47 ICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgRUxGIGZpbGUuICovCisgICAgRWxm X0VoZHIgKmhkcjsgICAgICAgICAgICAgICAgIC8qIEVMRiBmaWxlLiAqLworICAgIHN0cnVjdCB4 c3BsaWNlX2VsZl9zZWMgKnNlYzsgICAvKiBBcnJheSBvZiBzZWN0aW9ucywgYWxsb2NhdGVkIGJ5 IHVzLiAqLworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0gKnN5bTsgICAvKiBBcnJheSBvZiBz eW1ib2xzICwgYWxsb2NhdGVkIGJ5IHVzLiAqLworICAgIHVuc2lnbmVkIGludCBuc3ltOworICAg IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnN5bXRhYjsvKiBQb2ludGVyIHRvIC5zeW10YWIgc2Vj dGlvbiAtIGFrYSB0byBzZWNbeF0uICovCisgICAgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqc3Ry dGFiOy8qIFBvaW50ZXIgdG8gLnN0cnRhYiBzZWN0aW9uIC0gYWthIHRvIHNlY1t5XS4gKi8KK307 CisKK3N0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnhzcGxpY2VfZWxmX3NlY19ieV9uYW1lKGNvbnN0 IHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgeHNwbGljZV9lbGZfbG9h ZChzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwgdm9pZCAqZGF0YSk7Cit2b2lkIHhzcGxpY2VfZWxm X2ZyZWUoc3RydWN0IHhzcGxpY2VfZWxmICplbGYpOworCisjZW5kaWYgLyogX19YRU5fWFNQTElD RV9FTEZfSF9fICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBj LWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi41LjAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=