From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v8 08/25] xsplice: Add helper elf routines Date: Wed, 13 Apr 2016 17:09:39 -0400 Message-ID: <1460581796-30071-9-git-send-email-konrad.wilk@oracle.com> References: <1460581796-30071-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 1aqS3N-0006Ew-4u for xen-devel@lists.xenproject.org; Wed, 13 Apr 2016 21:10:25 +0000 In-Reply-To: <1460581796-30071-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: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de 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 Y2xlLmNvbT4KQWNrZWQtYnk6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29t PgpSZXZpZXdlZC1ieTogQW5kcmV3IENvb3BlcjxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgot LS0KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJl dWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9yZz4K Q2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgoKdjI6IC0gV2l0aCB0aGUgI2RlZmluZSBFTEZT SVpFIGluIHRoZSBBUk0gZmlsZSB3ZSBjYW4gdXNlIHRoZSBjb21tb24KICAgICAjZGVmaW5lcyBp bnN0ZWFkIG9mIHVzaW5nICNpZmRlZiBDT05GSUdfQVJNXzMyLiBNb3ZlZCB0byBhbm90aGVyCiAg ICBwYXRjaC4KICAgIC0gQWRkIGNoZWNrcyBmb3IgRUxGIGZpbGUuCiAgICAtIEFkZCBuYW1lIHRv IGJlIHByaW50ZWQuCiAgICAtIEFkZCBsZW4gZm9yIGVhc2llciBFTEYgY2hlY2tzLgogICAgLSBF eHBhbmQgb24gdGhlIGNoZWNrcy4gQWRkIG1hY3JvLgp2MzogUmVtb3ZlIHRoZSByZXR1cm5fIG1h Y3JvCiAgLSBBZGQgcmV0dXJuXyBtYWNybyBiYWNrIGJ1dCBtYWtlIGl0IGRlcGVuZCBvbiBkZWJ1 Zz15CiAgLSBQZXIgQW5kcmV3IHJldmlldzogYWRkIGxvY2FsIHZhcmlhYmxlLiBGaXggbWVtb3J5 IGxlYWsgaW4KICAgIGVsZl9yZXNvbHZlX3NlY3Rpb25zLCBSZW1vdmUgbWFjcm8gYW5kIHVzZSBk cHJpbnRrLiBGaXggYWxpZ25tZW50LgogICAgVXNlIHZvaWQqIGluc3RlYWQgb2YgdWludDhfdCB0 byBoYW5kbGUgcmF3IHBheWxvYWQuCnY0IC0gRml4IG1lbW9yeSBsZWFrIGluIGVsZl9nZXRfc3lt CiAgLSBBZGQgWFNQTElDRSB0byBwcmludGsvZHByaW50awp2NTogU3ByaW5rbGUgbmV3bGluZXMu CnY2OiBTcXVhc2ggdGhlIEVMRiBoZWFkZXIgY2hlY2tzIGZyb20gJ3hzcGxpY2U6IEltcGxlbWVu dCBwYXlsb2FkIGxvYWRpbmcnIGhlcmUsCiAgICBEbyBiZXR0ZXIgam9iIGF0IGNoZWNraW5nIHN0 cmluZyBzZWN0aW9ucyBhbmQgdGhlIHVzZXJzIG9mIHRoZW0gKHNoX3NpemUpLAogICAgVXNlIFhT UExJQ0UgYXMgYSBzdHJpbmcgbGl0ZXJhbCwKICAgIE1vdmUgc29tZSBjaGVja3Mgb3V0c2lkZSB0 aGUgbG9vcCwKICAgIE1ha2Ugc3VyZSB0aGF0IFNIVF9TVFJUQUIgYXJlIHJlYWxseSB3aGF0IHRo ZXkgc2F5CiAgICBTcHJpbmtsZSBjb25zdHMuCnY3OgogICAgQ2hlY2sgc2hfZW50c2l6ZSBhbmQg c2hfb2Zmc2V0LgogICAgQWRkZWQgQW5kcmV3J3MgUmV2aWV3ZWQtYnkgYW5kIElhbidzIEFja2Vk LWJ5CiAgICBSZWRvIGNoZWNrIG9uIHNoX2VudHNpemUgdG8gbm90IGJlICE9CnY4OiBNYWtlIGFs bCB0aGUgZHByaW50ayhYRU5MT0dfREVCVUcgYmUgWEVOTE9HX0VSUgotLS0KLS0tCiB4ZW4vY29t bW9uL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiB4ZW4vY29tbW9uL3hzcGxpY2VfZWxmLmMg ICAgICB8IDM2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhl bi9pbmNsdWRlL3hlbi94c3BsaWNlLmggICAgIHwgICAzICsKIHhlbi9pbmNsdWRlL3hlbi94c3Bs aWNlX2VsZi5oIHwgIDUxICsrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9jb21tb24veHNwbGljZV9lbGYuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi94c3BsaWNlX2VsZi5oCgpkaWZmIC0tZ2l0IGEveGVu L2NvbW1vbi9NYWtlZmlsZSBiL3hlbi9jb21tb24vTWFrZWZpbGUKaW5kZXggMWU0YmM3MC4uYWZk ODRiNiAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9NYWtlZmlsZQorKysgYi94ZW4vY29tbW9uL01h a2VmaWxlCkBAIC01OSw2ICs1OSw3IEBAIG9iai15ICs9IHdhaXQubwogb2JqLSQoQ09ORklHX1hF Tk9QUk9GKSArPSB4ZW5vcHJvZi5vCiBvYmoteSArPSB4bWFsbG9jX3Rsc2Yubwogb2JqLSQoQ09O RklHX1hTUExJQ0UpICs9IHhzcGxpY2Uubworb2JqLSQoQ09ORklHX1hTUExJQ0UpICs9IHhzcGxp Y2VfZWxmLm8KIAogb2JqLWJpbi0kKENPTkZJR19YODYpICs9ICQoZm9yZWFjaCBuLGRlY29tcHJl c3MgYnVuemlwMiB1bnh6IHVubHptYSB1bmx6byB1bmx6NCBlYXJseWNwaW8sJChuKS5pbml0Lm8p CiAKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24veHNwbGljZV9lbGYuYyBiL3hlbi9jb21tb24veHNw bGljZV9lbGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk2Yjc4Ci0t LSAvZGV2L251bGwKKysrIGIveGVuL2NvbW1vbi94c3BsaWNlX2VsZi5jCkBAIC0wLDAgKzEsMzYw IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENpdHJpeCBTeXN0ZW1zIFImRCBMdGQuCisg Ki8KKworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNs dWRlIDx4ZW4veHNwbGljZV9lbGYuaD4KKyNpbmNsdWRlIDx4ZW4veHNwbGljZS5oPgorCitjb25z dCBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICp4c3BsaWNlX2VsZl9zZWNfYnlfbmFtZShjb25zdCBz dHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgdW5zaWduZWQg aW50IGk7CisKKyAgICBmb3IgKCBpID0gMTsgaSA8IGVsZi0+aGRyLT5lX3NobnVtOyBpKysgKQor ICAgIHsKKyAgICAgICAgaWYgKCAhc3RyY21wKG5hbWUsIGVsZi0+c2VjW2ldLm5hbWUpICkKKyAg ICAgICAgICAgIHJldHVybiAmZWxmLT5zZWNbaV07CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyBpbnQgZWxmX3ZlcmlmeV9zdHJ0YWIoY29uc3Qgc3RydWN0IHhzcGxpY2Vf ZWxmX3NlYyAqc2VjKQoreworICAgIGNvbnN0IEVsZl9TaGRyICpzOworICAgIGNvbnN0IHVpbnQ4 X3QgKmNvbnRlbnRzOworCisgICAgcyA9IHNlYy0+c2VjOworCisgICAgaWYgKCBzLT5zaF90eXBl ICE9IFNIVF9TVFJUQUIgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICggIXMt PnNoX3NpemUgKQorICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisKKyAgICBjb250ZW50cyA9 IChjb25zdCB1aW50OF90ICopc2VjLT5kYXRhOworCisgICAgaWYgKCBjb250ZW50c1swXSB8fCBj b250ZW50c1tzLT5zaF9zaXplIC0gMV0gKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVsZl9yZXNvbHZlX3NlY3Rpb25zKHN0cnVjdCB4 c3BsaWNlX2VsZiAqZWxmLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCB4c3BsaWNl X2VsZl9zZWMgKnNlYzsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBFbGZfT2ZmIGRlbHRhOwor ICAgIGludCByYzsKKworICAgIC8qIHhzcGxpY2VfZWxmX2xvYWQgc2FuaXR5IGNoZWNrZWQgZV9z aG51bS4gKi8KKyAgICBzZWMgPSB4bWFsbG9jX2FycmF5KHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMs IGVsZi0+aGRyLT5lX3NobnVtKTsKKyAgICBpZiAoICFzZWMgKQorICAgIHsKKyAgICAgICAgZHBy aW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZv ciBzZWN0aW9uIHRhYmxlIVxuIiwKKyAgICAgICAgICAgICAgIGVsZi0+bmFtZSk7CisgICAgICAg IHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIGVsZi0+c2VjID0gc2VjOworCisgICAgZGVs dGEgPSBlbGYtPmhkci0+ZV9zaG9mZiArIGVsZi0+aGRyLT5lX3NobnVtICogZWxmLT5oZHItPmVf c2hlbnRzaXplOworICAgIGlmICggZGVsdGEgPiBlbGYtPmxlbiApCisgICAgeworICAgICAgICAg ICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogU2VjdGlvbiB0YWJsZSBpcyBwYXN0 IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGZvciAoIGkgPSAxOyBpIDwg ZWxmLT5oZHItPmVfc2hudW07IGkrKyApCisgICAgeworICAgICAgICBkZWx0YSA9IGVsZi0+aGRy LT5lX3Nob2ZmICsgaSAqIGVsZi0+aGRyLT5lX3NoZW50c2l6ZTsKKworICAgICAgICBzZWNbaV0u c2VjID0gKHZvaWQgKilkYXRhICsgZGVsdGE7CisKKyAgICAgICAgZGVsdGEgPSBzZWNbaV0uc2Vj LT5zaF9vZmZzZXQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTi5CLiBlbGZfcmVzb2x2ZV9z ZWN0aW9uX25hbWVzLCBlbGZfZ2V0X3N5bSBza2lwIHRoaXMgY2hlY2sgYXMKKyAgICAgICAgICog d2UgZG8gaXQgaGVyZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggZGVsdGEgJiYgKGRlbHRh ICsgc2VjW2ldLnNlYy0+c2hfc2l6ZSA+IGVsZi0+bGVuKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFNlY3Rpb24gWyV1XSBkYXRhIGlz IHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAgICAgICAgICAgICAgICBlbGYtPm5hbWUs IGkpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICBz ZWNbaV0uZGF0YSA9IGRhdGEgKyBkZWx0YTsKKyAgICAgICAgLyogTmFtZSBpcyBwb3B1bGF0ZWQg aW4geHNwbGljZV9lbGZfc2VjdGlvbnNfbmFtZS4gKi8KKyAgICAgICAgc2VjW2ldLm5hbWUgPSBO VUxMOworCisgICAgICAgIGlmICggc2VjW2ldLnNlYy0+c2hfdHlwZSA9PSBTSFRfU1lNVEFCICkK KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBlbGYtPnN5bXRhYiApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogVW5zdXBw b3J0ZWQgbXVsdGlwbGUgc3ltYm9sIHRhYmxlcyFcbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICBlbGYtPm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgZWxmLT5zeW10YWIgPSAmc2VjW2ldOworCisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogZWxmLT5zeW10YWItPnNlYy0+c2hfbGluayB3b3VsZCBw b2ludCB0byB0aGUgcmlnaHQgc2VjdGlvbgorICAgICAgICAgICAgICogYnV0IHdlIGhhZG4ndCBm aW5pc2hlZCBwYXJzaW5nIGFsbCB0aGUgc2VjdGlvbnMuCisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGlmICggZWxmLT5zeW10YWItPnNlYy0+c2hfbGluayA+IGVsZi0+aGRyLT5lX3NobnVt ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhT UExJQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogU3ltYm9sIHRhYmxlIGlkeCAoJXUp IHRvIHN0cnRhYiBwYXN0IGVuZCAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxm LT5uYW1lLCBlbGYtPnN5bXRhYi0+c2VjLT5zaF9saW5rLAorICAgICAgICAgICAgICAgICAgICAg ICAgZWxmLT5oZHItPmVfc2hudW0pOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCAhZWxmLT5zeW10YWIg KQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogTm8gc3lt Ym9sIHRhYmxlIGZvdW5kIVxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoICFlbGYtPnN5bXRhYi0+c2VjLT5z aF9zaXplIHx8CisgICAgICAgICBlbGYtPnN5bXRhYi0+c2VjLT5zaF9lbnRzaXplIDwgc2l6ZW9m KEVsZl9TeW0pICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAi JXM6IFN5bWJvbCB0YWJsZSBoZWFkZXIgaXMgY29ycnVwdGVkIVxuIiwKKyAgICAgICAgICAgICAg ICBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICAvKgor ICAgICAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBTSFRfU1RSVEFCICguc2hzdHJ0YWIsIC5zdHJ0 YWIpIHNvIHBpY2sgb25lCisgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzeW1ib2wgdGFibGUu CisgICAgICovCisgICAgZWxmLT5zdHJ0YWIgPSAmc2VjW2VsZi0+c3ltdGFiLT5zZWMtPnNoX2xp bmtdOworCisgICAgcmMgPSBlbGZfdmVyaWZ5X3N0cnRhYihlbGYtPnN0cnRhYik7CisgICAgaWYg KCByYyApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBT dHJpbmcgdGFibGUgc2VjdGlvbiBpcyBjb3JydXB0ZWRcbiIsCisgICAgICAgICAgICAgICAgZWxm LT5uYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZWxmX3Jl c29sdmVfc2VjdGlvbl9uYW1lcyhzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwgY29uc3Qgdm9pZCAq ZGF0YSkKK3sKKyAgICBjb25zdCBjaGFyICpzaHN0cnRhYjsKKyAgICB1bnNpZ25lZCBpbnQgaTsK KyAgICBFbGZfT2ZmIG9mZnNldCwgZGVsdGE7CisgICAgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAq c2VjOworICAgIGludCByYzsKKworICAgIC8qCisgICAgICogVGhlIGVsZi0+c2VjWzAgLT4gZV9z aG51bV0gc3RydWN0dXJlcyBoYXZlIGJlZW4gdmVyaWZpZWQgYnkKKyAgICAgKiBlbGZfcmVzb2x2 ZV9zZWN0aW9ucy4gRmluZCBmaWxlIG9mZnNldCBmb3Igc2VjdGlvbiBzdHJpbmcgdGFibGUKKyAg ICAgKiAobm9ybWFsbHkgY2FsbGVkIC5zaHN0cnRhYikKKyAgICAgKi8KKyAgICBzZWMgPSAmZWxm LT5zZWNbZWxmLT5oZHItPmVfc2hzdHJuZHhdOworCisgICAgcmMgPSBlbGZfdmVyaWZ5X3N0cnRh YihzZWMpOworICAgIGlmICggcmMgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJS LCBYU1BMSUNFICIlczogU2VjdGlvbiBzdHJpbmcgdGFibGUgaXMgY29ycnVwdGVkXG4iLAorICAg ICAgICAgICAgICAgIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAg ICAvKiBWZXJpZmllZCBpbiBlbGZfcmVzb2x2ZV9zZWN0aW9ucyBidXQganVzdCBpbiBjYXNlLiAq LworICAgIG9mZnNldCA9IHNlYy0+c2VjLT5zaF9vZmZzZXQ7CisgICAgQVNTRVJUKG9mZnNldCA8 IGVsZi0+bGVuICYmIChvZmZzZXQgKyBzZWMtPnNlYy0+c2hfc2l6ZSA8PSBlbGYtPmxlbikpOwor CisgICAgc2hzdHJ0YWIgPSBkYXRhICsgb2Zmc2V0OworCisgICAgZm9yICggaSA9IDE7IGkgPCBl bGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAgICAgIGRlbHRhID0gZWxmLT5zZWNb aV0uc2VjLT5zaF9uYW1lOworCisgICAgICAgIGlmICggZGVsdGEgJiYgZGVsdGEgPj0gc2VjLT5z ZWMtPnNoX3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIs IFhTUExJQ0UgIiVzOiBzaHN0cnRhYiBbJXVdIGRhdGEgaXMgcGFzdCBlbmQgb2YgcGF5bG9hZCFc biIsCisgICAgICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwgaSk7CisgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGVsZi0+c2VjW2ldLm5hbWUgPSBzaHN0 cnRhYiArIGRlbHRhOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVs Zl9nZXRfc3ltKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBjb25zdCB2b2lkICpkYXRhKQorewor ICAgIGNvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnN5bXRhYl9zZWMsICpzdHJ0YWJfc2Vj OworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0gKnN5bTsKKyAgICB1bnNpZ25lZCBpbnQgaSwg ZGVsdGEsIG9mZnNldCwgbnN5bTsKKworICAgIHN5bXRhYl9zZWMgPSBlbGYtPnN5bXRhYjsKKyAg ICBzdHJ0YWJfc2VjID0gZWxmLT5zdHJ0YWI7CisKKyAgICAvKiBQb2ludGVycyBhcml0aG1ldGlj IHRvIGdldCBmaWxlIG9mZnNldC4gKi8KKyAgICBvZmZzZXQgPSBzdHJ0YWJfc2VjLT5kYXRhIC0g ZGF0YTsKKworICAgIC8qIENoZWNrZWQgYWxyZWFkeSBpbiBlbGZfcmVzb2x2ZV9zZWN0aW9ucywg YnV0IGp1c3QgaW4gY2FzZS4gKi8KKyAgICBBU1NFUlQob2Zmc2V0ID09IHN0cnRhYl9zZWMtPnNl Yy0+c2hfb2Zmc2V0KTsKKyAgICBBU1NFUlQob2Zmc2V0IDwgZWxmLT5sZW4gJiYgKG9mZnNldCAr IHN0cnRhYl9zZWMtPnNlYy0+c2hfc2l6ZSA8PSBlbGYtPmxlbikpOworCisgICAgLyogc3ltdGFi X3NlYy0+ZGF0YSB3YXMgY29tcHV0ZWQgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMuICovCisgICAg QVNTRVJUKChzeW10YWJfc2VjLT5zZWMtPnNoX29mZnNldCArIGRhdGEpID09IHN5bXRhYl9zZWMt PmRhdGEpOworCisgICAgLyogTm8gbmVlZCB0byBjaGVjayB2YWx1ZXMgYXMgZWxmX3Jlc29sdmVf c2VjdGlvbnMgZGlkIGl0LiAqLworICAgIG5zeW0gPSBzeW10YWJfc2VjLT5zZWMtPnNoX3NpemUg LyBzeW10YWJfc2VjLT5zZWMtPnNoX2VudHNpemU7CisKKyAgICBzeW0gPSB4bWFsbG9jX2FycmF5 KHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0sIG5zeW0pOworICAgIGlmICggIXN5bSApCisgICAgewor ICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBDb3VsZCBub3QgYWxsb2Nh dGUgbWVtb3J5IGZvciBzeW1ib2xzXG4iLAorICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAg ICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgLyogU28gd2UgZG9uJ3QgbGVhayBt ZW1vcnkuICovCisgICAgZWxmLT5zeW0gPSBzeW07CisKKyAgICBmb3IgKCBpID0gMTsgaSA8IG5z eW07IGkrKyApCisgICAgeworICAgICAgICBFbGZfU3ltICpzID0gJigoRWxmX1N5bSAqKXN5bXRh Yl9zZWMtPmRhdGEpW2ldOworCisgICAgICAgIC8qIElmIHN0LT5uYW1lIGlzIFNUTl9VTkRFRiB6 ZXJvLCB0aGUgY2hlY2sgd2lsbCBhbHdheXMgYmUgdHJ1ZS4gKi8KKyAgICAgICAgZGVsdGEgPSBz LT5zdF9uYW1lOworCisgICAgICAgIGlmICggZGVsdGEgJiYgKGRlbHRhID4gc3RydGFiX3NlYy0+ c2VjLT5zaF9zaXplKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0VS UiwgWFNQTElDRSAiJXM6IFN5bWJvbCBbJXVdIGRhdGEgaXMgcGFzdCBlbmQgb2YgcGF5bG9hZCFc biIsCisgICAgICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwgaSk7CisgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIHN5bVtpXS5zeW0gPSBzOworICAgICAg ICBzeW1baV0ubmFtZSA9IGRhdGEgKyAoZGVsdGEgKyBvZmZzZXQpOworICAgIH0KKyAgICBlbGYt Pm5zeW0gPSBuc3ltOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHNwbGljZV9o ZWFkZXJfY2hlY2soY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmICplbGYpCit7CisgICAgY29uc3Qg RWxmX0VoZHIgKmhkciA9IGVsZi0+aGRyOworCisgICAgaWYgKCBzaXplb2YoKmVsZi0+aGRyKSA+ IGVsZi0+bGVuICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAi JXM6IFNlY3Rpb24gaGVhZGVyIGlzIGJpZ2dlciB0aGFuIHBheWxvYWQhXG4iLAorICAgICAgICAg ICAgICAgIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IGlmICggIUlTX0VMRigqaGRyKSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIs IFhTUExJQ0UgIiVzOiBOb3QgYW4gRUxGIHBheWxvYWQhXG4iLCBlbGYtPm5hbWUpOworICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIGhkci0+ZV9pZGVudFtFSV9DTEFT U10gIT0gRUxGQ0xBU1M2NCB8fAorICAgICAgICAgaGRyLT5lX2lkZW50W0VJX0RBVEFdICE9IEVM RkRBVEEyTFNCIHx8CisgICAgICAgICBoZHItPmVfaWRlbnRbRUlfT1NBQkldICE9IEVMRk9TQUJJ X1NZU1YgfHwKKyAgICAgICAgIGhkci0+ZV90eXBlICE9IEVUX1JFTCB8fAorICAgICAgICAgaGRy LT5lX3BobnVtICE9IDAgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BM SUNFICIlczogSW52YWxpZCBFTEYgcGF5bG9hZCFcbiIsIGVsZi0+bmFtZSk7CisgICAgICAgIHJl dHVybiAtRU9QTk9UU1VQUDsKKyAgICB9CisKKyAgICBpZiAoIGVsZi0+aGRyLT5lX3Noc3RybmR4 ID09IFNITl9VTkRFRiApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJ Q0UgIiVzOiBTZWN0aW9uIG5hbWUgaWR4IGlzIHVuZGVmaW5lZCE/XG4iLAorICAgICAgICAgICAg ICAgIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIC8q IENoZWNrIHRoYXQgc2VjdGlvbiBuYW1lIGluZGV4IGlzIHdpdGhpbiB0aGUgc2VjdGlvbnMuICov CisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaHN0cm5keCA+PSBlbGYtPmhkci0+ZV9zaG51bSApCisg ICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIG5h bWUgaWR4ICgldSkgaXMgcGFzdCBlbmQgb2Ygc2VjdGlvbnMgKCV1KSFcbiIsCisgICAgICAgICAg ICAgICAgZWxmLT5uYW1lLCBlbGYtPmhkci0+ZV9zaHN0cm5keCwgZWxmLT5oZHItPmVfc2hudW0p OworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIGVsZi0+aGRyLT5l X3NobnVtID4gNjQgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNF ICIlczogVG9vIG1hbnkgKCV1KSBzZWN0aW9ucyFcbiIsCisgICAgICAgICAgICAgICAgZWxmLT5u YW1lLCBlbGYtPmhkci0+ZV9zaG51bSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0K KworICAgIGlmICggZWxmLT5oZHItPmVfc2hvZmYgPiBlbGYtPmxlbiApCisgICAgeworICAgICAg ICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBCb2d1cyBlX3Nob2ZmIVxuIiwgZWxm LT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCBlbGYt Pmhkci0+ZV9zaGVudHNpemUgPCBzaXplb2YoRWxmX1NoZHIpICkKKyAgICB7CisgICAgICAgIGRw cmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFNlY3Rpb24gaGVhZGVyIHNpemUgaXMgJXUh IEV4cGVjdGVkICV6dSE/XG4iLAorICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwgZWxmLT5oZHIt PmVfc2hlbnRzaXplLCBzaXplb2YoRWxmX1NoZHIpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgeHNwbGljZV9lbGZfbG9hZChzdHJ1Y3Qg eHNwbGljZV9lbGYgKmVsZiwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgcmM7CisKKyAg ICBlbGYtPmhkciA9IGRhdGE7CisKKyAgICByYyA9IHhzcGxpY2VfaGVhZGVyX2NoZWNrKGVsZik7 CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gZWxmX3Jlc29s dmVfc2VjdGlvbnMoZWxmLCBkYXRhKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJj OworCisgICAgcmMgPSBlbGZfcmVzb2x2ZV9zZWN0aW9uX25hbWVzKGVsZiwgZGF0YSk7CisgICAg aWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gZWxmX2dldF9zeW0oZWxm LCBkYXRhKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJu IDA7Cit9CisKK3ZvaWQgeHNwbGljZV9lbGZfZnJlZShzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZikK K3sKKyAgICB4ZnJlZShlbGYtPnNlYyk7CisgICAgZWxmLT5zZWMgPSBOVUxMOworICAgIHhmcmVl KGVsZi0+c3ltKTsKKyAgICBlbGYtPnN5bSA9IE5VTEw7CisgICAgZWxmLT5uc3ltID0gMDsKKyAg ICBlbGYtPm5hbWUgPSBOVUxMOworICAgIGVsZi0+bGVuID0gMDsKK30KKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oIGIveGVu L2luY2x1ZGUveGVuL3hzcGxpY2UuaAppbmRleCBiOWYwOGNkLi5jZDgwNWE4IDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNl LmgKQEAgLTEwLDYgKzEwLDkgQEAgc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9vcDsKIAogI2lm ZGVmIENPTkZJR19YU1BMSUNFCiAKKy8qIENvbnZlbmllbmNlIGRlZmluZSBmb3IgcHJpbnRrLiAq LworI2RlZmluZSBYU1BMSUNFICJ4c3BsaWNlOiAiCisKIGludCB4c3BsaWNlX29wKHN0cnVjdCB4 ZW5fc3lzY3RsX3hzcGxpY2Vfb3AgKik7CiAKICNlbHNlCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVk ZS94ZW4veHNwbGljZV9lbGYuaCBiL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlX2VsZi5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWNiNzcKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZV9lbGYuaApAQCAtMCwwICsxLDUxIEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE2IENpdHJpeCBTeXN0ZW1zIFImRCBMdGQuCisgKi8KKworI2lmbmRl ZiBfX1hFTl9YU1BMSUNFX0VMRl9IX18KKyNkZWZpbmUgX19YRU5fWFNQTElDRV9FTEZfSF9fCisK KyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vZWxmc3RydWN0cy5oPgorCisv KiBUaGUgZm9sbG93aW5nIGRlc2NyaWJlcyBhbiBFbGYgZmlsZSBhcyBjb25zdW1lZCBieSB4U3Bs aWNlLiAqLworc3RydWN0IHhzcGxpY2VfZWxmX3NlYyB7CisgICAgRWxmX1NoZHIgKnNlYzsgICAg ICAgICAgICAgICAgICAgICAgIC8qIEhvb2tlZCB1cCBpbiBlbGZfcmVzb2x2ZV9zZWN0aW9ucy4q LworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAvKiBIdW1hbiByZWFk YWJsZSBuYW1lIGhvb2tlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbGZfcmVzb2x2ZV9zZWN0aW9uX25hbWVzLiAqLworICAgIGNvbnN0IHZvaWQgKmRh dGE7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBzZWN0aW9uIChkb25lIGJ5 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZl9yZXNvbHZl X3NlY3Rpb25zKS4gKi8KK307CisKK3N0cnVjdCB4c3BsaWNlX2VsZl9zeW0geworICAgIEVsZl9T eW0gKnN5bTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IHhzcGxpY2VfZWxm IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byBwYXlsb2FkLT5uYW1lLiAqLworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMZW5ndGggb2YgdGhlIEVMRiBmaWxlLiAqLworICAgIGNvbnN0IEVsZl9FaGRyICpo ZHI7ICAgICAgICAgICAgICAgICAvKiBFTEYgZmlsZS4gKi8KKyAgICBzdHJ1Y3QgeHNwbGljZV9l bGZfc2VjICpzZWM7ICAgICAgICAgLyogQXJyYXkgb2Ygc2VjdGlvbnMsIGFsbG9jYXRlZCBieSB1 cy4gKi8KKyAgICBzdHJ1Y3QgeHNwbGljZV9lbGZfc3ltICpzeW07ICAgICAgICAgLyogQXJyYXkg b2Ygc3ltYm9scyAsIGFsbG9jYXRlZCBieSB1cy4gKi8KKyAgICB1bnNpZ25lZCBpbnQgbnN5bTsK KyAgICBjb25zdCBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICpzeW10YWI7LyogUG9pbnRlciB0byAu c3ltdGFiIHNlY3Rpb24gLSBha2EgdG8gc2VjW3hdLiAqLworICAgIGNvbnN0IHN0cnVjdCB4c3Bs aWNlX2VsZl9zZWMgKnN0cnRhYjsvKiBQb2ludGVyIHRvIC5zdHJ0YWIgc2VjdGlvbiAtIGFrYSB0 byBzZWNbeV0uICovCit9OworCitjb25zdCBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICp4c3BsaWNl X2VsZl9zZWNfYnlfbmFtZShjb25zdCBzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUpOworaW50IHhzcGxpY2VfZWxmX2xvYWQoc3RydWN0IHhzcGxpY2VfZWxmICplbGYsIGNv bnN0IHZvaWQgKmRhdGEpOwordm9pZCB4c3BsaWNlX2VsZl9mcmVlKHN0cnVjdCB4c3BsaWNlX2Vs ZiAqZWxmKTsKKworI2VuZGlmIC8qIF9fWEVOX1hTUExJQ0VfRUxGX0hfXyAqLworCisvKgorICog TG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICog Yy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTog bmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK