From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v7 08/24] xsplice: Add helper elf routines Date: Sun, 10 Apr 2016 17:14:40 -0400 Message-ID: <1460322896-1115-9-git-send-email-konrad.wilk@oracle.com> References: <1460322896-1115-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 1apMhU-00087e-Ij for xen-devel@lists.xenproject.org; Sun, 10 Apr 2016 21:15:20 +0000 In-Reply-To: <1460322896-1115-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, konrad@kernel.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 LWJ5CiAgICBSZWRvIGNoZWNrIG9uIHNoX2VudHNpemUgdG8gbm90IGJlICE9Ci0tLQotLS0KIHhl bi9jb21tb24vTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHhlbi9jb21tb24veHNwbGljZV9l bGYuYyAgICAgIHwgMzYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogeGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaCAgICAgfCAgIDMgKwogeGVuL2luY2x1ZGUveGVu L3hzcGxpY2VfZWxmLmggfCAgNTEgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDQxNSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2NvbW1vbi94c3BsaWNlX2VsZi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmgKCmRpZmYgLS1naXQg YS94ZW4vY29tbW9uL01ha2VmaWxlIGIveGVuL2NvbW1vbi9NYWtlZmlsZQppbmRleCAxZTRiYzcw Li5hZmQ4NGI2IDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL01ha2VmaWxlCisrKyBiL3hlbi9jb21t b24vTWFrZWZpbGUKQEAgLTU5LDYgKzU5LDcgQEAgb2JqLXkgKz0gd2FpdC5vCiBvYmotJChDT05G SUdfWEVOT1BST0YpICs9IHhlbm9wcm9mLm8KIG9iai15ICs9IHhtYWxsb2NfdGxzZi5vCiBvYmot JChDT05GSUdfWFNQTElDRSkgKz0geHNwbGljZS5vCitvYmotJChDT05GSUdfWFNQTElDRSkgKz0g eHNwbGljZV9lbGYubwogCiBvYmotYmluLSQoQ09ORklHX1g4NikgKz0gJChmb3JlYWNoIG4sZGVj b21wcmVzcyBidW56aXAyIHVueHogdW5sem1hIHVubHpvIHVubHo0IGVhcmx5Y3BpbywkKG4pLmlu aXQubykKIApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi94c3BsaWNlX2VsZi5jIGIveGVuL2NvbW1v bi94c3BsaWNlX2VsZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTVj OTUKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vY29tbW9uL3hzcGxpY2VfZWxmLmMKQEAgLTAsMCAr MSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2l0cml4IFN5c3RlbXMgUiZEIEx0 ZC4KKyAqLworCisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgor I2luY2x1ZGUgPHhlbi94c3BsaWNlX2VsZi5oPgorI2luY2x1ZGUgPHhlbi94c3BsaWNlLmg+CisK K2NvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnhzcGxpY2VfZWxmX3NlY19ieV9uYW1lKGNv bnN0IHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICB1bnNp Z25lZCBpbnQgaTsKKworICAgIGZvciAoIGkgPSAxOyBpIDwgZWxmLT5oZHItPmVfc2hudW07IGkr KyApCisgICAgeworICAgICAgICBpZiAoICFzdHJjbXAobmFtZSwgZWxmLT5zZWNbaV0ubmFtZSkg KQorICAgICAgICAgICAgcmV0dXJuICZlbGYtPnNlY1tpXTsKKyAgICB9CisKKyAgICByZXR1cm4g TlVMTDsKK30KKworc3RhdGljIGludCBlbGZfdmVyaWZ5X3N0cnRhYihjb25zdCBzdHJ1Y3QgeHNw bGljZV9lbGZfc2VjICpzZWMpCit7CisgICAgY29uc3QgRWxmX1NoZHIgKnM7CisgICAgY29uc3Qg dWludDhfdCAqY29udGVudHM7CisKKyAgICBzID0gc2VjLT5zZWM7CisKKyAgICBpZiAoIHMtPnNo X3R5cGUgIT0gU0hUX1NUUlRBQiApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYg KCAhcy0+c2hfc2l6ZSApCisgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKworICAgIGNvbnRl bnRzID0gKGNvbnN0IHVpbnQ4X3QgKilzZWMtPmRhdGE7CisKKyAgICBpZiAoIGNvbnRlbnRzWzBd IHx8IGNvbnRlbnRzW3MtPnNoX3NpemUgLSAxXSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWxmX3Jlc29sdmVfc2VjdGlvbnMoc3Ry dWN0IHhzcGxpY2VfZWxmICplbGYsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IHhz cGxpY2VfZWxmX3NlYyAqc2VjOworICAgIHVuc2lnbmVkIGludCBpOworICAgIEVsZl9PZmYgZGVs dGE7CisgICAgaW50IHJjOworCisgICAgLyogeHNwbGljZV9lbGZfbG9hZCBzYW5pdHkgY2hlY2tl ZCBlX3NobnVtLiAqLworICAgIHNlYyA9IHhtYWxsb2NfYXJyYXkoc3RydWN0IHhzcGxpY2VfZWxm X3NlYywgZWxmLT5oZHItPmVfc2hudW0pOworICAgIGlmICggIXNlYyApCisgICAgeworICAgICAg ICBwcmludGsoWEVOTE9HX0VSUiBYU1BMSUNFIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5 IGZvciBzZWN0aW9uIHRhYmxlIVxuIiwKKyAgICAgICAgICAgICAgIGVsZi0+bmFtZSk7CisgICAg ICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIGVsZi0+c2VjID0gc2VjOworCisgICAg ZGVsdGEgPSBlbGYtPmhkci0+ZV9zaG9mZiArIGVsZi0+aGRyLT5lX3NobnVtICogZWxmLT5oZHIt PmVfc2hlbnRzaXplOworICAgIGlmICggZGVsdGEgPiBlbGYtPmxlbiApCisgICAgeworICAgICAg ICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIHRhYmxlIGlz IHBhc3QgZW5kIG9mIHBheWxvYWQhXG4iLAorICAgICAgICAgICAgICAgICAgICBlbGYtPm5hbWUp OworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgZm9yICggaSA9IDE7 IGkgPCBlbGYtPmhkci0+ZV9zaG51bTsgaSsrICkKKyAgICB7CisgICAgICAgIGRlbHRhID0gZWxm LT5oZHItPmVfc2hvZmYgKyBpICogZWxmLT5oZHItPmVfc2hlbnRzaXplOworCisgICAgICAgIHNl Y1tpXS5zZWMgPSAodm9pZCAqKWRhdGEgKyBkZWx0YTsKKworICAgICAgICBkZWx0YSA9IHNlY1tp XS5zZWMtPnNoX29mZnNldDsKKworICAgICAgICAvKgorICAgICAgICAgKiBOLkIuIGVsZl9yZXNv bHZlX3NlY3Rpb25fbmFtZXMsIGVsZl9nZXRfc3ltIHNraXAgdGhpcyBjaGVjayBhcworICAgICAg ICAgKiB3ZSBkbyBpdCBoZXJlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBkZWx0YSAmJiAo ZGVsdGEgKyBzZWNbaV0uc2VjLT5zaF9zaXplID4gZWxmLT5sZW4pICkKKyAgICAgICAgeworICAg ICAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIFsldV0g ZGF0YSBpcyBwYXN0IGVuZCBvZiBwYXlsb2FkIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZWxm LT5uYW1lLCBpKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAg ICAgICAgc2VjW2ldLmRhdGEgPSBkYXRhICsgZGVsdGE7CisgICAgICAgIC8qIE5hbWUgaXMgcG9w dWxhdGVkIGluIHhzcGxpY2VfZWxmX3NlY3Rpb25zX25hbWUuICovCisgICAgICAgIHNlY1tpXS5u YW1lID0gTlVMTDsKKworICAgICAgICBpZiAoIHNlY1tpXS5zZWMtPnNoX3R5cGUgPT0gU0hUX1NZ TVRBQiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZWxmLT5zeW10YWIgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCBYU1BMSUNFICIl czogVW5zdXBwb3J0ZWQgbXVsdGlwbGUgc3ltYm9sIHRhYmxlcyFcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICBlbGYtPm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQ UDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxmLT5zeW10YWIgPSAmc2VjW2ldOwor CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZWxmLT5zeW10YWItPnNlYy0+c2hfbGlu ayB3b3VsZCBwb2ludCB0byB0aGUgcmlnaHQgc2VjdGlvbgorICAgICAgICAgICAgICogYnV0IHdl IGhhZG4ndCBmaW5pc2hlZCBwYXJzaW5nIGFsbCB0aGUgc2VjdGlvbnMuCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGlmICggZWxmLT5zeW10YWItPnNlYy0+c2hfbGluayA+IGVsZi0+aGRy LT5lX3NobnVtICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxP R19ERUJVRywgWFNQTElDRQorICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBTeW1ib2wgdGFi bGUgaWR4ICgldSkgdG8gc3RydGFiIHBhc3QgZW5kICgldSlcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICBlbGYtPm5hbWUsIGVsZi0+c3ltdGFiLT5zZWMtPnNoX2xpbmssCisgICAgICAgICAg ICAgICAgICAgICAgICBlbGYtPmhkci0+ZV9zaG51bSk7CisgICAgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFl bGYtPnN5bXRhYiApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJVRywgWFNQTElD RSAiJXM6IE5vIHN5bWJvbCB0YWJsZSBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgZWxmLT5u YW1lKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAhZWxmLT5z eW10YWItPnNlYy0+c2hfc2l6ZSB8fAorICAgICAgICAgZWxmLT5zeW10YWItPnNlYy0+c2hfZW50 c2l6ZSA8IHNpemVvZihFbGZfU3ltKSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19E RUJVRywgWFNQTElDRSAiJXM6IFN5bWJvbCB0YWJsZSBoZWFkZXIgaXMgY29ycnVwdGVkIVxuIiwK KyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAg ICB9CisKKyAgICAvKgorICAgICAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBTSFRfU1RSVEFCICgu c2hzdHJ0YWIsIC5zdHJ0YWIpIHNvIHBpY2sgb25lCisgICAgICogYXNzb2NpYXRlZCB3aXRoIHRo ZSBzeW1ib2wgdGFibGUuCisgICAgICovCisgICAgZWxmLT5zdHJ0YWIgPSAmc2VjW2VsZi0+c3lt dGFiLT5zZWMtPnNoX2xpbmtdOworCisgICAgcmMgPSBlbGZfdmVyaWZ5X3N0cnRhYihlbGYtPnN0 cnRhYik7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19ERUJV RywgWFNQTElDRSAiJXM6IFN0cmluZyB0YWJsZSBzZWN0aW9uIGlzIGNvcnJ1cHRlZFxuIiwKKyAg ICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKwor c3RhdGljIGludCBlbGZfcmVzb2x2ZV9zZWN0aW9uX25hbWVzKHN0cnVjdCB4c3BsaWNlX2VsZiAq ZWxmLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIGNvbnN0IGNoYXIgKnNoc3RydGFiOworICAg IHVuc2lnbmVkIGludCBpOworICAgIEVsZl9PZmYgb2Zmc2V0LCBkZWx0YTsKKyAgICBzdHJ1Y3Qg eHNwbGljZV9lbGZfc2VjICpzZWM7CisgICAgaW50IHJjOworCisgICAgLyoKKyAgICAgKiBUaGUg ZWxmLT5zZWNbMCAtPiBlX3NobnVtXSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiB2ZXJpZmllZCBieQor ICAgICAqIGVsZl9yZXNvbHZlX3NlY3Rpb25zLiBGaW5kIGZpbGUgb2Zmc2V0IGZvciBzZWN0aW9u IHN0cmluZyB0YWJsZQorICAgICAqIChub3JtYWxseSBjYWxsZWQgLnNoc3RydGFiKQorICAgICAq LworICAgIHNlYyA9ICZlbGYtPnNlY1tlbGYtPmhkci0+ZV9zaHN0cm5keF07CisKKyAgICByYyA9 IGVsZl92ZXJpZnlfc3RydGFiKHNlYyk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAgICBk cHJpbnRrKFhFTkxPR19ERUJVRywgWFNQTElDRSAiJXM6IFNlY3Rpb24gc3RyaW5nIHRhYmxlIGlz IGNvcnJ1cHRlZFxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOworICAgICAgICByZXR1 cm4gcmM7CisgICAgfQorCisgICAgLyogVmVyaWZpZWQgaW4gZWxmX3Jlc29sdmVfc2VjdGlvbnMg YnV0IGp1c3QgaW4gY2FzZS4gKi8KKyAgICBvZmZzZXQgPSBzZWMtPnNlYy0+c2hfb2Zmc2V0Owor ICAgIEFTU0VSVChvZmZzZXQgPCBlbGYtPmxlbiAmJiAob2Zmc2V0ICsgc2VjLT5zZWMtPnNoX3Np emUgPD0gZWxmLT5sZW4pKTsKKworICAgIHNoc3RydGFiID0gZGF0YSArIG9mZnNldDsKKworICAg IGZvciAoIGkgPSAxOyBpIDwgZWxmLT5oZHItPmVfc2hudW07IGkrKyApCisgICAgeworICAgICAg ICBkZWx0YSA9IGVsZi0+c2VjW2ldLnNlYy0+c2hfbmFtZTsKKworICAgICAgICBpZiAoIGRlbHRh ICYmIGRlbHRhID49IHNlYy0+c2VjLT5zaF9zaXplICkKKyAgICAgICAgeworICAgICAgICAgICAg ZHByaW50ayhYRU5MT0dfREVCVUcsIFhTUExJQ0UgIiVzOiBzaHN0cnRhYiBbJXVdIGRhdGEgaXMg cGFzdCBlbmQgb2YgcGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwg aSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGVs Zi0+c2VjW2ldLm5hbWUgPSBzaHN0cnRhYiArIGRlbHRhOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IGVsZl9nZXRfc3ltKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBj b25zdCB2b2lkICpkYXRhKQoreworICAgIGNvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnN5 bXRhYl9zZWMsICpzdHJ0YWJfc2VjOworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0gKnN5bTsK KyAgICB1bnNpZ25lZCBpbnQgaSwgZGVsdGEsIG9mZnNldCwgbnN5bTsKKworICAgIHN5bXRhYl9z ZWMgPSBlbGYtPnN5bXRhYjsKKyAgICBzdHJ0YWJfc2VjID0gZWxmLT5zdHJ0YWI7CisKKyAgICAv KiBQb2ludGVycyBhcml0aG1ldGljIHRvIGdldCBmaWxlIG9mZnNldC4gKi8KKyAgICBvZmZzZXQg PSBzdHJ0YWJfc2VjLT5kYXRhIC0gZGF0YTsKKworICAgIC8qIENoZWNrZWQgYWxyZWFkeSBpbiBl bGZfcmVzb2x2ZV9zZWN0aW9ucywgYnV0IGp1c3QgaW4gY2FzZS4gKi8KKyAgICBBU1NFUlQob2Zm c2V0ID09IHN0cnRhYl9zZWMtPnNlYy0+c2hfb2Zmc2V0KTsKKyAgICBBU1NFUlQob2Zmc2V0IDwg ZWxmLT5sZW4gJiYgKG9mZnNldCArIHN0cnRhYl9zZWMtPnNlYy0+c2hfc2l6ZSA8PSBlbGYtPmxl bikpOworCisgICAgLyogc3ltdGFiX3NlYy0+ZGF0YSB3YXMgY29tcHV0ZWQgaW4gZWxmX3Jlc29s dmVfc2VjdGlvbnMuICovCisgICAgQVNTRVJUKChzeW10YWJfc2VjLT5zZWMtPnNoX29mZnNldCAr IGRhdGEpID09IHN5bXRhYl9zZWMtPmRhdGEpOworCisgICAgLyogTm8gbmVlZCB0byBjaGVjayB2 YWx1ZXMgYXMgZWxmX3Jlc29sdmVfc2VjdGlvbnMgZGlkIGl0LiAqLworICAgIG5zeW0gPSBzeW10 YWJfc2VjLT5zZWMtPnNoX3NpemUgLyBzeW10YWJfc2VjLT5zZWMtPnNoX2VudHNpemU7CisKKyAg ICBzeW0gPSB4bWFsbG9jX2FycmF5KHN0cnVjdCB4c3BsaWNlX2VsZl9zeW0sIG5zeW0pOworICAg IGlmICggIXN5bSApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiBYU1BMSUNFICIl czogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3ltYm9sc1xuIiwKKyAgICAgICAgICAg ICAgIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIC8q IFNvIHdlIGRvbid0IGxlYWsgbWVtb3J5LiAqLworICAgIGVsZi0+c3ltID0gc3ltOworCisgICAg Zm9yICggaSA9IDE7IGkgPCBuc3ltOyBpKysgKQorICAgIHsKKyAgICAgICAgRWxmX1N5bSAqcyA9 ICYoKEVsZl9TeW0gKilzeW10YWJfc2VjLT5kYXRhKVtpXTsKKworICAgICAgICAvKiBJZiBzdC0+ bmFtZSBpcyBTVE5fVU5ERUYgemVybywgdGhlIGNoZWNrIHdpbGwgYWx3YXlzIGJlIHRydWUuICov CisgICAgICAgIGRlbHRhID0gcy0+c3RfbmFtZTsKKworICAgICAgICBpZiAoIGRlbHRhICYmIChk ZWx0YSA+IHN0cnRhYl9zZWMtPnNlYy0+c2hfc2l6ZSkgKQorICAgICAgICB7CisgICAgICAgICAg ICBkcHJpbnRrKFhFTkxPR19ERUJVRywgWFNQTElDRSAiJXM6IFN5bWJvbCBbJXVdIGRhdGEgaXMg cGFzdCBlbmQgb2YgcGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwg aSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIHN5 bVtpXS5zeW0gPSBzOworICAgICAgICBzeW1baV0ubmFtZSA9IGRhdGEgKyAoZGVsdGEgKyBvZmZz ZXQpOworICAgIH0KKyAgICBlbGYtPm5zeW0gPSBuc3ltOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgeHNwbGljZV9oZWFkZXJfY2hlY2soY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxm ICplbGYpCit7CisgICAgY29uc3QgRWxmX0VoZHIgKmhkciA9IGVsZi0+aGRyOworCisgICAgaWYg KCBzaXplb2YoKmVsZi0+aGRyKSA+IGVsZi0+bGVuICkKKyAgICB7CisgICAgICAgIGRwcmludGso WEVOTE9HX0RFQlVHLCBYU1BMSUNFICIlczogU2VjdGlvbiBoZWFkZXIgaXMgYmlnZ2VyIHRoYW4g cGF5bG9hZCFcbiIsCisgICAgICAgICAgICAgICAgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAhSVNfRUxGKCpoZHIpICkKKyAgICB7CisgICAg ICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCBYU1BMSUNFICIlczogTm90IGFuIEVMRiBwYXlsb2Fk IVxuIiwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAg aWYgKCBoZHItPmVfaWRlbnRbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQgfHwKKyAgICAgICAgIGhk ci0+ZV9pZGVudFtFSV9EQVRBXSAhPSBFTEZEQVRBMkxTQiB8fAorICAgICAgICAgaGRyLT5lX2lk ZW50W0VJX09TQUJJXSAhPSBFTEZPU0FCSV9TWVNWIHx8CisgICAgICAgICBoZHItPmVfdHlwZSAh PSBFVF9SRUwgfHwKKyAgICAgICAgIGhkci0+ZV9waG51bSAhPSAwICkKKyAgICB7CisgICAgICAg IGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IEludmFsaWQgRUxGIHBheWxvYWQhXG4i LCBlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAgfQorCisgICAg aWYgKCBlbGYtPmhkci0+ZV9zaHN0cm5keCA9PSBTSE5fVU5ERUYgKQorICAgIHsKKyAgICAgICAg ZHByaW50ayhYRU5MT0dfREVCVUcsIFhTUExJQ0UgIiVzOiBTZWN0aW9uIG5hbWUgaWR4IGlzIHVu ZGVmaW5lZCE/XG4iLAorICAgICAgICAgICAgICAgIGVsZi0+bmFtZSk7CisgICAgICAgIHJldHVy biAtRUlOVkFMOworICAgIH0KKworICAgIC8qIENoZWNrIHRoYXQgc2VjdGlvbiBuYW1lIGluZGV4 IGlzIHdpdGhpbiB0aGUgc2VjdGlvbnMuICovCisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaHN0cm5k eCA+PSBlbGYtPmhkci0+ZV9zaG51bSApCisgICAgeworICAgICAgICBkcHJpbnRrKFhFTkxPR19E RUJVRywgWFNQTElDRSAiJXM6IFNlY3Rpb24gbmFtZSBpZHggKCV1KSBpcyBwYXN0IGVuZCBvZiBz ZWN0aW9ucyAoJXUpIVxuIiwKKyAgICAgICAgICAgICAgICBlbGYtPm5hbWUsIGVsZi0+aGRyLT5l X3Noc3RybmR4LCBlbGYtPmhkci0+ZV9zaG51bSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOwor ICAgIH0KKworICAgIGlmICggZWxmLT5oZHItPmVfc2hudW0gPiA2NCApCisgICAgeworICAgICAg ICBkcHJpbnRrKFhFTkxPR19ERUJVRywgWFNQTElDRSAiJXM6IFRvbyBtYW55ICgldSkgc2VjdGlv bnMhXG4iLAorICAgICAgICAgICAgICAgIGVsZi0+bmFtZSwgZWxmLT5oZHItPmVfc2hudW0pOwor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIGVsZi0+aGRyLT5lX3No b2ZmID4gZWxmLT5sZW4gKQorICAgIHsKKyAgICAgICAgZHByaW50ayhYRU5MT0dfREVCVUcsIFhT UExJQ0UgIiVzOiBCb2d1cyBlX3Nob2ZmIVxuIiwgZWxmLT5uYW1lKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCBlbGYtPmhkci0+ZV9zaGVudHNpemUgPCBzaXpl b2YoRWxmX1NoZHIpICkKKyAgICB7CisgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCBYU1BM SUNFICIlczogU2VjdGlvbiBoZWFkZXIgc2l6ZSBpcyAldSEgRXhwZWN0ZWQgJXp1IT9cbiIsCisg ICAgICAgICAgICAgICAgZWxmLT5uYW1lLCBlbGYtPmhkci0+ZV9zaGVudHNpemUsIHNpemVvZihF bGZfU2hkcikpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcmV0dXJuIDA7 Cit9CisKK2ludCB4c3BsaWNlX2VsZl9sb2FkKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLCBjb25z dCB2b2lkICpkYXRhKQoreworICAgIGludCByYzsKKworICAgIGVsZi0+aGRyID0gZGF0YTsKKwor ICAgIHJjID0geHNwbGljZV9oZWFkZXJfY2hlY2soZWxmKTsKKyAgICBpZiAoIHJjICkKKyAgICAg ICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBlbGZfcmVzb2x2ZV9zZWN0aW9ucyhlbGYsIGRhdGEp OworICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGVsZl9yZXNv bHZlX3NlY3Rpb25fbmFtZXMoZWxmLCBkYXRhKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0 dXJuIHJjOworCisgICAgcmMgPSBlbGZfZ2V0X3N5bShlbGYsIGRhdGEpOworICAgIGlmICggcmMg KQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB4c3BsaWNl X2VsZl9mcmVlKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmKQoreworICAgIHhmcmVlKGVsZi0+c2Vj KTsKKyAgICBlbGYtPnNlYyA9IE5VTEw7CisgICAgeGZyZWUoZWxmLT5zeW0pOworICAgIGVsZi0+ c3ltID0gTlVMTDsKKyAgICBlbGYtPm5zeW0gPSAwOworICAgIGVsZi0+bmFtZSA9IE5VTEw7Cisg ICAgZWxmLT5sZW4gPSAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTog QworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13 aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmggYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5o CmluZGV4IGI5ZjA4Y2QuLmNkODA1YTggMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi94c3Bs aWNlLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaApAQCAtMTAsNiArMTAsOSBAQCBz dHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX29wOwogCiAjaWZkZWYgQ09ORklHX1hTUExJQ0UKIAor LyogQ29udmVuaWVuY2UgZGVmaW5lIGZvciBwcmludGsuICovCisjZGVmaW5lIFhTUExJQ0UgInhz cGxpY2U6ICIKKwogaW50IHhzcGxpY2Vfb3Aoc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9vcCAq KTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlX2VsZi5oIGIv eGVuL2luY2x1ZGUveGVuL3hzcGxpY2VfZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uODlhY2I3NwotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL3hlbi94c3Bs aWNlX2VsZi5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2l0 cml4IFN5c3RlbXMgUiZEIEx0ZC4KKyAqLworCisjaWZuZGVmIF9fWEVOX1hTUExJQ0VfRUxGX0hf XworI2RlZmluZSBfX1hFTl9YU1BMSUNFX0VMRl9IX18KKworI2luY2x1ZGUgPHhlbi90eXBlcy5o PgorI2luY2x1ZGUgPHhlbi9lbGZzdHJ1Y3RzLmg+CisKKy8qIFRoZSBmb2xsb3dpbmcgZGVzY3Jp YmVzIGFuIEVsZiBmaWxlIGFzIGNvbnN1bWVkIGJ5IHhTcGxpY2UuICovCitzdHJ1Y3QgeHNwbGlj ZV9lbGZfc2VjIHsKKyAgICBFbGZfU2hkciAqc2VjOyAgICAgICAgICAgICAgICAgICAgICAgLyog SG9va2VkIHVwIGluIGVsZl9yZXNvbHZlX3NlY3Rpb25zLiovCisgICAgY29uc3QgY2hhciAqbmFt ZTsgICAgICAgICAgICAgICAgICAgIC8qIEh1bWFuIHJlYWRhYmxlIG5hbWUgaG9va2VkIGluCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZl9yZXNvbHZlX3Nl Y3Rpb25fbmFtZXMuICovCisgICAgY29uc3Qgdm9pZCAqZGF0YTsgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gKGRvbmUgYnkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxmX3Jlc29sdmVfc2VjdGlvbnMpLiAqLworfTsKKwor c3RydWN0IHhzcGxpY2VfZWxmX3N5bSB7CisgICAgRWxmX1N5bSAqc3ltOworICAgIGNvbnN0IGNo YXIgKm5hbWU7Cit9OworCitzdHJ1Y3QgeHNwbGljZV9lbGYgeworICAgIGNvbnN0IGNoYXIgKm5h bWU7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHBheWxvYWQtPm5hbWUuICovCisg ICAgc2l6ZV90IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUg RUxGIGZpbGUuICovCisgICAgY29uc3QgRWxmX0VoZHIgKmhkcjsgICAgICAgICAgICAgICAgIC8q IEVMRiBmaWxlLiAqLworICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnNlYzsgICAgICAgICAv KiBBcnJheSBvZiBzZWN0aW9ucywgYWxsb2NhdGVkIGJ5IHVzLiAqLworICAgIHN0cnVjdCB4c3Bs aWNlX2VsZl9zeW0gKnN5bTsgICAgICAgICAvKiBBcnJheSBvZiBzeW1ib2xzICwgYWxsb2NhdGVk IGJ5IHVzLiAqLworICAgIHVuc2lnbmVkIGludCBuc3ltOworICAgIGNvbnN0IHN0cnVjdCB4c3Bs aWNlX2VsZl9zZWMgKnN5bXRhYjsvKiBQb2ludGVyIHRvIC5zeW10YWIgc2VjdGlvbiAtIGFrYSB0 byBzZWNbeF0uICovCisgICAgY29uc3Qgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqc3RydGFiOy8q IFBvaW50ZXIgdG8gLnN0cnRhYiBzZWN0aW9uIC0gYWthIHRvIHNlY1t5XS4gKi8KK307CisKK2Nv bnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnhzcGxpY2VfZWxmX3NlY19ieV9uYW1lKGNvbnN0 IHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgeHNwbGljZV9l bGZfbG9hZChzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwgY29uc3Qgdm9pZCAqZGF0YSk7Cit2b2lk IHhzcGxpY2VfZWxmX2ZyZWUoc3RydWN0IHhzcGxpY2VfZWxmICplbGYpOworCisjZW5kaWYgLyog X19YRU5fWFNQTElDRV9FTEZfSF9fICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt b2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICog dGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAK Mi41LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=