From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhongze Liu Subject: [PATCH v3 4/7] libxl: support mapping static shared memory areas during domain creation Date: Thu, 19 Oct 2017 10:36:32 +0800 Message-ID: <20171019023635.19812-5-blackskygg@gmail.com> References: <20171019023635.19812-1-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171019023635.19812-1-blackskygg@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Ian Jackson , Julien Grall , Stefano Stabellini , Wei Liu , Zhongze Liu List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX19zc2htX2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZyb20gb25lIERvbVUgdG8g YW5vdGhlciwgVGhlIG1hcHBpbmcKcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbHdpbmcgc3RlcHM6 CgogICogU2V0IGRlZmF1bHRzIGFuZCBjaGVjayBmb3IgZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0 YXRpY19zaG0gY29uZmlnczoKICAgIG92ZXJsYXBwaW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywg ZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAogICAgbm8gbWFzdGVyIGRvbWFpbiBldGMuCiAgKiBX cml0ZSBpbmZvbWF0aW9uIG9mIHN0YXRpYyBzaGFyZWQgbWVtb3J5IGFyZWFzIGludG8gdGhlIGFw cHJvcHJpYXRlCiAgICB4ZW5zdG9yZSBwYXRocy4KICAqIFVzZSB4Y19kb21haW5fYWRkX3RvX3Bo eXNtYXBfYmF0Y2ggdG8gZG8gdGhlIHBhZ2Ugc2hhcmluZy4KICAqIFNldCB0aGUgcmVmY291bnQg b2YgdGhlIHNoYXJlZCByZWdpb24gYWNjb3JkaW5nbHkKClRlbXBvcmFyaWx5IG1hcmsgdGhpcyBh cyB1bnN1cHBvcnRlZCBvbiB4ODYgYmVjYXVzZSBjYWxsaW5nIHAybV9hZGRfZm9yZWdpbiBvbgp0 d28gZG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9uIHg4NiAoc2VlIHRoZSBjb21tZW50 cyBpbgp4ODYvbW0vcDJtLmM6cDJtX2FkZF9mb3JlZ2luIGZvciBtb3JlIGRldGFpbHMpLgoKVGhp cyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJl YXMgYmV0d2VlbiBWTXMKZnJvbSB4bCBjb25maWcgZmlsZSIgKHNlZSBbMV0pLgoKWzFdIGh0dHBz Oi8vbGlzdHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE3LTA4L21zZzAzMjQy Lmh0bWwKClNpZ25lZC1vZmYtYnk6IFpob25nemUgTGl1IDxibGFja3NreWdnQGdtYWlsLmNvbT4K CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24gPGlhbi5q YWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5p QGtlcm5lbC5vcmc+CkNjOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDYzog eGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKLS0tCiAgVjM6CiAgKiB1bm1hcCB0aGUgc3VjY2Vzc2Z1 bGx5IG1hcHBlZCBwYWdlcyB3aGVuZXZlciByYyAhPSAwCi0tLQogdG9vbHMvbGlieGwvTWFrZWZp bGUgICAgICAgICB8ICAgMiArLQogdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oICAgICB8ICAgNiAr CiB0b29scy9saWJ4bC9saWJ4bF9hcm0uYyAgICAgIHwgIDE1ICsrCiB0b29scy9saWJ4bC9saWJ4 bF9jcmVhdGUuYyAgIHwgIDI3ICsrKwogdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCB8ICAx MyArKwogdG9vbHMvbGlieGwvbGlieGxfc3NobS5jICAgICB8IDM5NSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy9saWJ4bC9saWJ4bF94ODYuYyAgICAg IHwgIDE4ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDQ3NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGwvbGlieGxfc3NobS5jCgpkaWZmIC0t Z2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRleCA1 YTg2MWY3MmNiLi45MWJjNzBjZGEyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmlsZQor KysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMTM5LDcgKzEzOSw3IEBAIExJQlhMX09CSlMg PSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2RtLm8gbGlieGxfcGNp Lm8gXAogCQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vIGxpYnhsX3VzYi5v IFwKIAkJCWxpYnhsX3Z0cG0ubyBsaWJ4bF9uaWMubyBsaWJ4bF9kaXNrLm8gbGlieGxfY29uc29s ZS5vIFwKIAkJCWxpYnhsX2NwdXBvb2wubyBsaWJ4bF9tZW0ubyBsaWJ4bF9zY2hlZC5vIGxpYnhs X3RtZW0ubyBcCi0JCQlsaWJ4bF85cGZzLm8gbGlieGxfZG9tYWluLm8gbGlieGxfdmRpc3BsLm8g XAorCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5vIGxpYnhsX3Nz aG0ubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAkKExJQlhMX09CSlMteSkKIExJQlhMX09C SlMgKz0gbGlieGxfZ2VuaWQubwogTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMubyBsaWJ4bF9m bGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF9hcmNoLmggYi90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKaW5kZXggNzg0ZWM3ZjYwOS4u MTE0MzNmZTQ2NiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsX2FyY2guaApAQCAtNzgsNiArNzgsMTIgQEAgaW50IGxpYnhsX19hcmNo X2V4dHJhX21lbW9yeShsaWJ4bF9fZ2MgKmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDY0X3QgKm91dCk7CiAKK19oaWRkZW4KK2Jvb2wgbGlieGxfX2FyY2hf ZG9tYWluX3N1cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZv KTsKKworX2hpZGRlbgoraW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hlcG9saWN5X3Nl dGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAqc3NobSk7CisKICNpZiBkZWZpbmVkKF9faTM4Nl9f KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAKICNkZWZpbmUgTEFQSUNfQkFTRV9BRERSRVNTICAw eGZlZTAwMDAwCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9hcm0uYyBiL3Rvb2xzL2xp YnhsL2xpYnhsX2FybS5jCmluZGV4IGRlMTg0MGJlY2UuLmQ2ODdkYWQwYmQgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCkBA IC0xMTU0LDYgKzExNTQsMjEgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5mb19h Y3BpX3NldGRlZmF1bHQoCiAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZiX2luZm8tPmFj cGksIGZhbHNlKTsKIH0KIAorYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2htKGNv bnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pCit7CisgICAgcmV0dXJuIHRydWU7 Cit9CisKK2ludCBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGljeV9zZXRkZWZhdWx0 KGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSA9 PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1VOS05PV04pCisgICAgICAgIHNzaG0tPmNhY2hlX3Bv bGljeSA9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfQVJNX05PUk1BTDsKKyAgICBpZiAoc3NobS0+ Y2FjaGVfcG9saWN5ID49IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTCkKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBMb2Nh bCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9j cmVhdGUuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCmluZGV4IGYxNWZiMjE1YzIuLmZl Y2M4NzNiN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCkBAIC01MTQsNiArNTE0LDE0IEBAIGludCBsaWJ4bF9f ZG9tYWluX2J1aWxkKGxpYnhsX19nYyAqZ2MsCiAgICAgICAgIHJldCA9IEVSUk9SX0lOVkFMOwog ICAgICAgICBnb3RvIG91dDsKICAgICB9CisKKyAgICAvKiB0aGUgcDJtIGhhcyBiZWVuIHNldHVw LCB3ZSBjb3VsZCBtYXAgdGhlIHN0YXRpYyBzaGFyZWQgbWVtb3J5IG5vdy4gKi8KKyAgICByZXQg PSBsaWJ4bF9fc3NobV9hZGQoZ2MsIGRvbWlkLCBkX2NvbmZpZy0+c3NobXMsIGRfY29uZmlnLT5u dW1fc3NobXMpOworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBMT0coRVJST1IsICJmYWls ZWQgdG8gbWFwIHN0YXRpYyBzaGFyZWQgbWVtb3J5Iik7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKwogICAgIHJldCA9IGxpYnhsX19idWlsZF9wb3N0KGdjLCBkb21pZCwgaW5mbywgc3RhdGUs IHZtZW50cywgbG9jYWxlbnRzKTsKIG91dDoKICAgICByZXR1cm4gcmV0OwpAQCAtOTM5LDYgKzk0 NywyNSBAQCBzdGF0aWMgdm9pZCBpbml0aWF0ZV9kb21haW5fY3JlYXRlKGxpYnhsX19lZ2MgKmVn YywKICAgICAgICAgZ290byBlcnJvcl9vdXQ7CiAgICAgfQogCisgICAgaWYgKGRfY29uZmlnLT5u dW1fc3NobXMgIT0gMCAmJgorICAgICAgICAhbGlieGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3No bSgmZF9jb25maWctPmJfaW5mbykpIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJzdGF0 aWNfc2htIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkb21haW4gdHlwZS4iKTsKKyAgICAgICAg cmV0ID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIH0KKworICAg IGZvciAoaSA9IDA7IGkgPCBkX2NvbmZpZy0+bnVtX3NzaG1zOyArK2kpIHsKKyAgICAgICAgcmV0 ID0gbGlieGxfX3NzaG1fc2V0ZGVmYXVsdChnYywgZG9taWQsICZkX2NvbmZpZy0+c3NobXNbaV0p OworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlVu YWJsZSB0byBzZXQgZGVmYXVsdHMgZm9yIHN0YXRpYyBzaG0iKTsKKyAgICAgICAgICAgIGdvdG8g ZXJyb3Jfb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gbGlieGxfX3NzaG1fY2hl Y2tfb3ZlcmxhcChnYywgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkX2NvbmZpZy0+c3NobXMsIGRfY29uZmlnLT5udW1fc3NobXMpOworICAgIGlmIChyZXQpIGdv dG8gZXJyb3Jfb3V0OworCiAgICAgcmV0ID0gbGlieGxfX2RvbWFpbl9tYWtlKGdjLCBkX2NvbmZp ZywgJmRvbWlkLCAmc3RhdGUtPmNvbmZpZyk7CiAgICAgaWYgKHJldCkgewogICAgICAgICBMT0dE KEVSUk9SLCBkb21pZCwgImNhbm5vdCBtYWtlIGRvbWFpbjogJWQiLCByZXQpOwpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVy bmFsLmgKaW5kZXggNDVlNmRmNmM4Mi4uZmMyODE5MTYyNSAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCkBA IC00MzUwLDYgKzQzNTAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxpYnhsX19zdHJpbmdfaXNf ZGVmYXVsdChjaGFyICoqcykKIH0KICNlbmRpZgogCisvKgorICogU2V0IHVwIHN0YXRpYyBzaGFy ZWQgcmFtIHBhZ2VzIGZvciBIVk0gZG9tYWlucyB0byBjb21tdW5pY2F0ZQorICoKKyAqIFRoaXMg ZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBtZW1vcnkgbWFwIGlzIGNv bnN0cnVjdGVkCisgKiBhbmQgYmVmb3JlIGFueSBmdXJ0aGVyIG1lbW9yeSBhY2Nlc3MuICovCitf aGlkZGVuIGludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSwgaW50 IGxlbik7CisKK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2NoZWNrX292ZXJsYXAobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKTsKK19oaWRkZW4gaW50IGxpYnhs X19zc2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pOworCiAv KgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfc3NobS5jIGIvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmIyMGMzN2RhYjgKLS0tIC9kZXYvbnVsbAorKysgYi90 b29scy9saWJ4bC9saWJ4bF9zc2htLmMKQEAgLTAsMCArMSwzOTUgQEAKKyNpbmNsdWRlICJsaWJ4 bF9vc2RlcHMuaCIKKyNpbmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYnhs X2FyY2guaCIKKworI2RlZmluZSBTU0hNX1BBVEgoaWQpIEdDU1BSSU5URigiL2xvY2FsL3N0YXRp Y19zaG0vJXMiLCBpZCkKKworI2RlZmluZSBTU0hNX0VSUk9SKGRvbWlkLCBzc2htaWQsIGYsIC4u LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIExPR0QoRVJST1IsIGRvbWlk LCAic3RhdGljX3NobSBpZCA9ICVzOiAiIGYsIHNzaG1pZCwgIyNfX1ZBX0FSR1NfXykKKworCisv KiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGxpYnhsX3N0YXRpY19zaG0gKi8KK2ludCBsaWJ4bF9f c3NobV9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpbnQgcmM7 CisKKyAgICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfVU5LTk9XTikKKyAgICAg ICAgc3NobS0+cm9sZSA9IExJQlhMX1NTSE1fUk9MRV9TTEFWRTsKKyAgICBpZiAoc3NobS0+cHJv dCA9PSBMSUJYTF9TU0hNX1BST1RfVU5LTk9XTikKKyAgICAgICAgc3NobS0+cHJvdCA9IExJQlhM X1NTSE1fUFJPVF9SVzsKKworICAgIC8qIHJvbGUtc3BlY2lmaWMgY2hlY2tzICovCisgICAgaWYg KHNzaG0tPnJvbGUgPT0gTElCWExfU1NITV9ST0xFX1NMQVZFKSB7CisgICAgICAgIGlmIChzc2ht LT5vZmZzZXQgPT0gTElCWExfU1NITV9SQU5HRV9VTktOT1dOKQorICAgICAgICAgICAgc3NobS0+ b2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSAhPSBMSUJYTF9TU0hN X0NBQ0hFUE9MSUNZX1VOS05PV04pIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNz aG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiY2FjaGVfcG9saWN5IGlzIG9ubHkgYXBw bGljYWJsZSB0byBtYXN0ZXIgZG9tYWlucyIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZB TDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaWYgKHNzaG0tPm9mZnNldCAhPSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pIHsKKyAgICAg ICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAg ICAib2Zmc2V0IGlzIG9ubHkgYXBwbGljYWJsZSB0byBzbGF2ZSBkb21haW5zIik7CisgICAgICAg ICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0K KworICAgICAgICByYyA9IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hlcG9saWN5X3NldGRl ZmF1bHQoc3NobSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgU1NITV9FUlJPUihk b21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBwb2xpY3kgbm90 IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisK Ky8qIENvbXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRpbmcgc3NobSByYW5nZXMgYnkgc3NobS0+YmVn aW4gKi8KK3N0YXRpYyBpbnQgc3NobV9yYW5nZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYikKK3sKKyAgICBsaWJ4bF9zdGF0aWNfc2htICpjb25zdCAqc3NobWEgPSBhLCAqY29uc3Qg KnNzaG1iID0gYjsKKyAgICByZXR1cm4gKCpzc2htYSktPmJlZ2luID4gKCpzc2htYiktPmJlZ2lu ID8gMSA6IC0xOworfQorCisvKiBjaGVjayBpZiB0aGUgc3NobSBzbGF2ZSBjb25maWdzIGluIEBz c2htIG92ZXJsYXAgKi8KK2ludCBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFwKGxpYnhsX19nYyAq Z2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQoreworCisgICAgY29uc3QgbGlieGxf c3RhdGljX3NobSAqKnNsYXZlX3NzaG1zID0gTlVMTDsKKyAgICBpbnQgbnVtX3NsYXZlczsKKyAg ICBpbnQgaTsKKworICAgIGlmICghbGVuKSByZXR1cm4gMDsKKworICAgIHNsYXZlX3NzaG1zID0g bGlieGxfX2NhbGxvYyhnYywgbGVuLCBzaXplb2Yoc2xhdmVfc3NobXNbMF0pKTsKKyAgICBudW1f c2xhdmVzID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgaWYg KHNzaG1zW2ldLnJvbGUgPT0gTElCWExfU1NITV9ST0xFX1NMQVZFKQorICAgICAgICAgICAgc2xh dmVfc3NobXNbbnVtX3NsYXZlcysrXSA9IHNzaG1zICsgaTsKKyAgICB9CisgICAgcXNvcnQoc2xh dmVfc3NobXMsIG51bV9zbGF2ZXMsIHNpemVvZihzbGF2ZV9zc2htc1swXSksIHNzaG1fcmFuZ2Vf Y21wKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fc2xhdmVzIC0gMTsgKytpKSB7CisgICAg ICAgIGlmIChzbGF2ZV9zc2htc1tpKzFdLT5iZWdpbiA8IHNsYXZlX3NzaG1zW2ldLT5lbmQpIHsK KyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNsYXZlX3NzaG1zW2krMV0tPmlkLCAic2xh dmUgcmFuZ2VzIG92ZXJsYXAuIik7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogICBsaWJ4bF9fc3NobV9k b19tYXAgLS0gbWFwIHBhZ2VzIGludG8gc2xhdmUncyBwaHlzbWFwCisgKgorICogICBUaGlzIGZ1 bmN0aW9ucyBtYXBzCisgKiAgICAgbWF0ZXIgZ2ZuOiBbQG1zc2htLT5iZWdpbiArIEBzc2htLT5v ZmZzZXQsIEBtc3NobS0+ZW5kICsgQHNzaG0tPm9mZnNldCkKKyAqICAgaW50bworICogICAgIHNs YXZlIGdmbjogW0Bzc2htLT5iZWdpbiwgQHNzaG0tPmVuZCkKKyAqCisgKiAgIFRoZSBnZm5zIG9m IHRoZSBwYWdlcyB0aGF0IGFyZSBzdWNjZXNzZnVsbHkgbWFwcGVkIHdpbGwgYmUgc3RvcmVkCisg KiAgIGluIEBtYXBwZWQsIGFuZCB0aGUgbnVtYmVyIG9mIHRoZSBnZm5zIHdpbGwgYmUgc3RvcmVk IGluIEBubWFwcGVkLgorICoKKyAqICAgVGhlIGNhbGxlciBoYXZlIHRvIGd1YXJlbnRlZSB0aGF0 IHNzaG0tPmJlZ2luIDwgc3NobS0+ZW5kICovCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2RvX21h cChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBtaWQsIHVpbnQzMl90IHNpZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGxpYnhsX3N0YXRpY19z aG0gKm1zc2htLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICptYXBw ZWQsIHVuc2lnbmVkIGludCAqbm1hcHBlZCkKK3sKKyAgICBpbnQgcmM7CisgICAgaW50IGk7Cisg ICAgdW5zaWduZWQgaW50IG51bV9tcGFnZXMsIG51bV9zcGFnZXMsIG51bV9zdWNjZXNzLCBvZmZz ZXQ7CisgICAgaW50ICplcnJzOworICAgIHhlbl91bG9uZ190ICppZHhzOworICAgIHhlbl9wZm5f dCAqZ3BmbnM7CisKKyAgICBudW1fbXBhZ2VzID0gKG1zc2htLT5lbmQgLSBtc3NobS0+YmVnaW4p ID4+IFhDX1BBR0VfU0hJRlQ7CisgICAgbnVtX3NwYWdlcyA9IChzc2htLT5lbmQgLSBzc2htLT5i ZWdpbikgPj4gWENfUEFHRV9TSElGVDsKKyAgICBvZmZzZXQgPSBzc2htLT5vZmZzZXQgPj4gWENf UEFHRV9TSElGVDsKKworICAgIC8qIENoZWNrIHJhbmdlLiBUZXN0IG9mZnNldCA8IG1wYWdlcyBm aXJzdCB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgIGlmICgob2Zmc2V0ID49IG51bV9tcGFnZXMp IHx8IChudW1fbXBhZ2VzIC0gb2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsKKyAgICAgICAgU1NITV9F UlJPUihzaWQsIHNzaG0tPmlkLCAiZXhjZWVkcyBtYXN0ZXIncyBhZGRyZXNzIHNwYWNlLiIpOwor ICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAg ICAvKiBmaWxsIG91dCB0aGUgcGZuJ3MgYW5kIGRvIHRoZSBtYXBwaW5nICovCisgICAgZXJycyA9 IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZihpbnQpKTsKKyAgICBpZHhzID0g bGlieGxfX2NhbGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91bG9uZ190KSk7CisgICAg Z3BmbnMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Bmbl90KSk7 CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykgeworICAgICAgICBpZHhzW2ld ID0gKG1zc2htLT5iZWdpbiA+PiBYQ19QQUdFX1NISUZUKSArIG9mZnNldCArIGk7CisgICAgICAg IGdwZm5zW2ldPSAoc3NobS0+YmVnaW4gPj4gWENfUEFHRV9TSElGVCkgKyBpOworICAgIH0KKyAg ICByYyA9IHhjX2RvbWFpbl9hZGRfdG9fcGh5c21hcF9iYXRjaChDVFgtPnhjaCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQsIG1pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5NQVBTUEFDRV9nbWZuX2ZvcmVpZ24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3NwYWdlcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhzLCBncGZucywgZXJycyk7CisKKyAg ICBudW1fc3VjY2VzcyA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykg eworICAgICAgICBpZiAoZXJyc1tpXSkgeworICAgICAgICAgICAgU1NITV9FUlJPUihzaWQsIHNz aG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFwIGF0IGFkZHJlc3MgMHgl IlBSSXg2NCIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3BmbnNbaV0gPDwgWENfUEFHRV9T SElGVCk7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBtYXBwZWRbbnVtX3N1Y2Nlc3MrK10gPSBncGZuc1tpXTsKKyAgICAgICAgfQor ICAgIH0KKyAgICAqbm1hcHBlZCA9IG51bV9zdWNjZXNzOworICAgIGlmIChyYykgZ290byBvdXQ7 CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxp YnhsX19zc2htX2luY3JlZihsaWJ4bF9fZ2MgKmdjLCB4c190cmFuc2FjdGlvbl90IHh0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3NobV9wYXRoKQoreworICAg IGludCByYywgY291bnQ7CisgICAgY29uc3QgY2hhciAqY291bnRfcGF0aCwgKmNvdW50X3N0cmlu ZzsKKworICAgIGNvdW50X3BhdGggPSBHQ1NQUklOVEYoIiVzL3VzZXJzIiwgc3NobV9wYXRoKTsK KyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCAmY291 bnRfc3RyaW5nKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIGNvdW50ID0gYXRvaShjb3Vu dF9zdHJpbmcpOworCisgICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIsIGNvdW50KzEp OworICAgIHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCBj b3VudF9zdHJpbmcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9IDA7CitvdXQ6 CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2FkZF9zbGF2ZShs aWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjLCBpOworICAgIGNv bnN0IGNoYXIgKnNzaG1fcGF0aCwgKnNsYXZlX3BhdGg7CisgICAgY29uc3QgY2hhciAqZG9tX3Bh dGgsICpkb21fc3NobV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAgICBjb25zdCBjaGFyICp4c192 YWx1ZTsKKyAgICBjaGFyICplbnRzWzldOworICAgIGxpYnhsX3N0YXRpY19zaG0gbWFzdGVyX3Nz aG07CisgICAgdWludDMyX3QgbWFzdGVyX2RvbWlkOworICAgIHhlbl9wZm5fdCAqbWFwcGVkOwor ICAgIHVuc2lnbmVkIGludCBubWFwcGVkID0gMDsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0g WEJUX05VTEw7CisgICAgYm9vbCBpc3JldHJ5OworCisgICAgc3NobV9wYXRoID0gU1NITV9QQVRI KHNzaG0tPmlkKTsKKyAgICBzbGF2ZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zbGF2ZXMvJSJQUkl1 MzIsIHNzaG1fcGF0aCwgZG9taWQpOworICAgIGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21w YXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUg Ynkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsKKyAgICBkb21fc3NobV9wYXRoID0gR0NT UFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKKyAgICBkb21f cm9sZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7CisKKyAgICAv KiBwcmVwYXJlIHRoZSBzbGF2ZSB4ZW5zdG9yZSBlbnRyaWVzICovCisgICAgZW50c1swXSA9ICJi ZWdpbiI7CisgICAgZW50c1sxXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVnaW4p OworICAgIGVudHNbMl0gPSAiZW5kIjsKKyAgICBlbnRzWzNdID0gR0NTUFJJTlRGKCIweCUiUFJJ eDY0LCBzc2htLT5lbmQpOworICAgIGVudHNbNF0gPSAib2Zmc2V0IjsKKyAgICBlbnRzWzVdID0g R0NTUFJJTlRGKCIweCUiUFJJeDY0LCBzc2htLT5vZmZzZXQpOworICAgIGVudHNbNl0gPSAicHJv dCI7CisgICAgZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhsX3NzaG1fcHJvdF90b19z dHJpbmcoc3NobS0+cHJvdCkpOworICAgIGVudHNbOF0gPSBOVUxMOworCisgICAgbWFwcGVkID0g bGlieGxfX2NhbGxvYyhnYywgKHNzaG0tPmVuZCAtIHNzaG0tPmJlZ2luKSA+PiBYQ19QQUdFX1NI SUZULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhlbl9wZm5fdCkpOworCisg ICAgaXNyZXRyeSA9IGZhbHNlOworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7 CisKKyAgICAgICAgaWYgKCFsaWJ4bF9feHNfcmVhZChnYywgeHQsIHNzaG1fcGF0aCkpIHsKKyAg ICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAibm8gbWFzdGVyIGZvdW5kLiIp OworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWlu IGF0IG1vc3Qgb25jZSAqLworICAgICAgICBpZiAobGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBkb21f c3NobV9wYXRoKSkgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisg ICAgICAgICAgICAgICAgICAgICAgICJkb21haW4gdHJpZWQgdG8gbWFwIHRoZSBzYW1lIElEIHR3 aWNlLiIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBv dXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBsb29rIGF0IHRoZSBtYXN0ZXIgaW5mbyBhbmQg c2VlIGlmIHdlIGNvdWxkIGRvIHRoZSBtYXBwaW5nICovCisgICAgICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL3Byb3QiLCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnhzX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAg ICAgICAgbGlieGxfc3NobV9wcm90X2Zyb21fc3RyaW5nKHhzX3ZhbHVlLCAmbWFzdGVyX3NzaG0u cHJvdCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmVnaW4iLCBz c2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3ZhbHVl KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgbWFzdGVyX3NzaG0uYmVnaW4g PSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL2VuZCIsIHNzaG1fcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAg ICAgICBtYXN0ZXJfc3NobS5lbmQgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisg ICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21hc3RlciIsIHNzaG1fcGF0aCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAg ICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBtYXN0ZXJfZG9taWQgPSBzdHJ0b3VsbCh4c192 YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIGlmIChzc2htLT5wcm90ID09IExJQlhMX1NTSE1f UFJPVF9VTktOT1dOKQorICAgICAgICAgICAgc3NobS0+cHJvdCA9IG1hc3Rlcl9zc2htLnByb3Q7 CisKKyAgICAgICAgLyogY2hlY2sgaWYgdGhlIHNsYXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJt aXNzaW9uICovCisgICAgICAgIGlmIChtYXN0ZXJfc3NobS5wcm90IDwgc3NobS0+cHJvdCkgewor ICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcg dG9vIG11Y2ggcGVybWlzc2lvbi4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cisg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbCBjaGVja3Mg cGFzc2VkLCBkbyB0aGUgam9iICovCisgICAgICAgIGlmICghaXNyZXRyeSkgeworICAgICAgICAg ICAgcmMgPSBsaWJ4bF9fc3NobV9kb19tYXAoZ2MsIG1hc3Rlcl9kb21pZCwgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2htLCAmbWFzdGVyX3NzaG0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQsICZubWFwcGVkKTsKKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiB3cml0ZSB0 aGUgcmVzdWx0IHRvIHhlbnN0b3JlIGFuZCBjb21taXQgKi8KKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJzbGF2ZSIpOworICAgICAg ICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHh0 LCBzbGF2ZV9wYXRoLCBlbnRzKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAg cmMgPSBsaWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0LCBzc2htX3BhdGgpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1p dChnYywgJnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDAp IGdvdG8gb3V0OworICAgICAgICBpc3JldHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByYyA9IDA7 CitvdXQ6CisgICAgaWYgKHJjKSB7CisgICAgICAgIC8qIHJvbGUgYmFjayBzdWNjZXNzZnVsbHkg bWFwcGVkIHBhZ2VzICovCisgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAiZmFp bGVkIHRvIG1hcCBzb21lIHBhZ2VzLCBjYW5jZWxsaW5nLiIpOworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbm1hcHBlZDsgaSsrKSB7CisgICAgICAgICAgICB4Y19kb21haW5fcmVtb3ZlX2Zyb21f cGh5c21hcChDVFgtPnhjaCwgZG9taWQsIG1hcHBlZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ4dCk7CisKKyAgICByZXR1cm4g cmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fYWRkX21hc3RlcihsaWJ4bF9fZ2MgKmdj LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpzc2ht X3BhdGgsICpkb21fcGF0aCwgKmRvbV9yb2xlX3BhdGg7CisgICAgY2hhciAqZW50c1sxM107Cisg ICAgc3RydWN0IHhzX3Blcm1pc3Npb25zIG5vcGVybTsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0 ID0gWEJUX05VTEw7CisKKyAgICBzc2htX3BhdGggPSBTU0hNX1BBVEgoc3NobS0+aWQpOworICAg IGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhl IGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9w YXRoKTsKKyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzL3Jv bGUiLCBkb21fcGF0aCwgc3NobS0+aWQpOworCisgICAgLyogcHJlcGFyZSB0aGUgeGVuc3RvcmUg ZW50cmllcyAqLworICAgIGVudHNbMF0gPSAibWFzdGVyIjsKKyAgICBlbnRzWzFdID0gR0NTUFJJ TlRGKCIlIlBSSXUzMiwgZG9taWQpOworICAgIGVudHNbMl0gPSAiYmVnaW4iOworICAgIGVudHNb M10gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBlbnRzWzRdID0g ImVuZCI7CisgICAgZW50c1s1XSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+ZW5kKTsK KyAgICBlbnRzWzZdID0gInByb3QiOworICAgIGVudHNbN10gPSBsaWJ4bF9fc3RyZHVwKGdjLCBs aWJ4bF9zc2htX3Byb3RfdG9fc3RyaW5nKHNzaG0tPnByb3QpKTsKKyAgICBlbnRzWzhdID0gImNh Y2hlX3BvbGljeSI7CisgICAgZW50c1s5XSA9IGxpYnhsX19zdHJkdXAoZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfc3NobV9jYWNoZXBvbGljeV90b19zdHJpbmcoc3NobS0+ Y2FjaGVfcG9saWN5KSk7CisgICAgZW50c1sxMF0gPSAidXNlcnMiOworICAgIGVudHNbMTFdID0g IjEiOworICAgIGVudHNbMTJdID0gTlVMTDsKKworICAgIC8qIGNvdWxkIG9ubHkgYmUgYWNjZXNz ZWQgYnkgRG9tMCAqLworICAgIG5vcGVybS5pZCA9IDA7CisgICAgbm9wZXJtLnBlcm1zID0gWFNf UEVSTV9OT05FOworCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFu c2FjdGlvbl9zdGFydChnYywgJnh0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAg ICAgICBpZiAoIWxpYnhsX194c19yZWFkKGdjLCB4dCwgc3NobV9wYXRoKSkgeworICAgICAgICAg ICAgLyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8K KyAgICAgICAgICAgIGlmIChsaWJ4bF9feHNfcmVhZChnYywgeHQsIGRvbV9yb2xlX3BhdGgpKSB7 CisgICAgICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4i KTsKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9j aGVja2VkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCwgIm1hc3RlciIpOworICAgICAgICAgICAgaWYg KHJjKSBnb3RvIG91dDs7CisKKyAgICAgICAgICAgIGxpYnhsX194c19ta25vZChnYywgeHQsIHNz aG1fcGF0aCwgJm5vcGVybSwgMSk7CisgICAgICAgICAgICBsaWJ4bF9feHNfd3JpdGV2KGdjLCB4 dCwgc3NobV9wYXRoLCBlbnRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNTSE1f RVJST1IoZG9taWQsIHNzaG0tPmlkLCAiY2FuIG9ubHkgaGF2ZSBvbmUgbWFzdGVyLiIpOworICAg ICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IH0KKworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4dCk7 CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsK KyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fi b3J0KGdjLCAmeHQpOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX19zc2htX2FkZChs aWJ4bF9fZ2MgKmdjLCAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgIGxpYnhs X3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQoreworICAgIGludCByYywgaTsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBpZiAoc3NobXNbaV0ucm9sZSA9PSBM SUJYTF9TU0hNX1JPTEVfU0xBVkUpIHsKKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NzaG1fYWRk X3NsYXZlKGdjLCBkb21pZCwgc3NobXMraSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByYyA9IGxpYnhsX19zc2htX2FkZF9tYXN0ZXIoZ2MsIGRvbWlkLCBzc2htcytpKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAocmMpICByZXR1cm4gcmM7CisgICAgfQorCisgICAgcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKaW5k ZXggNWY5MWZlNGY5Mi4uNDUwZmIzZDM1NCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxf eDg2LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKQEAgLTU5Niw2ICs1OTYsMjQgQEAg dm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5mb19hY3BpX3NldGRlZmF1bHQoCiAgICAg bGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZiX2luZm8tPmFjcGksIHRydWUpOwogfQogCitib29s IGxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3QgbGlieGxfZG9tYWluX2J1aWxk X2luZm8gKmJfaW5mbykKK3sKKyAgICAvKiBGSVhNRTogTWFyayB0aGlzIGFzIHVuc3VwcG9ydGVk IGZvciBjYWxsaW5nIHAybV9hZGRfZm9yZWlnbiBvbiB0d28KKyAgICAgKiBEb21VJ3MgaXMgY3Vy cmVudGx5IG5vdCBhbGxvd2Qgb24geDg2LCBzZWUgdGhlIGNvbW1lbnRzIGluCisgICAgICogeDg2 L21tL3AybS5jOiBwMm1fYWRkX2ZvcmVpZ24gKi8KKyAgICAgcmV0dXJuIGZhbHNlOworfQorCitp bnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChsaWJ4bF9z dGF0aWNfc2htICpzc2htKQoreworICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgPT0gTElCWExf U1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQorICAgICAgICBzc2htLT5jYWNoZV9wb2xpY3kgPSBM SUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUw7CisgICAgaWYgKHNzaG0tPmNhY2hlX3Bv bGljeSA8IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTCkKKyAgICAgICAgcmV0dXJu IEVSUk9SX0lOVkFMOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJs ZXM6CiAgKiBtb2RlOiBDCi0tIAoyLjE0LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK