From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v3 04/32] libxc: introduce a domain loader for HVM guest firmware Date: Fri, 3 Jul 2015 13:34:42 +0200 Message-ID: <1435923310-9019-5-git-send-email-roger.pau@citrix.com> References: <1435923310-9019-1-git-send-email-roger.pau@citrix.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.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZAzFY-0002v7-Gv for xen-devel@lists.xenproject.org; Fri, 03 Jul 2015 11:35:20 +0000 In-Reply-To: <1435923310-9019-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGEgdmVyeSBzaW1wbGUgKGFuZCBkdW1teSkgZG9tYWluIGxvYWRlciB0byBiZSB1 c2VkIHRvIGxvYWQgdGhlCmZpcm13YXJlIChodm1sb2FkZXIpIGludG8gSFZNIGd1ZXN0cy4gU2lu Y2UgaG12bG9hZGVyIGlzIGp1c3QgYSAzMmJpdCBlbGYKZXhlY3V0YWJsZSB0aGUgbG9hZGVyIGlz IGZhaXJseSBzaW1wbGUuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5w YXVAY2l0cml4LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29t PgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNv bT4KQ2M6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5jb20+CkNjOiBXZWkgTGl1 IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHRvb2xzL2xpYnhjL01ha2VmaWxlICAgICAgICAg ICB8ICAgMSArCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oICAgfCAgIDggKysKIHRvb2xz L2xpYnhjL3hjX2RvbV9odm1sb2FkZXIuYyB8IDMxNiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUveGVuL2xpYmVsZi5oICAgICAgIHwgICAxICsK IDQgZmlsZXMgY2hhbmdlZCwgMzI2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9N YWtlZmlsZSBiL3Rvb2xzL2xpYnhjL01ha2VmaWxlCmluZGV4IDE1M2I3OWUuLjQ4ZmM0NzMgMTAw NjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhjL01ha2VmaWxl CkBAIC04Nyw2ICs4Nyw3IEBAIEdVRVNUX1NSQ1MteSAgICAgICAgICAgICAgICAgKz0geGNfZG9t X2NvcmUuYyB4Y19kb21fYm9vdC5jCiBHVUVTVF9TUkNTLXkgICAgICAgICAgICAgICAgICs9IHhj X2RvbV9lbGZsb2FkZXIuYwogR1VFU1RfU1JDUy0kKENPTkZJR19YODYpICAgICArPSB4Y19kb21f YnppbWFnZWxvYWRlci5jCiBHVUVTVF9TUkNTLSQoQ09ORklHX1g4NikgICAgICs9IHhjX2RvbV9k ZWNvbXByZXNzX2x6NC5jCitHVUVTVF9TUkNTLSQoQ09ORklHX1g4NikgICAgICs9IHhjX2RvbV9o dm1sb2FkZXIuYwogR1VFU1RfU1JDUy0kKENPTkZJR19BUk0pICAgICArPSB4Y19kb21fYXJtemlt YWdlbG9hZGVyLmMKIEdVRVNUX1NSQ1MteSAgICAgICAgICAgICAgICAgKz0geGNfZG9tX2Jpbmxv YWRlci5jCiBHVUVTVF9TUkNTLXkgICAgICAgICAgICAgICAgICs9IHhjX2RvbV9jb21wYXRfbGlu dXguYwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20uaCBiL3Rvb2xzL2xp YnhjL2luY2x1ZGUveGNfZG9tLmgKaW5kZXggZjdiNWYwZi4uZDYxNDgyYyAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20uaAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hj X2RvbS5oCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHhlbi9saWJlbGYvbGli ZWxmLmg+CisjaW5jbHVkZSA8eGVuZ3Vlc3QuaD4KIAogI2RlZmluZSBJTlZBTElEX1AyTV9FTlRS WSAgICgoeGVuX3Bmbl90KS0xKQogCkBAIC0xODYsNiArMTg3LDEzIEBAIHN0cnVjdCB4Y19kb21f aW1hZ2UgewogICAgICAgICBYQ19ET01fUFZfQ09OVEFJTkVSLAogICAgICAgICBYQ19ET01fSFZN X0NPTlRBSU5FUiwKICAgICB9IGNvbnRhaW5lcl90eXBlOworCisgICAgLyogSFZNIHNwZWNpZmlj IGZpZWxkcy4gKi8KKyAgICAvKiBFeHRyYSBBQ1BJIHRhYmxlcyBwYXNzZWQgdG8gSFZNTE9BREVS ICovCisgICAgc3RydWN0IHhjX2h2bV9maXJtd2FyZV9tb2R1bGUgYWNwaV9tb2R1bGU7CisKKyAg ICAvKiBFeHRyYSBTTUJJT1Mgc3RydWN0dXJlcyBwYXNzZWQgdG8gSFZNTE9BREVSICovCisgICAg c3RydWN0IHhjX2h2bV9maXJtd2FyZV9tb2R1bGUgc21iaW9zX21vZHVsZTsKIH07CiAKIC8qIC0t LSBwbHVnZ2FibGUga2VybmVsIGxvYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMgYi90 b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYjYyNzBjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV9o dm1sb2FkZXIuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIFhlbiBkb21haW4gYnVpbGRlciAt LSBIVk0gc3BlY2lmaWMgYml0cy4KKyAqCisgKiBQYXJzZSBhbmQgbG9hZCBFTEYgZmlybXdhcmUg aW1hZ2VzIGZvciBIVk0gZG9tYWlucy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgor ICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PHN0ZGFyZy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisK KyNpbmNsdWRlICJ4Z19wcml2YXRlLmgiCisjaW5jbHVkZSAieGNfZG9tLmgiCisjaW5jbHVkZSAi eGNfYml0b3BzLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogcGFyc2UgZWxmIGJpbmFy eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisKK3N0YXRpYyBlbGZfbmVnZXJybm92YWwgY2hlY2tfZWxmX2tlcm5lbChzdHJ1Y3QgeGNf ZG9tX2ltYWdlICpkb20sIGJvb2wgdmVyYm9zZSkKK3sKKyAgICBpZiAoIGRvbS0+a2VybmVsX2Js b2IgPT0gTlVMTCApCisgICAgeworICAgICAgICBpZiAoIHZlcmJvc2UgKQorICAgICAgICAgICAg eGNfZG9tX3BhbmljKGRvbS0+eGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIFhDX0lOVEVS TkFMX0VSUk9SLCAiJXM6IG5vIGtlcm5lbCBpbWFnZSBsb2FkZWQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0K KworICAgIGlmICggIWVsZl9pc19lbGZiaW5hcnkoZG9tLT5rZXJuZWxfYmxvYiwgZG9tLT5rZXJu ZWxfc2l6ZSkgKQorICAgIHsKKyAgICAgICAgaWYgKCB2ZXJib3NlICkKKyAgICAgICAgICAgIHhj X2RvbV9wYW5pYyhkb20tPnhjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBYQ19JTlZBTElE X0tFUk5FTCwgIiVzOiBrZXJuZWwgaXMgbm90IGFuIEVMRiBpbWFnZSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAg fQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZWxmX25lZ2Vycm5vdmFsIHhjX2RvbV9wcm9i ZV9odm1fa2VybmVsKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sKKyAgICBzdHJ1Y3QgZWxm X2JpbmFyeSBlbGY7CisgICAgaW50IHJjOworCisgICAgLyogVGhpcyBsb2FkZXIgaXMgZGVzaWdu ZWQgZm9yIEhWTSBndWVzdCBmaXJtd2FyZS4gKi8KKyAgICBpZiAoIGRvbS0+Y29udGFpbmVyX3R5 cGUgIT0gWENfRE9NX0hWTV9DT05UQUlORVIgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwor ICAgIHJjID0gY2hlY2tfZWxmX2tlcm5lbChkb20sIDApOworICAgIGlmICggcmMgIT0gMCApCisg ICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gZWxmX2luaXQoJmVsZiwgZG9tLT5rZXJuZWxf YmxvYiwgZG9tLT5rZXJuZWxfc2l6ZSk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgcmV0 dXJuIHJjOworCisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlcmUgYXJl IG5vIFhlbiBFTEZOT1RFUywgb3IKKyAgICAgKiBlbHNlIHdlIG1pZ2h0IGJlIHRyeWluZyB0byBs b2FkIGEgUFYga2VybmVsLgorICAgICAqLworICAgIGVsZl9wYXJzZV9iaW5hcnkoJmVsZik7Cisg ICAgcmMgPSBlbGZfeGVuX3BhcnNlKCZlbGYsICZkb20tPnBhcm1zKTsKKyAgICBpZiAoIHJjID09 IDAgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgZWxmX2Vycm9yc3RhdHVzIHhjX2RvbV9wYXJzZV9odm1fa2VybmVsKHN0cnVjdCB4Y19kb21f aW1hZ2UgKmRvbSkKKyAgICAvKgorICAgICAqIFRoaXMgZnVuY3Rpb24gc29tZXRpbWVzIHJldHVy bnMgLTEgZm9yIGVycm9yIGFuZCBzb21ldGltZXMKKyAgICAgKiBhbiBlcnJubyB2YWx1ZS4gID8h PyEKKyAgICAgKi8KK3sKKyAgICBzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmOworICAgIGVsZl9lcnJv cnN0YXR1cyByYzsKKworICAgIHJjID0gY2hlY2tfZWxmX2tlcm5lbChkb20sIDEpOworICAgIGlm ICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIGVsZiA9IHhjX2RvbV9tYWxs b2MoZG9tLCBzaXplb2YoKmVsZikpOworICAgIGlmICggZWxmID09IE5VTEwgKQorICAgICAgICBy ZXR1cm4gLTE7CisgICAgZG9tLT5wcml2YXRlX2xvYWRlciA9IGVsZjsKKyAgICByYyA9IGVsZl9p bml0KGVsZiwgZG9tLT5rZXJuZWxfYmxvYiwgZG9tLT5rZXJuZWxfc2l6ZSk7CisgICAgeGNfZWxm X3NldF9sb2dmaWxlKGRvbS0+eGNoLCBlbGYsIDEpOworICAgIGlmICggcmMgIT0gMCApCisgICAg eworICAgICAgICB4Y19kb21fcGFuaWMoZG9tLT54Y2gsIFhDX0lOVkFMSURfS0VSTkVMLCAiJXM6 IGNvcnJ1cHRlZCBFTEYgaW1hZ2UiLAorICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9f KTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGlmICggIWVsZl8zMmJpdChlbGYp ICkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5WQUxJRF9LRVJO RUwsICIlczogRUxGIGltYWdlIGlzIG5vdCAzMmJpdCIsCisgICAgICAgICAgICAgICAgICAgICBf X0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICAvKiBw YXJzZSBiaW5hcnkgYW5kIGdldCB4ZW4gbWV0YSBpbmZvICovCisgICAgZWxmX3BhcnNlX2JpbmFy eShlbGYpOworCisgICAgLyogZmluZCBrZXJuZWwgc2VnbWVudCAqLworICAgIGRvbS0+a2VybmVs X3NlZy52c3RhcnQgPSBlbGYtPnBzdGFydDsKKyAgICBkb20tPmtlcm5lbF9zZWcudmVuZCAgID0g ZWxmLT5wZW5kOworCisgICAgZG9tLT5ndWVzdF90eXBlID0gImh2bS0zLjAteDg2XzMyIjsKKwor ICAgIGlmICggZWxmX2NoZWNrX2Jyb2tlbihlbGYpICkKKyAgICAgICAgRE9NUFJJTlRGKCIlczog RUxGIGJyb2tlbjogJXMiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICBlbGZfY2hl Y2tfYnJva2VuKGVsZikpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG1vZHVs ZXNfaW5pdChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20sCisgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCB2ZW5kLCBzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLAorICAgICAgICAgICAgICAg ICAgICAgICAgdWludDY0X3QgKm1zdGFydF9vdXQsIHVpbnQ2NF90ICptZW5kX291dCkKK3sKKyNk ZWZpbmUgTU9EVUxFX0FMSUdOIDFVTCA8PCA3CisjZGVmaW5lIE1CX0FMSUdOICAgICAxVUwgPDwg MjAKKyNkZWZpbmUgTUtBTElHTih4LCBhKSAoKCh1aW50NjRfdCkoeCkgKyAoYSkgLSAxKSAmIH4o dWludDY0X3QpKChhKSAtIDEpKQorICAgIHVpbnQ2NF90IHRvdGFsX2xlbiA9IDAsIG9mZnNldDEg PSAwOworCisgICAgaWYgKCAoZG9tLT5hY3BpX21vZHVsZS5sZW5ndGggPT0gMCkgJiYgKGRvbS0+ c21iaW9zX21vZHVsZS5sZW5ndGggPT0gMCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8q IEZpbmQgdGhlIHRvdGFsIGxlbmd0aCBmb3IgdGhlIGZpcm13YXJlIG1vZHVsZXMgd2l0aCBhIHJl YXNvbmFibGUgbGFyZ2UKKyAgICAgKiBhbGlnbm1lbnQgc2l6ZSB0byBhbGlnbiBlYWNoIHRoZSBt b2R1bGVzLgorICAgICAqLworICAgIHRvdGFsX2xlbiA9IE1LQUxJR04oZG9tLT5hY3BpX21vZHVs ZS5sZW5ndGgsIE1PRFVMRV9BTElHTik7CisgICAgb2Zmc2V0MSA9IHRvdGFsX2xlbjsKKyAgICB0 b3RhbF9sZW4gKz0gTUtBTElHTihkb20tPnNtYmlvc19tb2R1bGUubGVuZ3RoLCBNT0RVTEVfQUxJ R04pOworCisgICAgLyogV2FudCB0byBwbGFjZSB0aGUgbW9kdWxlcyAxTWIrY2hhbmdlIGJlaGlu ZCB0aGUgbG9hZGVyIGltYWdlLiAqLworICAgICptc3RhcnRfb3V0ID0gTUtBTElHTihlbGYtPnBl bmQsIE1CX0FMSUdOKSArIChNQl9BTElHTik7CisgICAgKm1lbmRfb3V0ID0gKm1zdGFydF9vdXQg KyB0b3RhbF9sZW47CisKKyAgICBpZiAoICptZW5kX291dCA+IHZlbmQgKQorICAgICAgICByZXR1 cm4gLTE7CisKKyAgICBpZiAoIGRvbS0+YWNwaV9tb2R1bGUubGVuZ3RoICE9IDAgKQorICAgICAg ICBkb20tPmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gKm1zdGFydF9vdXQ7CisgICAgaWYg KCBkb20tPnNtYmlvc19tb2R1bGUubGVuZ3RoICE9IDAgKQorICAgICAgICBkb20tPnNtYmlvc19t b2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0YXJ0X291dCArIG9mZnNldDE7CisKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkbW9kdWxlcyhzdHJ1Y3QgeGNfZG9tX2ltYWdlICpk b20sCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1zdGFydCwgdWludDY0X3QgbWVu ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQpCit7CisgICAgcHJpdmNt ZF9tbWFwX2VudHJ5X3QgKmVudHJpZXMgPSBOVUxMOworICAgIHVuc2lnbmVkIGxvbmcgcGZuX3N0 YXJ0OworICAgIHVuc2lnbmVkIGxvbmcgcGZuX2VuZDsKKyAgICBzaXplX3QgcGFnZXM7CisgICAg dWludDMyX3QgaTsKKyAgICB1aW50OF90ICpkZXN0OworICAgIGludCByYyA9IC0xOworICAgIHhj X2ludGVyZmFjZSAqeGNoID0gZG9tLT54Y2g7CisKKyAgICBpZiAoIChtc3RhcnQgPT0gMCl8fCht ZW5kID09IDApICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwZm5fc3RhcnQgPSAodW5zaWdu ZWQgbG9uZykobXN0YXJ0ID4+IFBBR0VfU0hJRlQpOworICAgIHBmbl9lbmQgPSAodW5zaWduZWQg bG9uZykoKG1lbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUKTsKKyAgICBwYWdlcyA9 IHBmbl9lbmQgLSBwZm5fc3RhcnQ7CisKKyAgICAvKiBNYXAgYWRkcmVzcyBzcGFjZSBmb3IgbW9k dWxlIGxpc3QuICovCisgICAgZW50cmllcyA9IGNhbGxvYyhwYWdlcywgc2l6ZW9mKHByaXZjbWRf bW1hcF9lbnRyeV90KSk7CisgICAgaWYgKCBlbnRyaWVzID09IE5VTEwgKQorICAgICAgICBnb3Rv IGVycm9yX291dDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgcGFnZXM7IGkrKyApCisgICAgICAg IGVudHJpZXNbaV0ubWZuID0gKG1zdGFydCA+PiBQQUdFX1NISUZUKSArIGk7CisKKyAgICBkZXN0 ID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2VzKAorICAgICAgICB4Y2gsIGRvbWlkLCBwYWdlcyA8PCBQ QUdFX1NISUZULCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCAxIDw8IFBBR0VfU0hJRlQsCisgICAg ICAgIGVudHJpZXMsIHBhZ2VzKTsKKyAgICBpZiAoIGRlc3QgPT0gTlVMTCApCisgICAgICAgIGdv dG8gZXJyb3Jfb3V0OworCisgICAgLyogWmVybyB0aGUgcmFuZ2Ugc28gcGFkZGluZyBpcyBjbGVh ciBiZXR3ZWVuIG1vZHVsZXMgKi8KKyAgICBtZW1zZXQoZGVzdCwgMCwgcGFnZXMgPDwgUEFHRV9T SElGVCk7CisKKyAgICAvKiBMb2FkIG1vZHVsZXMgaW50byByYW5nZSAqLworICAgIGlmICggZG9t LT5hY3BpX21vZHVsZS5sZW5ndGggIT0gMCApCisgICAgeworICAgICAgICBtZW1jcHkoZGVzdCwK KyAgICAgICAgICAgICAgIGRvbS0+YWNwaV9tb2R1bGUuZGF0YSwKKyAgICAgICAgICAgICAgIGRv bS0+YWNwaV9tb2R1bGUubGVuZ3RoKTsKKyAgICB9CisgICAgaWYgKCBkb20tPnNtYmlvc19tb2R1 bGUubGVuZ3RoICE9IDAgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGRlc3QgKyAoZG9tLT5zbWJp b3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0IC0gbXN0YXJ0KSwKKyAgICAgICAgICAgICAgIGRvbS0+ c21iaW9zX21vZHVsZS5kYXRhLAorICAgICAgICAgICAgICAgZG9tLT5zbWJpb3NfbW9kdWxlLmxl bmd0aCk7CisgICAgfQorCisgICAgbXVubWFwKGRlc3QsIHBhZ2VzIDw8IFBBR0VfU0hJRlQpOwor ICAgIHJjID0gMDsKKworIGVycm9yX291dDoKKyAgICBmcmVlKGVudHJpZXMpOworCisgICAgcmV0 dXJuIHJjOworfQorCitzdGF0aWMgZWxmX2Vycm9yc3RhdHVzIHhjX2RvbV9sb2FkX2h2bV9rZXJu ZWwoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQoreworICAgIHN0cnVjdCBlbGZfYmluYXJ5ICpl bGYgPSBkb20tPnByaXZhdGVfbG9hZGVyOworICAgIHByaXZjbWRfbW1hcF9lbnRyeV90ICplbnRy aWVzID0gTlVMTDsKKyAgICBzaXplX3QgcGFnZXMgPSAoZWxmLT5wZW5kIC0gZWxmLT5wc3RhcnQg KyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworICAgIGVsZl9lcnJvcnN0YXR1cyByYzsK KyAgICB1aW50NjRfdCBtX3N0YXJ0ID0gMCwgbV9lbmQgPSAwOworICAgIGludCBpOworCisgICAg LyogTWFwIGFkZHJlc3Mgc3BhY2UgZm9yIGluaXRpYWwgZWxmIGltYWdlLiAqLworICAgIGVudHJp ZXMgPSBjYWxsb2MocGFnZXMsIHNpemVvZihwcml2Y21kX21tYXBfZW50cnlfdCkpOworICAgIGlm ICggZW50cmllcyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICBmb3Ig KCBpID0gMDsgaSA8IHBhZ2VzOyBpKysgKQorICAgICAgICBlbnRyaWVzW2ldLm1mbiA9IChlbGYt PnBzdGFydCA+PiBQQUdFX1NISUZUKSArIGk7CisKKyAgICBlbGYtPmRlc3RfYmFzZSA9IHhjX21h cF9mb3JlaWduX3JhbmdlcygKKyAgICAgICAgZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsIHBh Z2VzIDw8IFBBR0VfU0hJRlQsCisgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIDEgPDwg UEFHRV9TSElGVCwKKyAgICAgICAgZW50cmllcywgcGFnZXMpOworICAgIGlmICggZWxmLT5kZXN0 X2Jhc2UgPT0gTlVMTCApCisgICAgeworICAgICAgICBET01QUklOVEYoIiVzOiB1bmFibGUgdG8g bWFwIGd1ZXN0IG1lbW9yeSBzcGFjZSIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJjID0gLUVG QVVMVDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBlbGYtPmRlc3Rfc2l6ZSA9 IHBhZ2VzICogWENfRE9NX1BBR0VfU0laRShkb20pOworCisgICAgcmMgPSBlbGZfbG9hZF9iaW5h cnkoZWxmKTsKKyAgICBpZiAoIHJjIDwgMCApCisgICAgeworICAgICAgICBET01QUklOVEYoIiVz OiBmYWlsZWQgdG8gbG9hZCBlbGYgYmluYXJ5IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIG11bm1hcChlbGYtPmRlc3RfYmFzZSwgZWxmLT5kZXN0X3Np emUpOworCisgICAgcmMgPSBtb2R1bGVzX2luaXQoZG9tLCBkb20tPnRvdGFsX3BhZ2VzIDw8IFBB R0VfU0hJRlQsIGVsZiwgJm1fc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgJm1fZW5kKTsK KyAgICBpZiAoIHJjICE9IDAgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCIlczogaW5zdWZm aWNpZW50IHNwYWNlIHRvIGxvYWQgbW9kdWxlcy4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBy ZXR1cm4gcmM7CisgICAgfQorCisgICAgcmMgPSBsb2FkbW9kdWxlcyhkb20sIG1fc3RhcnQsIG1f ZW5kLCBkb20tPmd1ZXN0X2RvbWlkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgIHsKKyAgICAg ICAgRE9NUFJJTlRGKCIlczogdW5hYmxlIHRvIGxvYWQgbW9kdWxlcy4iLCBfX0ZVTkNUSU9OX18p OworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgZG9tLT5wYXJtcy5waHlzX2VudHJ5 ID0gZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfZW50cnkpOworCisgICAgZnJlZShlbnRyaWVz KTsKKyAgICByZXR1cm4gMDsKKworZXJyb3I6CisgICAgYXNzZXJ0KHJjICE9IDApOworICAgIGZy ZWUoZW50cmllcyk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K Kworc3RydWN0IHhjX2RvbV9sb2FkZXIgaHZtX2xvYWRlciA9IHsKKyAgICAubmFtZSA9ICJIVk0t Z2VuZXJpYyIsCisgICAgLnByb2JlID0geGNfZG9tX3Byb2JlX2h2bV9rZXJuZWwsCisgICAgLnBh cnNlciA9IHhjX2RvbV9wYXJzZV9odm1fa2VybmVsLAorICAgIC5sb2FkZXIgPSB4Y19kb21fbG9h ZF9odm1fa2VybmVsLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJlZ2lzdGVyX2xvYWRlcih2 b2lkKQoreworICAgIHhjX2RvbV9yZWdpc3Rlcl9sb2FkZXIoJmh2bV9sb2FkZXIpOworfQorCisv KgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNE IgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMt bW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9saWJl bGYuaCBiL3hlbi9pbmNsdWRlL3hlbi9saWJlbGYuaAppbmRleCA2MzkzMDQwLi4wM2Q0NDllIDEw MDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vbGliZWxmLmgKKysrIGIveGVuL2luY2x1ZGUveGVu L2xpYmVsZi5oCkBAIC00MjQsNiArNDI0LDcgQEAgc3RydWN0IGVsZl9kb21fcGFybXMgewogICAg IHVpbnQ2NF90IGVsZl9wYWRkcl9vZmZzZXQ7CiAgICAgdWludDMyX3QgZl9zdXBwb3J0ZWRbWEVO RkVBVF9OUl9TVUJNQVBTXTsKICAgICB1aW50MzJfdCBmX3JlcXVpcmVkW1hFTkZFQVRfTlJfU1VC TUFQU107CisgICAgdWludDMyX3QgcGh5c19lbnRyeTsKIAogICAgIC8qIGNhbGN1bGF0ZWQgKi8K ICAgICB1aW50NjRfdCB2aXJ0X29mZnNldDsKLS0gCjEuOS41IChBcHBsZSBHaXQtNTAuMykKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=