From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v9 3/7] libxl: support mapping static shared memory areas during domain creation Date: Wed, 5 Dec 2018 14:15:59 -0800 Message-ID: <1544048163-27499-3-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Stefano Stabellini , sstabellini@kernel.org, wei.liu2@citrix.com, blackskygg@gmail.com, ian.jackson@eu.citrix.com, julien.grall@arm.com List-Id: xen-devel@lists.xenproject.org RnJvbTogWmhvbmd6ZSBMaXUgPGJsYWNrc2t5Z2dAZ21haWwuY29tPgoKQWRkIGxpYnhsX19zc2ht X2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZyb20gb25lIERvbVUgdG8gYW5vdGhlciwgVGhlIG1h cHBpbmcKcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgoKICAqIFNldCBkZWZh dWx0cyBhbmQgY2hlY2sgZm9yIGZ1cnRoZXIgZXJyb3JzIGluIHRoZSBzdGF0aWNfc2htIGNvbmZp Z3M6CiAgICBvdmVybGFwcGluZyBhcmVhcywgaW52YWxpZCByYW5nZXMsIGR1cGxpY2F0ZWQgb3du ZXIgZG9tYWluLAogICAgbm90IHBhZ2UgYWxpZ25lZCwgbm8gb3duZXIgZG9tYWluIGV0Yy4KICAq IFVzZSB4Y19kb21haW5fYWRkX3RvX3BoeXNtYXBfYmF0Y2ggdG8gbWFwIHRoZSBzaGFyZWQgcGFn ZXMgdG8gYm9ycm93ZXJzCiAgKiBXaGVuIHNvbWUgb2YgdGhlIHBhZ2VzIGNhbid0IGJlIHN1Y2Nl c3NmdWxseSBtYXBwZWQsIHJvbGwgYmFjayBhbnkKICAgIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcGFn ZXMgc28gdGhhdCB0aGUgc3lzdGVtIHN0YXlzIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KICAqIFdy aXRlIGluZm9ybWF0aW9uIGFib3V0IHN0YXRpYyBzaGFyZWQgbWVtb3J5IGFyZWFzIGludG8gdGhl IGFwcHJvcHJpYXRlCiAgICB4ZW5zdG9yZSBwYXRocyBhbmQgc2V0IHRoZSByZWZjb3VudCBvZiB0 aGUgc2hhcmVkIHJlZ2lvbiBhY2NvcmRpbmdseS4KClRlbXBvcmFyaWx5IG1hcmsgdGhpcyBhcyB1 bnN1cHBvcnRlZCBvbiB4ODYgYmVjYXVzZSBjYWxsaW5nIHAybV9hZGRfZm9yZWlnbiBvbgp0d28g ZG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9uIHg4NiAoc2VlIHRoZSBjb21tZW50cyBp bgp4ODYvbW0vcDJtLmM6cDJtX2FkZF9mb3JlaWduIGZvciBtb3JlIGRldGFpbHMpLgoKVGhpcyBp cyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJlYXMg YmV0d2VlbiBWTXMKZnJvbSB4bCBjb25maWcgZmlsZSIgKHNlZSBbMV0pLgoKWzFdIGh0dHBzOi8v bGlzdHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE3LTA4L21zZzAzMjQyLmh0 bWwKClNpZ25lZC1vZmYtYnk6IFpob25nemUgTGl1IDxibGFja3NreWdnQGdtYWlsLmNvbT4KU2ln bmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgoKQ2M6 IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tz b25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2Vy bmVsLm9yZz4KQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+CkNjOiB4ZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwotLS0KQ2hhbmdlcyBpbiB2OToKLSByZW5hbWUgbWFzdGVyIHRv IG93bmVyIGFuZCBzbGF2ZSB0byBib3Jyb3dlcgotIHVzZSBsaWJ4bF9feHNfcmVhZF9jaGVja2Vk Ci0gbW92ZSBjYWxsIHRvIGxpYnhsX19zc2htX2RvX21hcCBhZnRlciB4ZW5zdG9yZSB0cmFuc2Fj dGlvbgotIGltcHJvdmUgaW4tY29kZSBjb21tZW50Ci0gcmVtb3ZlIHVzZWxlc3MgaXNyZXRyeSB2 YXJpYWJsZQotIGNoZWNrIGZvciBjb3VudF9zdHJpbmcgIT0gTlVMTCBiZWZvcmUgcHJvY2VlZGlu ZwoKQ2hhbmdlcyBpbiB2NToKLSBmaXggdHlwb3MKLSBhZGQgY29tbWVudHMKLSBhZGQgdmFsdWUg Y2hlY2tzIChpbmNsdWRpbmcgYWxpZ25tZW50IGNoZWNrcykgaW4gc3NobV9zZXRkZWZhdWx0cwot LS0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgIDMgKy0KIHRvb2xzL2xpYnhsL2xp YnhsX2FyY2guaCAgICAgfCAgIDYgKwogdG9vbHMvbGlieGwvbGlieGxfYXJtLmMgICAgICB8ICAx NSArKwogdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgICB8ICAyNyArKysKIHRvb2xzL2xpYnhs L2xpYnhsX2ludGVybmFsLmggfCAgMTQgKysKIHRvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYyAgICAg fCAzOTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMv bGlieGwvbGlieGxfeDg2LmMgICAgICB8ICAxOSArKysKIDcgZmlsZXMgY2hhbmdlZCwgNDgyIGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4 bC9saWJ4bF9zc2htLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xz L2xpYnhsL01ha2VmaWxlCmluZGV4IDZkYTM0MmUuLjUzYWYxODYgMTAwNjQ0Ci0tLSBhL3Rvb2xz L2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCkBAIC0xNDAsNyArMTQw LDggQEAgTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGli eGxfZG0ubyBsaWJ4bF9wY2kubyBcCiAJCQlsaWJ4bF92dHBtLm8gbGlieGxfbmljLm8gbGlieGxf ZGlzay5vIGxpYnhsX2NvbnNvbGUubyBcCiAJCQlsaWJ4bF9jcHVwb29sLm8gbGlieGxfbWVtLm8g bGlieGxfc2NoZWQubyBsaWJ4bF90bWVtLm8gXAogCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFp bi5vIGxpYnhsX3ZkaXNwbC5vIFwKLQkJCWxpYnhsX3B2Y2FsbHMubyBsaWJ4bF92c25kLm8gbGli eGxfdmtiLm8gJChMSUJYTF9PQkpTLXkpCisJCQlsaWJ4bF9wdmNhbGxzLm8gbGlieGxfdnNuZC5v IGxpYnhsX3ZrYi5vIGxpYnhsX3NzaG0ubyBcCisJCQkkKExJQlhMX09CSlMteSkKIExJQlhMX09C SlMgKz0gbGlieGxfZ2VuaWQubwogTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMubyBsaWJ4bF9m bGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L2xpYnhsX2FyY2guaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAppbmRleCA5MzA1NzBlLi42 M2MyNmNjIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKKysrIGIvdG9vbHMv bGlieGwvbGlieGxfYXJjaC5oCkBAIC03Myw2ICs3MywxMiBAQCBpbnQgbGlieGxfX2FyY2hfZXh0 cmFfbWVtb3J5KGxpYnhsX19nYyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICppbmZvLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCAqb3V0KTsKIAorX2hpZGRlbgorYm9vbCBsaWJ4bF9fYXJjaF9kb21h aW5fc3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pOwor CitfaGlkZGVuCitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVm YXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKKwogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8 IGRlZmluZWQoX194ODZfNjRfXykKIAogI2RlZmluZSBMQVBJQ19CQVNFX0FERFJFU1MgIDB4ZmVl MDAwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jIGIvdG9vbHMvbGlieGwv bGlieGxfYXJtLmMKaW5kZXggMjVkYzNkZS4uMDU0YWQ1OCAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGwvbGlieGxfYXJtLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKQEAgLTExMzgsNiAr MTEzOCwyMSBAQCB2b2lkIGxpYnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX3NldGRlZmF1bHQo bGlieGxfX2djICpnYywKICAgICBsaWJ4bF9kb21haW5fYnVpbGRfaW5mb19pbml0X3R5cGUoYl9p bmZvLCBMSUJYTF9ET01BSU5fVFlQRV9QVkgpOwogfQogCitib29sIGxpYnhsX19hcmNoX2RvbWFp bl9zdXBwb3J0X3NzaG0oY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbykKK3sK KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hl cG9saWN5X3NldGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpZiAoc3No bS0+Y2FjaGVfcG9saWN5ID09IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikKKyAgICAg ICAgc3NobS0+Y2FjaGVfcG9saWN5ID0gTElCWExfU1NITV9DQUNIRVBPTElDWV9BUk1fTk9STUFM OworICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgPj0gTElCWExfU1NITV9DQUNIRVBPTElDWV9Y ODZfTk9STUFMKQorICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICByZXR1cm4gMDsK K30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKaW5k ZXggMzIwZGJlZC4uNDVhZTllNCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRl LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKQEAgLTUxMyw2ICs1MTMsMTQgQEAg aW50IGxpYnhsX19kb21haW5fYnVpbGQobGlieGxfX2djICpnYywKICAgICAgICAgcmV0ID0gRVJS T1JfSU5WQUw7CiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KKworICAgIC8qIFRoZSBwMm0gaGFz IGJlZW4gc2V0dXAsIHdlIGNvdWxkIG1hcCB0aGUgc3RhdGljIHNoYXJlZCBtZW1vcnkgbm93LiAq LworICAgIHJldCA9IGxpYnhsX19zc2htX2FkZChnYywgZG9taWQsIGRfY29uZmlnLT5zc2htcywg ZF9jb25maWctPm51bV9zc2htcyk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIExPRyhF UlJPUiwgImZhaWxlZCB0byBtYXAgc3RhdGljIHNoYXJlZCBtZW1vcnkiKTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCiAgICAgcmV0ID0gbGlieGxfX2J1aWxkX3Bvc3QoZ2MsIGRvbWlkLCBp bmZvLCBzdGF0ZSwgdm1lbnRzLCBsb2NhbGVudHMpOwogb3V0OgogICAgIHJldHVybiByZXQ7CkBA IC05NDksNiArOTU3LDI1IEBAIHN0YXRpYyB2b2lkIGluaXRpYXRlX2RvbWFpbl9jcmVhdGUobGli eGxfX2VnYyAqZWdjLAogICAgICAgICBnb3RvIGVycm9yX291dDsKICAgICB9CiAKKyAgICBpZiAo ZF9jb25maWctPm51bV9zc2htcyAhPSAwICYmCisgICAgICAgICFsaWJ4bF9fYXJjaF9kb21haW5f c3VwcG9ydF9zc2htKCZkX2NvbmZpZy0+Yl9pbmZvKSkgeworICAgICAgICBMT0dEKEVSUk9SLCBk b21pZCwgInN0YXRpY19zaG0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRvbWFpbiB0eXBlLiIp OworICAgICAgICByZXQgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7Cisg ICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGRfY29uZmlnLT5udW1fc3NobXM7ICsraSkgewor ICAgICAgICByZXQgPSBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0KGdjLCBkb21pZCwgJmRfY29uZmln LT5zc2htc1tpXSk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIExPR0QoRVJST1Is IGRvbWlkLCAiVW5hYmxlIHRvIHNldCBkZWZhdWx0cyBmb3Igc3RhdGljIHNobSIpOworICAgICAg ICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSBsaWJ4 bF9fc3NobV9jaGVja19vdmVybGFwKGdjLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRfY29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7CisgICAg aWYgKHJldCkgZ290byBlcnJvcl9vdXQ7CisKICAgICByZXQgPSBsaWJ4bF9fZG9tYWluX21ha2Uo Z2MsIGRfY29uZmlnLCAmZGNzLT5idWlsZF9zdGF0ZSwgJmRvbWlkKTsKICAgICBpZiAocmV0KSB7 CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiY2Fubm90IG1ha2UgZG9tYWluOiAlZCIsIHJl dCk7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGli eGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCA0Mzk0N2IxLi42ZjMxYTNkIDEwMDY0NAotLS0gYS90 b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVy bmFsLmgKQEAgLTQ0MzQsNiArNDQzNCwyMCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxp YnhsX19xZW11X3FtcF9wYXRoKGxpYnhsX19nYyAqZ2MsIGludCBkb21pZCkKICNlbmRpZgogCiAv KgorICogU2V0IHVwIHN0YXRpYyBzaGFyZWQgcmFtIHBhZ2VzIGZvciBIVk0gZG9tYWlucyB0byBj b21tdW5pY2F0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFm dGVyIHRoZSBtZW1vcnkgbWFwIGlzIGNvbnN0cnVjdGVkCisgKiBhbmQgYmVmb3JlIGFueSBmdXJ0 aGVyIG1lbW9yeSBhY2Nlc3MuCisgKi8KK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2FkZChsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9zdGF0aWNfc2htICpzc2htLCBpbnQgbGVuKTsKKworX2hpZGRlbiBpbnQgbGlieGxfX3Nz aG1fY2hlY2tfb3ZlcmxhcChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMsIGlu dCBsZW4pOworX2hpZGRlbiBpbnQgbGlieGxfX3NzaG1fc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdj LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfc3RhdGljX3NobSAqc3NobSk7CisKKy8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2Rl OiBDCiAgKiBjLWJhc2ljLW9mZnNldDogNApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxf c3NobS5jIGIvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmQwMDk4MWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4 bF9zc2htLmMKQEAgLTAsMCArMSwzOTkgQEAKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIKKyNp bmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYnhsX2FyY2guaCIKKworI2Rl ZmluZSBTU0hNX1BBVEgoaWQpIEdDU1BSSU5URigiL2xpYnhsL3N0YXRpY19zaG0vJXMiLCBpZCkK KworI2RlZmluZSBTU0hNX0VSUk9SKGRvbWlkLCBzc2htaWQsIGYsIC4uLikgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIExPR0QoRVJST1IsIGRvbWlkLCAic3RhdGljX3NobSBp ZCA9ICVzOiAiIGYsIHNzaG1pZCwgIyNfX1ZBX0FSR1NfXykKKworCisvKiBTZXQgZGVmYXVsdCB2 YWx1ZXMgZm9yIGxpYnhsX3N0YXRpY19zaG0gKi8KK2ludCBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0 KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoc3No bS0+cm9sZSAhPSBMSUJYTF9TU0hNX1JPTEVfQk9SUk9XRVIgJiYKKyAgICAgICAgc3NobS0+cm9s ZSAhPSBMSUJYTF9TU0hNX1JPTEVfT1dORVIpCisgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsK KyAgICBpZiAoc3NobS0+YmVnaW4gJiB+WENfUEFHRV9NQVNLIHx8CisgICAgICAgIHNzaG0tPnNp emUgJiB+WENfUEFHRV9NQVNLIHx8CisgICAgICAgIChzc2htLT5vZmZzZXQgIT0gTElCWExfU1NI TV9SQU5HRV9VTktOT1dOICYmCisgICAgICAgIHNzaG0tPm9mZnNldCAmIH5YQ19QQUdFX01BU0sp KSB7CisgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAg ICAgICJiZWdpbi9zaXplL29mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0SyIpOworICAgICAg ICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgfQorCisgICAgLyogcm9sZS1zcGVjaWZpYyBjaGVj a3MgKi8KKyAgICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfQk9SUk9XRVIpIHsK KyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pCisg ICAgICAgICAgICBzc2htLT5vZmZzZXQgPSAwOworICAgICAgICBpZiAoc3NobS0+Y2FjaGVfcG9s aWN5ICE9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikgeworICAgICAgICAgICAgU1NI TV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJjYWNoZV9w b2xpY3kgaXMgb25seSBhcHBsaWNhYmxlIHRvIG93bmVyIGRvbWFpbnMiKTsKKyAgICAgICAgICAg IHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAg IH0gZWxzZSB7CisgICAgICAgIGlmIChzc2htLT5vZmZzZXQgIT0gTElCWExfU1NITV9SQU5HRV9V TktOT1dOKSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIm9mZnNldCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gYm9ycm93ZXIg ZG9tYWlucyIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgIGdv dG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fYXJjaF9kb21haW5fc3No bV9jYWNoZXBvbGljeV9zZXRkZWZhdWx0KHNzaG0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAg ICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAg ICAiY2FjaGUgcG9saWN5IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6Cisg ICAgcmV0dXJuIHJjOworfQorCisvKiBDb21wYXJhdG9yIGZvciBzb3J0aW5nIHNzaG0gcmFuZ2Vz IGJ5IHNzaG0tPmJlZ2luICovCitzdGF0aWMgaW50IHNzaG1fcmFuZ2VfY21wKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICAgbGlieGxfc3RhdGljX3NobSAqY29uc3QgKnNzaG1h ID0gYSwgKmNvbnN0ICpzc2htYiA9IGI7CisgICAgcmV0dXJuICgqc3NobWEpLT5iZWdpbiA+ICgq c3NobWIpLT5iZWdpbiA/IDEgOiAtMTsKK30KKworLyogQ2hlY2sgaWYgdGhlIHNzaG0gYm9ycm93 ZXIgY29uZmlncyBpbiBAc3NobSBvdmVybGFwICovCitpbnQgbGlieGxfX3NzaG1fY2hlY2tfb3Zl cmxhcChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htcywgaW50IGxlbikKK3sKKwor ICAgIGNvbnN0IGxpYnhsX3N0YXRpY19zaG0gKipib3Jyb3dlcl9zc2htcyA9IE5VTEw7CisgICAg aW50IG51bV9ib3Jyb3dlcnM7CisgICAgaW50IGk7CisKKyAgICBpZiAoIWxlbikgcmV0dXJuIDA7 CisKKyAgICBib3Jyb3dlcl9zc2htcyA9IGxpYnhsX19jYWxsb2MoZ2MsIGxlbiwgc2l6ZW9mKGJv cnJvd2VyX3NzaG1zWzBdKSk7CisgICAgbnVtX2JvcnJvd2VycyA9IDA7CisgICAgZm9yIChpID0g MDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzc2htc1tpXS5yb2xlID09IExJQlhMX1NT SE1fUk9MRV9CT1JST1dFUikKKyAgICAgICAgICAgIGJvcnJvd2VyX3NzaG1zW251bV9ib3Jyb3dl cnMrK10gPSBzc2htcyArIGk7CisgICAgfQorICAgIHFzb3J0KGJvcnJvd2VyX3NzaG1zLCBudW1f Ym9ycm93ZXJzLCBzaXplb2YoYm9ycm93ZXJfc3NobXNbMF0pLCBzc2htX3JhbmdlX2NtcCk7CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2JvcnJvd2VycyAtIDE7ICsraSkgeworICAgICAgICBp ZiAoYm9ycm93ZXJfc3NobXNbaSsxXS0+YmVnaW4gPAorICAgICAgICAgICAgYm9ycm93ZXJfc3No bXNbaV0tPmJlZ2luICsgYm9ycm93ZXJfc3NobXNbaV0tPnNpemUpIHsKKyAgICAgICAgICAgIFNT SE1fRVJST1IoZG9taWQsIGJvcnJvd2VyX3NzaG1zW2krMV0tPmlkLCAiYm9ycm93ZXIgcmFuZ2Vz IG92ZXJsYXAuIik7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgICAgIH0K KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogICBsaWJ4bF9fc3NobV9kb19tYXAgLS0g bWFwIHBhZ2VzIGludG8gYm9ycm93ZXIncyBwaHlzbWFwCisgKgorICogICBUaGlzIGZ1bmN0aW9u cyBtYXBzCisgKiAgICAgb3duZXIgZ2ZuOiBbQG1zc2htLT5iZWdpbiArIEBzc2htLT5vZmZzZXQs CisgKiAgICAgICAgICAgICAgICAgIEBtc3NobS0+YmVnaW4gKyBAbXNzaG0tPnNpemUgKyBAc3No bS0+b2Zmc2V0KQorICogICBpbnRvCisgKiAgICAgYm9ycm93ZXIgZ2ZuOiBbQHNzaG0tPmJlZ2lu LCBAc3NobS0+YmVnaW4gKyBAc3NobS0+c2l6ZSkKKyAqCisgKiAgIFRoZSBnZm5zIG9mIHRoZSBw YWdlcyB0aGF0IGFyZSBzdWNjZXNzZnVsbHkgbWFwcGVkIHdpbGwgYmUgc3RvcmVkCisgKiAgIGlu IEBtYXBwZWQsIGFuZCB0aGUgbnVtYmVyIG9mIHRoZSBnZm5zIHdpbGwgYmUgc3RvcmVkIGluIEBu bWFwcGVkLgorICoKKyAqICAgVGhlIGNhbGxlciBoYXMgdG8gZ3VhcmFudGVlIHRoYXQgYWxsIHRo ZSB2YWx1ZXMgYXJlIHBhZ2UtYWxpZ25lZC4KKyAqLworc3RhdGljIGludCBsaWJ4bF9fc3NobV9k b19tYXAobGlieGxfX2djICpnYywgdWludDMyX3QgbWlkLCB1aW50MzJfdCBzaWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htLCBsaWJ4bF9zdGF0 aWNfc2htICptc3NobSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAq bWFwcGVkLCB1bnNpZ25lZCBpbnQgKm5tYXBwZWQpCit7CisgICAgaW50IHJjOworICAgIGludCBp OworICAgIHhlbl9wZm5fdCBudW1fbXBhZ2VzLCBudW1fc3BhZ2VzLCBudW1fc3VjY2Vzcywgb2Zm c2V0OworICAgIGludCAqZXJyczsKKyAgICB4ZW5fdWxvbmdfdCAqaWR4czsKKyAgICB4ZW5fcGZu X3QgKmdwZm5zOworCisgICAgbnVtX21wYWdlcyA9IChtc3NobS0+c2l6ZSkgPj4gWENfUEFHRV9T SElGVDsKKyAgICBudW1fc3BhZ2VzID0gKHNzaG0tPnNpemUpID4+IFhDX1BBR0VfU0hJRlQ7Cisg ICAgb2Zmc2V0ID0gc3NobS0+b2Zmc2V0ID4+IFhDX1BBR0VfU0hJRlQ7CisKKyAgICAvKiBDaGVj ayByYW5nZS4gVGVzdCBvZmZzZXQgPCBtcGFnZXMgZmlyc3QgdG8gYXZvaWQgb3ZlcmZsb3cgKi8K KyAgICBpZiAoKG9mZnNldCA+PSBudW1fbXBhZ2VzKSB8fCAobnVtX21wYWdlcyAtIG9mZnNldCA8 IG51bV9zcGFnZXMpKSB7CisgICAgICAgIFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwgImV4Y2Vl ZHMgb3duZXIncyBhZGRyZXNzIHNwYWNlLiIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBmaWxsIG91dCB0aGUgZ2ZuJ3MgYW5k IGRvIHRoZSBtYXBwaW5nICovCisgICAgZXJycyA9IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFn ZXMsIHNpemVvZihpbnQpKTsKKyAgICBpZHhzID0gbGlieGxfX2NhbGxvYyhnYywgbnVtX3NwYWdl cywgc2l6ZW9mKHhlbl91bG9uZ190KSk7CisgICAgZ3BmbnMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBu dW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Bmbl90KSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9z cGFnZXM7IGkrKykgeworICAgICAgICBpZHhzW2ldID0gKG1zc2htLT5iZWdpbiA+PiBYQ19QQUdF X1NISUZUKSArIG9mZnNldCArIGk7CisgICAgICAgIGdwZm5zW2ldPSAoc3NobS0+YmVnaW4gPj4g WENfUEFHRV9TSElGVCkgKyBpOworICAgIH0KKyAgICByYyA9IHhjX2RvbWFpbl9hZGRfdG9fcGh5 c21hcF9iYXRjaChDVFgtPnhjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaWQsIG1pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY RU5NQVBTUEFDRV9nbWZuX3NoYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG51bV9zcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWR4cywgZ3BmbnMsIGVycnMpOworCisgICAgbnVtX3N1Y2Nlc3MgPSAwOworICAgIGZvciAo aSA9IDA7IGkgPCBudW1fc3BhZ2VzOyBpKyspIHsKKyAgICAgICAgaWYgKGVycnNbaV0pIHsKKyAg ICAgICAgICAgIFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgImNhbid0IG1hcCBhdCBhZGRyZXNzIDB4JSJQUkl4NjQiLiIsCisgICAgICAgICAgICAgICAg ICAgICAgIGdwZm5zW2ldIDw8IFhDX1BBR0VfU0hJRlQpOworICAgICAgICAgICAgcmMgPSBFUlJP Ul9GQUlMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWFwcGVkW251bV9zdWNjZXNz KytdID0gZ3BmbnNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgKm5tYXBwZWQgPSBudW1fc3Vj Y2VzczsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgcmMgPSAwOworb3V0OgorICAgIHJl dHVybiByYzsKK30KKworLyogWGVuc3RvcmUgb3BzIGFyZSBwcm90ZWN0ZWQgYnkgYSB0cmFuc2Fj dGlvbiAqLworc3RhdGljIGludCBsaWJ4bF9fc3NobV9pbmNyZWYobGlieGxfX2djICpnYywgeHNf dHJhbnNhY3Rpb25fdCB4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKnNzaG1fcGF0aCkKK3sKKyAgICBpbnQgcmMsIGNvdW50OworICAgIGNvbnN0IGNoYXIgKmNv dW50X3BhdGgsICpjb3VudF9zdHJpbmc7CisKKyAgICBjb3VudF9wYXRoID0gR0NTUFJJTlRGKCIl cy91c2VyY250Iiwgc3NobV9wYXRoKTsKKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQo Z2MsIHh0LCBjb3VudF9wYXRoLCAmY291bnRfc3RyaW5nKTsKKyAgICBpZiAocmMgfHwgY291bnRf c3RyaW5nID09IE5VTEwpIGdvdG8gb3V0OworICAgIGNvdW50ID0gYXRvaShjb3VudF9zdHJpbmcp OworCisgICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIsIGNvdW50KzEpOworICAgIHJj ID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCBjb3VudF9zdHJp bmcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgcmV0 dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2FkZF9ib3Jyb3dlcihsaWJ4bF9f Z2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjLCBpOworICAgIGNvbnN0IGNo YXIgKnNzaG1fcGF0aCwgKmJvcnJvd2VyX3BhdGg7CisgICAgY29uc3QgY2hhciAqZG9tX3BhdGgs ICpkb21fc3NobV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAgICBjb25zdCBjaGFyICp4c192YWx1 ZTsKKyAgICBjaGFyICplbnRzWzldOworICAgIGxpYnhsX3N0YXRpY19zaG0gb3duZXJfc3NobTsK KyAgICB1aW50MzJfdCBvd25lcl9kb21pZDsKKyAgICB4ZW5fcGZuX3QgKm1hcHBlZDsKKyAgICB1 bnNpZ25lZCBpbnQgbm1hcHBlZCA9IDA7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB4dCA9IFhCVF9O VUxMOworCisgICAgc3NobV9wYXRoID0gU1NITV9QQVRIKHNzaG0tPmlkKTsKKyAgICBib3Jyb3dl cl9wYXRoID0gR0NTUFJJTlRGKCIlcy9ib3Jyb3dlcnMvJSJQUkl1MzIsIHNzaG1fcGF0aCwgZG9t aWQpOworICAgIGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7Cisg ICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNz ZXJ0KGRvbV9wYXRoKTsKKyAgICBkb21fc3NobV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNf c2htLyVzIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKKyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJ TlRGKCIlcy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7CisKKyAgICAvKiBwcmVwYXJlIHRoZSBib3Jy b3dlciB4ZW5zdG9yZSBlbnRyaWVzICovCisgICAgZW50c1swXSA9ICJiZWdpbiI7CisgICAgZW50 c1sxXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVnaW4pOworICAgIGVudHNbMl0g PSAic2l6ZSI7CisgICAgZW50c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+c2l6 ZSk7CisgICAgZW50c1s0XSA9ICJvZmZzZXQiOworICAgIGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4 JSJQUkl4NjQsIHNzaG0tPm9mZnNldCk7CisgICAgZW50c1s2XSA9ICJwcm90IjsKKyAgICBlbnRz WzddID0gbGlieGxfX3N0cmR1cChnYywgbGlieGxfc3NobV9wcm90X3RvX3N0cmluZyhzc2htLT5w cm90KSk7CisgICAgZW50c1s4XSA9IE5VTEw7CisKKyAgICBtYXBwZWQgPSBsaWJ4bF9fY2FsbG9j KGdjLCBzc2htLT5zaXplID4+IFhDX1BBR0VfU0hJRlQsIHNpemVvZih4ZW5fcGZuX3QpKTsKKwor ICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQo Z2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgaWYgKCFsaWJ4 bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwgc3NobV9wYXRoLCAmeHNfdmFsdWUpKSB7CisgICAg ICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwgIm5vIG93bmVyIGZvdW5kLiIpOwor ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKworICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWluIGF0 IG1vc3Qgb25jZSAqLworICAgICAgICBpZiAobGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQs IGRvbV9zc2htX3BhdGgsICZ4c192YWx1ZSkpIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9t aWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRvIG1h cCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAg ICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgLyogbG9vayBhdCB0aGUg b3duZXIgaW5mbyBhbmQgc2VlIGlmIHdlIGNvdWxkIGRvIHRoZSBtYXBwaW5nICovCisgICAgICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3Byb3QiLCBzc2htX3BhdGgpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKKyAgICAgICAgbGlieGxfc3NobV9wcm90X2Zyb21fc3RyaW5nKHhzX3ZhbHVl LCAmb3duZXJfc3NobS5wcm90KTsKKworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNr ZWQoZ2MsIHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRG KCIlcy9iZWdpbiIsIHNzaG1fcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBvd25l cl9zc2htLmJlZ2luID0gc3RydG91bGwoeHNfdmFsdWUsIE5VTEwsIDE2KTsKKworICAgICAgICBy YyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9zaXplIiwgc3NobV9wYXRoKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgICAgIG93bmVyX3NzaG0uc2l6ZSA9IHN0cnRvdWxsKHhzX3ZhbHVlLCBO VUxMLCAxNik7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvb3duZXIi LCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3Zh bHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgb3duZXJfZG9taWQgPSBz dHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIGlmIChzc2htLT5wcm90ID09 IExJQlhMX1NTSE1fUFJPVF9VTktOT1dOKQorICAgICAgICAgICAgc3NobS0+cHJvdCA9IG93bmVy X3NzaG0ucHJvdDsKKworICAgICAgICAvKiBjaGVjayBpZiB0aGUgYm9ycm93ZXIgaXMgYXNraW5n IHRvbyBtdWNoIHBlcm1pc3Npb24gKi8KKyAgICAgICAgaWYgKG93bmVyX3NzaG0ucHJvdCA8IHNz aG0tPnByb3QpIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAiYm9y cm93ZXIgaXMgYXNraW5nIHRvbyBtdWNoIHBlcm1pc3Npb24uIik7CisgICAgICAgICAgICByYyA9 IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAg ICAvKiB3cml0ZSB0aGUgcmVzdWx0IHRvIHhlbnN0b3JlIGFuZCBjb21taXQgKi8KKyAgICAgICAg cmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJib3Jy b3dlciIpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICByYyA9IGxpYnhsX194 c193cml0ZXYoZ2MsIHh0LCBib3Jyb3dlcl9wYXRoLCBlbnRzKTsKKyAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKKyAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0LCBzc2htX3Bh dGgpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hz X3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7Cisg ICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX3Nz aG1fZG9fbWFwKGdjLCBvd25lcl9kb21pZCwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3NobSwgJm93bmVyX3NzaG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw cGVkLCAmbm1hcHBlZCk7CisKK291dDoKKyAgICBpZiAocmMpIHsKKyAgICAgICAgLyogcm9sbCBi YWNrIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcGFnZXMgKi8KKyAgICAgICAgU1NITV9FUlJPUihkb21p ZCwgc3NobS0+aWQsICJmYWlsZWQgdG8gbWFwIHNvbWUgcGFnZXMsIGNhbmNlbGxpbmcuIik7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBubWFwcGVkOyBpKyspIHsKKyAgICAgICAgICAgIHhjX2Rv bWFpbl9yZW1vdmVfZnJvbV9waHlzbWFwKENUWC0+eGNoLCBkb21pZCwgbWFwcGVkW2ldKTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnh0 KTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fc3NobV9hZGRfb3du ZXIobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpbnQgcmM7CisgICAg Y29uc3QgY2hhciAqc3NobV9wYXRoLCAqZG9tX3BhdGgsICpkb21fcm9sZV9wYXRoOworICAgIGNv bnN0IGNoYXIgKnhzX3ZhbHVlOworICAgIGNoYXIgKmVudHNbMTNdOworICAgIHN0cnVjdCB4c19w ZXJtaXNzaW9ucyBub3Blcm07CisgICAgeHNfdHJhbnNhY3Rpb25fdCB4dCA9IFhCVF9OVUxMOwor CisgICAgc3NobV9wYXRoID0gU1NITV9QQVRIKHNzaG0tPmlkKTsKKyAgICBkb21fcGF0aCA9IGxp YnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpOworICAgIC8qIHRoZSBkb21haW4gc2hvdWxk IGJlIGluIHhlbnN0b3JlIGJ5IG5vdyAqLworICAgIGFzc2VydChkb21fcGF0aCk7CisgICAgZG9t X3JvbGVfcGF0aCA9IEdDU1BSSU5URigiJXMvc3RhdGljX3NobS8lcy9yb2xlIiwgZG9tX3BhdGgs IHNzaG0tPmlkKTsKKworICAgIC8qIHByZXBhcmUgdGhlIHhlbnN0b3JlIGVudHJpZXMgKi8KKyAg ICBlbnRzWzBdID0gIm93bmVyIjsKKyAgICBlbnRzWzFdID0gR0NTUFJJTlRGKCIlIlBSSXUzMiwg ZG9taWQpOworICAgIGVudHNbMl0gPSAiYmVnaW4iOworICAgIGVudHNbM10gPSBHQ1NQUklOVEYo IjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBlbnRzWzRdID0gInNpemUiOworICAgIGVu dHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPnNpemUpOworICAgIGVudHNbNl0g PSAicHJvdCI7CisgICAgZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsCisgICAgICAgICAgICBs aWJ4bF9zc2htX3Byb3RfdG9fc3RyaW5nKHNzaG0tPnByb3QpKTsKKyAgICBlbnRzWzhdID0gImNh Y2hlX3BvbGljeSI7CisgICAgZW50c1s5XSA9IGxpYnhsX19zdHJkdXAoZ2MsCisgICAgICAgICAg ICBsaWJ4bF9zc2htX2NhY2hlcG9saWN5X3RvX3N0cmluZyhzc2htLT5jYWNoZV9wb2xpY3kpKTsK KyAgICBlbnRzWzEwXSA9ICJ1c2VyY250IjsKKyAgICBlbnRzWzExXSA9ICIxIjsKKyAgICBlbnRz WzEyXSA9IE5VTEw7CisKKyAgICAvKiBjb3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGJ5IERvbTAgKi8K KyAgICBub3Blcm0uaWQgPSAwOworICAgIG5vcGVybS5wZXJtcyA9IFhTX1BFUk1fTk9ORTsKKwor ICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQo Z2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgaWYgKCFsaWJ4 bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwgc3NobV9wYXRoLCAmeHNfdmFsdWUpKSB7CisgICAg ICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWluIGF0IG1vc3Qgb25j ZSAqLworICAgICAgICAgICAgaWYgKGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LCBkb21f cm9sZV9wYXRoLCAmeHNfdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgU1NITV9FUlJPUihkb21p ZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRv IG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZB SUw7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCwgIm93 bmVyIik7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OzsKKworICAgICAgICAgICAgbGli eGxfX3hzX21rbm9kKGdjLCB4dCwgc3NobV9wYXRoLCAmbm9wZXJtLCAxKTsKKyAgICAgICAgICAg IGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBzc2htX3BhdGgsIGVudHMpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJjYW4gb25seSBo YXZlIG9uZSBvd25lci4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAg ICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNh Y3Rpb25fY29tbWl0KGdjLCAmeHQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAgICAgICAg aWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGxp YnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnh0KTsKKyAgICByZXR1cm4gcmM7Cit9CisK K2ludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpnYywgIHVpbnQzMl90IGRvbWlkLAorICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htcywgaW50IGxlbikKK3sKKyAg ICBpbnQgcmMsIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAg aWYgKHNzaG1zW2ldLnJvbGUgPT0gTElCWExfU1NITV9ST0xFX0JPUlJPV0VSKSB7CisgICAgICAg ICAgICByYyA9IGxpYnhsX19zc2htX2FkZF9ib3Jyb3dlcihnYywgZG9taWQsIHNzaG1zK2kpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9hZGRfb3duZXIo Z2MsIGRvbWlkLCBzc2htcytpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpICByZXR1cm4g cmM7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTog bmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIv dG9vbHMvbGlieGwvbGlieGxfeDg2LmMKaW5kZXggOGI2NzU5Yy4uZGM4YzcwMyAxMDA2NDQKLS0t IGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMK QEAgLTYxOSw2ICs2MTksMjUgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5mb19z ZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsCiAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZi X2luZm8tPmFjcGksIHRydWUpOwogfQogCitib29sIGxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0 X3NzaG0oY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbykKK3sKKyAgICAvKiBU aGlzIGFzIHVuc3VwcG9ydGVkIGZvciBjYWxsaW5nIHAybV9hZGRfZm9yZWlnbiBvbiB0d28KKyAg ICAgKiBEb21VJ3MgaXMgY3VycmVudGx5IG5vdCBhbGxvd2Qgb24geDg2LCBzZWUgdGhlIGNvbW1l bnRzIGluCisgICAgICogeDg2L21tL3AybS5jOiBwMm1fYWRkX2ZvcmVpZ24uCisgICAgICovCisg ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hl cG9saWN5X3NldGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpZiAoc3No bS0+Y2FjaGVfcG9saWN5ID09IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikKKyAgICAg ICAgc3NobS0+Y2FjaGVfcG9saWN5ID0gTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9STUFM OworICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgPCBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4 Nl9OT1JNQUwpCisgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKworICAgIHJldHVybiAwOwor fQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwotLSAKMS45LjEKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs