From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v9 10/27] xsplice: Add helper elf routines Date: Mon, 25 Apr 2016 11:34:57 -0400 Message-ID: <1461598514-5440-11-git-send-email-konrad.wilk@oracle.com> References: <1461598514-5440-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 1auiYP-0003zd-L9 for xen-devel@lists.xenproject.org; Mon, 25 Apr 2016 15:36:05 +0000 In-Reply-To: <1461598514-5440-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 bCB0aGUgZHByaW50ayhYRU5MT0dfREVCVUcgYmUgWEVOTE9HX0VSUgp2OTogQ2hhbmdlZCBlbGZf dmVyaWZ5X3N0cnRhYiB0byB1c2UgY29uc3QgY2hhciBhbmQgcmV0dXJuIEVJTlZBTC4KICAgIFJl bW92ZSAnaWYgKCAhZGVsdGEgKScgY2hlY2sgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMKICAgIFJl bW92ZSBzdGFsZSBjb21tZW50cy4KICAgIEZpeGVkIG9uZSBvZmYgY2hlY2sgYWdhaW5zdCAgc2hf bGluay4KICAgIERvY3VtZW50IGJvdW5kYXJ5IGNoZWNrcyBhZ2FpbnN0IHNoc3RydGFiIGFuZCBz eW10YWIuCiAgICBGaXhlZCByZXR1cm4gY29kZXMgaW4geHNwbGljZV9oZWFkZXJfY2hlY2suCiAg ICBBZGQgY2hlY2sgZm9yIHNlY3Rpb25zIHRvIG5vdCBiZSB3aXRoaW4gRUxGIGhlYWRlci4KICAg IEFkZGVkIG92ZXJmbG93IGNoZWNrIGZvciBlX3Nob2ZmIGluIHhzcGxpY2VfaGVhZGVyX2NoZWNr LgogICAgTW92ZWQgWFNQTElDRSBtYWNybyBieSBmb3VyIHRhYnMuCiAgICBNYWtlIC0+c3ltIGJl IGNvbnN0LgotLS0KIHhlbi9jb21tb24vTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHhlbi9j b21tb24veHNwbGljZV9lbGYuYyAgICAgIHwgMzYzICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaCAgICAgfCAgIDMgKwog eGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmggfCAgNTEgKysrKysrCiA0IGZpbGVzIGNoYW5n ZWQsIDQxOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2NvbW1vbi94c3Bs aWNlX2VsZi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxm LmgKCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL01ha2VmaWxlIGIveGVuL2NvbW1vbi9NYWtlZmls ZQppbmRleCAxZTRiYzcwLi5hZmQ4NGI2IDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL01ha2VmaWxl CisrKyBiL3hlbi9jb21tb24vTWFrZWZpbGUKQEAgLTU5LDYgKzU5LDcgQEAgb2JqLXkgKz0gd2Fp dC5vCiBvYmotJChDT05GSUdfWEVOT1BST0YpICs9IHhlbm9wcm9mLm8KIG9iai15ICs9IHhtYWxs b2NfdGxzZi5vCiBvYmotJChDT05GSUdfWFNQTElDRSkgKz0geHNwbGljZS5vCitvYmotJChDT05G SUdfWFNQTElDRSkgKz0geHNwbGljZV9lbGYubwogCiBvYmotYmluLSQoQ09ORklHX1g4NikgKz0g JChmb3JlYWNoIG4sZGVjb21wcmVzcyBidW56aXAyIHVueHogdW5sem1hIHVubHpvIHVubHo0IGVh cmx5Y3BpbywkKG4pLmluaXQubykKIApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi94c3BsaWNlX2Vs Zi5jIGIveGVuL2NvbW1vbi94c3BsaWNlX2VsZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjJmZDQ4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vY29tbW9uL3hzcGxpY2Vf ZWxmLmMKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2l0cml4 IFN5c3RlbXMgUiZEIEx0ZC4KKyAqLworCisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CisjaW5jbHVk ZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi94c3BsaWNlX2VsZi5oPgorI2luY2x1ZGUgPHhl bi94c3BsaWNlLmg+CisKK2NvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnhzcGxpY2VfZWxm X3NlY19ieV9uYW1lKGNvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFt ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoIGkgPSAxOyBpIDwgZWxmLT5o ZHItPmVfc2hudW07IGkrKyApCisgICAgeworICAgICAgICBpZiAoICFzdHJjbXAobmFtZSwgZWxm LT5zZWNbaV0ubmFtZSkgKQorICAgICAgICAgICAgcmV0dXJuICZlbGYtPnNlY1tpXTsKKyAgICB9 CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBlbGZfdmVyaWZ5X3N0cnRhYihj b25zdCBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICpzZWMpCit7CisgICAgY29uc3QgRWxmX1NoZHIg KnM7CisgICAgY29uc3QgY2hhciAqY29udGVudHM7CisKKyAgICBzID0gc2VjLT5zZWM7CisKKyAg ICBpZiAoIHMtPnNoX3R5cGUgIT0gU0hUX1NUUlRBQiApCisgICAgICAgIHJldHVybiAtRUlOVkFM OworCisgICAgaWYgKCAhcy0+c2hfc2l6ZSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisg ICAgY29udGVudHMgPSBzZWMtPmRhdGE7CisKKyAgICBpZiAoIGNvbnRlbnRzWzBdIHx8IGNvbnRl bnRzW3MtPnNoX3NpemUgLSAxXSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWxmX3Jlc29sdmVfc2VjdGlvbnMoc3RydWN0IHhzcGxp Y2VfZWxmICplbGYsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IHhzcGxpY2VfZWxm X3NlYyAqc2VjOworICAgIHVuc2lnbmVkIGludCBpOworICAgIEVsZl9PZmYgZGVsdGE7CisgICAg aW50IHJjOworCisgICAgLyogeHNwbGljZV9lbGZfbG9hZCBzYW5pdHkgY2hlY2tlZCBlX3NobnVt LiAqLworICAgIHNlYyA9IHhtYWxsb2NfYXJyYXkoc3RydWN0IHhzcGxpY2VfZWxmX3NlYywgZWxm LT5oZHItPmVfc2hudW0pOworICAgIGlmICggIXNlYyApCisgICAgeworICAgICAgICBkcHJpbnRr KFhFTkxPR19FUlIsIFhTUExJQ0UiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNl Y3Rpb24gdGFibGUhXG4iLAorICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0 dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgZWxmLT5zZWMgPSBzZWM7CisKKyAgICAvKiBlX3No b2ZmIGFuZCBlX3NobnVtIG92ZXJmbG93IGNoZWNrcyBhcmUgZG9uZSBpbiB4c3BsaWNlX2hlYWRl cl9jaGVjay4gKi8KKyAgICBkZWx0YSA9IGVsZi0+aGRyLT5lX3Nob2ZmICsgZWxmLT5oZHItPmVf c2hudW0gKiBlbGYtPmhkci0+ZV9zaGVudHNpemU7CisgICAgaWYgKCBkZWx0YSA+IGVsZi0+bGVu ICkKKyAgICB7CisgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBT ZWN0aW9uIHRhYmxlIGlzIHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAgICAgICAgICAg ICAgICBlbGYtPm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisg ICAgZm9yICggaSA9IDE7IGkgPCBlbGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAg ICAgIGRlbHRhID0gZWxmLT5oZHItPmVfc2hvZmYgKyBpICogZWxmLT5oZHItPmVfc2hlbnRzaXpl OworCisgICAgICAgIHNlY1tpXS5zZWMgPSBkYXRhICsgZGVsdGE7CisKKyAgICAgICAgZGVsdGEg PSBzZWNbaV0uc2VjLT5zaF9vZmZzZXQ7CisgICAgICAgIC8qCisgICAgICAgICAqIE4uQi4gZWxm X3Jlc29sdmVfc2VjdGlvbl9uYW1lcywgZWxmX2dldF9zeW0gc2tpcCB0aGlzIGNoZWNrIGFzCisg ICAgICAgICAqIHdlIGRvIGl0IGhlcmUuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGRlbHRh IDwgc2l6ZW9mKEVsZl9FaGRyKSB8fAorICAgICAgICAgICAgIChkZWx0YSArIHNlY1tpXS5zZWMt PnNoX3NpemUgPiBlbGYtPmxlbikgKQorICAgICAgICB7CisgICAgICAgICAgICBkcHJpbnRrKFhF TkxPR19FUlIsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIFsldV0gZGF0YSAlcyBvZiBwYXlsb2FkIVxu IiwKKyAgICAgICAgICAgICAgICAgICAgZWxmLT5uYW1lLCBpLAorICAgICAgICAgICAgICAgICAg ICBkZWx0YSA8PSBzaXplb2YoRWxmX0VoZHIpID8gImF0IEVMRiBoZWFkZXIiIDogImlzIHBhc3Qg ZW5kIik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAg IHNlY1tpXS5kYXRhID0gZGF0YSArIGRlbHRhOworICAgICAgICAvKiBOYW1lIGlzIHBvcHVsYXRl ZCBpbiBlbGZfcmVzb2x2ZV9zZWN0aW9uX25hbWVzLiAqLworICAgICAgICBzZWNbaV0ubmFtZSA9 IE5VTEw7CisKKyAgICAgICAgaWYgKCBzZWNbaV0uc2VjLT5zaF90eXBlID09IFNIVF9TWU1UQUIg KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGVsZi0+c3ltdGFiICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBVbnN1 cHBvcnRlZCBtdWx0aXBsZSBzeW1ib2wgdGFibGVzIVxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGVsZi0+bmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICBlbGYtPnN5bXRhYiA9ICZzZWNbaV07CisKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBlbGYtPnN5bXRhYi0+c2VjLT5zaF9saW5rIHdvdWxk IHBvaW50IHRvIHRoZSByaWdodCBzZWN0aW9uCisgICAgICAgICAgICAgKiBidXQgd2UgaGFkbid0 IGZpbmlzaGVkIHBhcnNpbmcgYWxsIHRoZSBzZWN0aW9ucy4KKyAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKCBlbGYtPnN5bXRhYi0+c2VjLT5zaF9saW5rID49IGVsZi0+aGRyLT5lX3No bnVtICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIs IFhTUExJQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogU3ltYm9sIHRhYmxlIGlkeCAo JXUpIHRvIHN0cnRhYiBwYXN0IGVuZCAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ZWxmLT5uYW1lLCBlbGYtPnN5bXRhYi0+c2VjLT5zaF9saW5rLAorICAgICAgICAgICAgICAgICAg ICAgICAgZWxmLT5oZHItPmVfc2hudW0pOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCAhZWxmLT5zeW10 YWIgKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogTm8g c3ltYm9sIHRhYmxlIGZvdW5kIVxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoICFlbGYtPnN5bXRhYi0+c2Vj LT5zaF9zaXplIHx8CisgICAgICAgICBlbGYtPnN5bXRhYi0+c2VjLT5zaF9lbnRzaXplIDwgc2l6 ZW9mKEVsZl9TeW0pIHx8CisgICAgICAgICBlbGYtPnN5bXRhYi0+c2VjLT5zaF9zaXplICUgZWxm LT5zeW10YWItPnNlYy0+c2hfZW50c2l6ZSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxP R19FUlIsIFhTUExJQ0UgIiVzOiBTeW1ib2wgdGFibGUgaGVhZGVyIGlzIGNvcnJ1cHRlZCFcbiIs CisgICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cisg ICAgfQorCisgICAgLyoKKyAgICAgKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgU0hUX1NUUlRBQiAo LnNoc3RydGFiLCAuc3RydGFiKSBzbyBwaWNrIHRoZSBvbmUKKyAgICAgKiBhc3NvY2lhdGVkIHdp dGggdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgKi8KKyAgICBlbGYtPnN0cnRhYiA9ICZzZWNbZWxm LT5zeW10YWItPnNlYy0+c2hfbGlua107CisKKyAgICByYyA9IGVsZl92ZXJpZnlfc3RydGFiKGVs Zi0+c3RydGFiKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9H X0VSUiwgWFNQTElDRSAiJXM6IFN0cmluZyB0YWJsZSBzZWN0aW9uIGlzIGNvcnJ1cHRlZFxuIiwK KyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30K Kworc3RhdGljIGludCBlbGZfcmVzb2x2ZV9zZWN0aW9uX25hbWVzKHN0cnVjdCB4c3BsaWNlX2Vs ZiAqZWxmLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIGNvbnN0IGNoYXIgKnNoc3RydGFiOwor ICAgIHVuc2lnbmVkIGludCBpOworICAgIEVsZl9PZmYgb2Zmc2V0LCBkZWx0YTsKKyAgICBzdHJ1 Y3QgeHNwbGljZV9lbGZfc2VjICpzZWM7CisgICAgaW50IHJjOworCisgICAgLyoKKyAgICAgKiBU aGUgZWxmLT5zZWNbMCAtPiBlX3NobnVtXSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiB2ZXJpZmllZCBi eQorICAgICAqIGVsZl9yZXNvbHZlX3NlY3Rpb25zLiBGaW5kIGZpbGUgb2Zmc2V0IGZvciBzZWN0 aW9uIHN0cmluZyB0YWJsZQorICAgICAqIChub3JtYWxseSBjYWxsZWQgLnNoc3RydGFiKQorICAg ICAqLworICAgIHNlYyA9ICZlbGYtPnNlY1tlbGYtPmhkci0+ZV9zaHN0cm5keF07CisKKyAgICBy YyA9IGVsZl92ZXJpZnlfc3RydGFiKHNlYyk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAg ICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIHN0cmluZyB0YWJsZSBp cyBjb3JydXB0ZWRcbiIsCisgICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIC8qIFZlcmlmaWVkIGluIGVsZl9yZXNvbHZlX3NlY3Rpb25z IGJ1dCBqdXN0IGluIGNhc2UuICovCisgICAgb2Zmc2V0ID0gc2VjLT5zZWMtPnNoX29mZnNldDsK KyAgICBBU1NFUlQob2Zmc2V0IDwgZWxmLT5sZW4gJiYgKG9mZnNldCArIHNlYy0+c2VjLT5zaF9z aXplIDw9IGVsZi0+bGVuKSk7CisKKyAgICBzaHN0cnRhYiA9IGRhdGEgKyBvZmZzZXQ7CisKKyAg ICBmb3IgKCBpID0gMTsgaSA8IGVsZi0+aGRyLT5lX3NobnVtOyBpKysgKQorICAgIHsKKyAgICAg ICAgZGVsdGEgPSBlbGYtPnNlY1tpXS5zZWMtPnNoX25hbWU7CisKKyAgICAgICAgLyogQm91bmRh cnkgY2hlY2sgb24gb2Zmc2V0IG9mIG5hbWUgd2l0aGluIHRoZSAuc2hzdHJ0YWIuICovCisgICAg ICAgIGlmICggZGVsdGEgPj0gc2VjLT5zZWMtPnNoX3NpemUgKQorICAgICAgICB7CisgICAgICAg ICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBzaHN0cnRhYiBbJXVdIGRhdGEg aXMgcGFzdCBlbmQgb2YgcGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAgICAgIGVsZi0+bmFt ZSwgaSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAg IGVsZi0+c2VjW2ldLm5hbWUgPSBzaHN0cnRhYiArIGRlbHRhOworICAgIH0KKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IGVsZl9nZXRfc3ltKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxm LCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIGNvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMg KnN5bXRhYl9zZWMsICpzdHJ0YWJfc2VjOworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0gKnN5 bTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgZGVsdGEsIG9mZnNldCwgbnN5bTsKKworICAgIHN5bXRh Yl9zZWMgPSBlbGYtPnN5bXRhYjsKKyAgICBzdHJ0YWJfc2VjID0gZWxmLT5zdHJ0YWI7CisKKyAg ICAvKiBQb2ludGVycyBhcml0aG1ldGljIHRvIGdldCBmaWxlIG9mZnNldC4gKi8KKyAgICBvZmZz ZXQgPSBzdHJ0YWJfc2VjLT5kYXRhIC0gZGF0YTsKKworICAgIC8qIENoZWNrZWQgYWxyZWFkeSBp biBlbGZfcmVzb2x2ZV9zZWN0aW9ucywgYnV0IGp1c3QgaW4gY2FzZS4gKi8KKyAgICBBU1NFUlQo b2Zmc2V0ID09IHN0cnRhYl9zZWMtPnNlYy0+c2hfb2Zmc2V0KTsKKyAgICBBU1NFUlQob2Zmc2V0 IDwgZWxmLT5sZW4gJiYgKG9mZnNldCArIHN0cnRhYl9zZWMtPnNlYy0+c2hfc2l6ZSA8PSBlbGYt PmxlbikpOworCisgICAgLyogc3ltdGFiX3NlYy0+ZGF0YSB3YXMgY29tcHV0ZWQgaW4gZWxmX3Jl c29sdmVfc2VjdGlvbnMuICovCisgICAgQVNTRVJUKChzeW10YWJfc2VjLT5zZWMtPnNoX29mZnNl dCArIGRhdGEpID09IHN5bXRhYl9zZWMtPmRhdGEpOworCisgICAgLyogTm8gbmVlZCB0byBjaGVj ayB2YWx1ZXMgYXMgZWxmX3Jlc29sdmVfc2VjdGlvbnMgZGlkIGl0LiAqLworICAgIG5zeW0gPSBz eW10YWJfc2VjLT5zZWMtPnNoX3NpemUgLyBzeW10YWJfc2VjLT5zZWMtPnNoX2VudHNpemU7CisK KyAgICBzeW0gPSB4bWFsbG9jX2FycmF5KHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0sIG5zeW0pOwor ICAgIGlmICggIXN5bSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJ Q0UgIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzeW1ib2xzXG4iLAorICAgICAg ICAgICAgICAgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisg ICAgLyogU28gd2UgZG9uJ3QgbGVhayBtZW1vcnkuICovCisgICAgZWxmLT5zeW0gPSBzeW07CisK KyAgICBmb3IgKCBpID0gMTsgaSA8IG5zeW07IGkrKyApCisgICAgeworICAgICAgICBFbGZfU3lt ICpzID0gJigoRWxmX1N5bSAqKXN5bXRhYl9zZWMtPmRhdGEpW2ldOworCisgICAgICAgIGRlbHRh ID0gcy0+c3RfbmFtZTsKKyAgICAgICAgLyogQm91bmRhcnkgY2hlY2sgd2l0aGluIHRoZSAuc3Ry dGFiLiAqLworICAgICAgICBpZiAoIGRlbHRhID4gc3RydGFiX3NlYy0+c2VjLT5zaF9zaXplICkK KyAgICAgICAgeworICAgICAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczog U3ltYm9sIFsldV0gZGF0YSBpcyBwYXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAg ICAgICAgICAgZWxmLT5uYW1lLCBpKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAg ICAgICB9CisKKyAgICAgICAgc3ltW2ldLnN5bSA9IHM7CisgICAgICAgIHN5bVtpXS5uYW1lID0g ZGF0YSArIChkZWx0YSArIG9mZnNldCk7CisgICAgfQorICAgIGVsZi0+bnN5bSA9IG5zeW07CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4c3BsaWNlX2hlYWRlcl9jaGVjayhjb25z dCBzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZikKK3sKKyAgICBjb25zdCBFbGZfRWhkciAqaGRyID0g ZWxmLT5oZHI7CisKKyAgICBpZiAoIHNpemVvZigqZWxmLT5oZHIpID4gZWxmLT5sZW4gKQorICAg IHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogU2VjdGlvbiBoZWFk ZXIgaXMgYmlnZ2VyIHRoYW4gcGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAgZWxmLT5uYW1l KTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAhSVNfRUxGKCpo ZHIpICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IE5v dCBhbiBFTEYgcGF5bG9hZCFcbiIsIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgIH0KKworICAgIGlmICggaGRyLT5lX2lkZW50W0VJX0NMQVNTXSAhPSBFTEZDTEFTUzY0 IHx8CisgICAgICAgICBoZHItPmVfaWRlbnRbRUlfREFUQV0gIT0gRUxGREFUQTJMU0IgfHwKKyAg ICAgICAgIGhkci0+ZV9pZGVudFtFSV9PU0FCSV0gIT0gRUxGT1NBQklfU1lTViB8fAorICAgICAg ICAgaGRyLT5lX3R5cGUgIT0gRVRfUkVMIHx8CisgICAgICAgICBoZHItPmVfcGhudW0gIT0gMCAp CisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBJbnZhbGlk IEVMRiBwYXlsb2FkIVxuIiwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQ OworICAgIH0KKworICAgIGlmICggZWxmLT5oZHItPmVfc2hzdHJuZHggPT0gU0hOX1VOREVGICkK KyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFNlY3Rpb24g bmFtZSBpZHggaXMgdW5kZWZpbmVkIT9cbiIsCisgICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCBzZWN0 aW9uIG5hbWUgaW5kZXggaXMgd2l0aGluIHRoZSBzZWN0aW9ucy4gKi8KKyAgICBpZiAoIGVsZi0+ aGRyLT5lX3Noc3RybmR4ID49IGVsZi0+aGRyLT5lX3NobnVtICkKKyAgICB7CisgICAgICAgIGRw cmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFNlY3Rpb24gbmFtZSBpZHggKCV1KSBpcyBw YXN0IGVuZCBvZiBzZWN0aW9ucyAoJXUpIVxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUs IGVsZi0+aGRyLT5lX3Noc3RybmR4LCBlbGYtPmhkci0+ZV9zaG51bSk7CisgICAgICAgIHJldHVy biAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggZWxmLT5oZHItPmVfc2hudW0gPiA2NCApCisg ICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBUb28gbWFueSAo JXUpIHNlY3Rpb25zIVxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUsIGVsZi0+aGRyLT5l X3NobnVtKTsKKyAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAgIH0KKworICAgIGlmICgg ZWxmLT5oZHItPmVfc2hvZmYgPiBVTE9OR19NQVggKQorICAgIHsKKyAgICAgICAgZHByaW50ayhY RU5MT0dfRVJSLCBYU1BMSUNFICIlczogQm9ndXMgZV9zaG9mZiFcbiIsIGVsZi0+bmFtZSk7Cisg ICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggZWxmLT5oZHItPmVfc2hl bnRzaXplIDwgc2l6ZW9mKEVsZl9TaGRyKSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxP R19FUlIsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIGhlYWRlciBzaXplIGlzICV1ISBFeHBlY3RlZCAl enUhP1xuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUsIGVsZi0+aGRyLT5lX3NoZW50c2l6 ZSwgc2l6ZW9mKEVsZl9TaGRyKSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAg ICByZXR1cm4gMDsKK30KKworaW50IHhzcGxpY2VfZWxmX2xvYWQoc3RydWN0IHhzcGxpY2VfZWxm ICplbGYsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaW50IHJjOworCisgICAgZWxmLT5oZHIg PSBkYXRhOworCisgICAgcmMgPSB4c3BsaWNlX2hlYWRlcl9jaGVjayhlbGYpOworICAgIGlmICgg cmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9yZXNvbHZlX3NlY3Rpb25z KGVsZiwgZGF0YSk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJj ID0gZWxmX3Jlc29sdmVfc2VjdGlvbl9uYW1lcyhlbGYsIGRhdGEpOworICAgIGlmICggcmMgKQor ICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9nZXRfc3ltKGVsZiwgZGF0YSk7Cisg ICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQorCit2 b2lkIHhzcGxpY2VfZWxmX2ZyZWUoc3RydWN0IHhzcGxpY2VfZWxmICplbGYpCit7CisgICAgeGZy ZWUoZWxmLT5zZWMpOworICAgIGVsZi0+c2VjID0gTlVMTDsKKyAgICB4ZnJlZShlbGYtPnN5bSk7 CisgICAgZWxmLT5zeW0gPSBOVUxMOworICAgIGVsZi0+bnN5bSA9IDA7CisgICAgZWxmLT5uYW1l ID0gTlVMTDsKKyAgICBlbGYtPmxlbiA9IDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAq LwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaCBiL3hlbi9pbmNsdWRlL3hl bi94c3BsaWNlLmgKaW5kZXggYjlmMDhjZC4uNzU1OTg3NyAxMDA2NDQKLS0tIGEveGVuL2luY2x1 ZGUveGVuL3hzcGxpY2UuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oCkBAIC0xMCw2 ICsxMCw5IEBAIHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3A7CiAKICNpZmRlZiBDT05GSUdf WFNQTElDRQogCisvKiBDb252ZW5pZW5jZSBkZWZpbmUgZm9yIHByaW50ay4gKi8KKyNkZWZpbmUg WFNQTElDRSAgICAgICAgICAgICAieHNwbGljZTogIgorCiBpbnQgeHNwbGljZV9vcChzdHJ1Y3Qg eGVuX3N5c2N0bF94c3BsaWNlX29wICopOwogCiAjZWxzZQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1 ZGUveGVuL3hzcGxpY2VfZWxmLmggYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZV9lbGYuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODZhYWYwCi0tLSAvZGV2L251bGwKKysr IGIveGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq IENvcHlyaWdodCAoQykgMjAxNiBDaXRyaXggU3lzdGVtcyBSJkQgTHRkLgorICovCisKKyNpZm5k ZWYgX19YRU5fWFNQTElDRV9FTEZfSF9fCisjZGVmaW5lIF9fWEVOX1hTUExJQ0VfRUxGX0hfXwor CisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVuL2VsZnN0cnVjdHMuaD4KKwor LyogVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgYW4gRWxmIGZpbGUgYXMgY29uc3VtZWQgYnkgeFNw bGljZS4gKi8KK3N0cnVjdCB4c3BsaWNlX2VsZl9zZWMgeworICAgIGNvbnN0IEVsZl9TaGRyICpz ZWM7ICAgICAgICAgICAgICAgICAvKiBIb29rZWQgdXAgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMu Ki8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgICAgLyogSHVtYW4gcmVh ZGFibGUgbmFtZSBob29rZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxmX3Jlc29sdmVfc2VjdGlvbl9uYW1lcy4gKi8KKyAgICBjb25zdCB2b2lkICpk YXRhOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byB0aGUgc2VjdGlvbiAoZG9uZSBi eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZfcmVzb2x2 ZV9zZWN0aW9ucykuICovCit9OworCitzdHJ1Y3QgeHNwbGljZV9lbGZfc3ltIHsKKyAgICBjb25z dCBFbGZfU3ltICpzeW07CisgICAgY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCB4c3Bs aWNlX2VsZiB7CisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXIgdG8gcGF5bG9hZC0+bmFtZS4gKi8KKyAgICBzaXplX3QgbGVuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBFTEYgZmlsZS4gKi8KKyAgICBjb25zdCBFbGZf RWhkciAqaGRyOyAgICAgICAgICAgICAgICAgLyogRUxGIGZpbGUuICovCisgICAgc3RydWN0IHhz cGxpY2VfZWxmX3NlYyAqc2VjOyAgICAgICAgIC8qIEFycmF5IG9mIHNlY3Rpb25zLCBhbGxvY2F0 ZWQgYnkgdXMuICovCisgICAgc3RydWN0IHhzcGxpY2VfZWxmX3N5bSAqc3ltOyAgICAgICAgIC8q IEFycmF5IG9mIHN5bWJvbHMgLCBhbGxvY2F0ZWQgYnkgdXMuICovCisgICAgdW5zaWduZWQgaW50 IG5zeW07CisgICAgY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqc3ltdGFiOy8qIFBvaW50 ZXIgdG8gLnN5bXRhYiBzZWN0aW9uIC0gYWthIHRvIHNlY1t4XS4gKi8KKyAgICBjb25zdCBzdHJ1 Y3QgeHNwbGljZV9lbGZfc2VjICpzdHJ0YWI7LyogUG9pbnRlciB0byAuc3RydGFiIHNlY3Rpb24g LSBha2EgdG8gc2VjW3ldLiAqLworfTsKKworY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAq eHNwbGljZV9lbGZfc2VjX2J5X25hbWUoY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmICplbGYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpuYW1lKTsKK2ludCB4c3BsaWNlX2VsZl9sb2FkKHN0cnVjdCB4c3BsaWNlX2VsZiAq ZWxmLCBjb25zdCB2b2lkICpkYXRhKTsKK3ZvaWQgeHNwbGljZV9lbGZfZnJlZShzdHJ1Y3QgeHNw bGljZV9lbGYgKmVsZik7CisKKyNlbmRpZiAvKiBfX1hFTl9YU1BMSUNFX0VMRl9IX18gKi8KKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjUuMAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==