From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 15/92] kvm: introspection: handle vCPU related introspection commands Date: Fri, 9 Aug 2019 18:59:30 +0300 Message-ID: <20190809160047.8319-16-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , =?UTF-8?q?Nicu=C8=99or=20C=C3=AE=C8=9Bu?= , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPgoKRm9sbG93aW5nIHRo ZSBjb21tb24gc3RydWN0dXJlIHVzZWQgZm9yIGFsbCBtZXNzYWdlcyAoa3ZtaV9tc2dfaGRyKSwg YWxsCnZDUFUgcmVsYXRlZCBjb21tYW5kcyBoYXZlIGFub3RoZXIgY29tbW9uIHN0cnVjdHVyZSAo a3ZtaV92Y3B1X2hkcikuIFRoaXMKYWxsb3dzIHRoZSByZWNlaXZpbmcgd29ya2VyIHRvIHZhbGlk YXRlIGFuZCBkaXNwYXRjaCB0aGUgbWVzc2FnZSB0byB0aGUKcHJvcGVyIHZDUFUgKGFkZGluZyB0 aGUgaGFuZGxpbmcgZnVuY3Rpb24gdG8gaXRzIGpvYnMgbGlzdCkuCgpTaWduZWQtb2ZmLWJ5OiBN aWhhaSBEb27Im3UgPG1kb250dUBiaXRkZWZlbmRlci5jb20+CkNvLWRldmVsb3BlZC1ieTogTmlj dciZb3IgQ8OuyJt1IDxuY2l0dUBiaXRkZWZlbmRlci5jb20+ClNpZ25lZC1vZmYtYnk6IE5pY3XI mW9yIEPDrsibdSA8bmNpdHVAYml0ZGVmZW5kZXIuY29tPgpDby1kZXZlbG9wZWQtYnk6IEFkYWxi ZXJ0IExhesSDciA8YWxhemFyQGJpdGRlZmVuZGVyLmNvbT4KU2lnbmVkLW9mZi1ieTogQWRhbGJl cnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgotLS0KIERvY3VtZW50YXRpb24vdmly dHVhbC9rdm0va3ZtaS5yc3QgfCAgIDggKysKIGluY2x1ZGUvdWFwaS9saW51eC9rdm1fcGFyYS5o ICAgICAgfCAgIDQgKy0KIGluY2x1ZGUvdWFwaS9saW51eC9rdm1pLmggICAgICAgICAgfCAgIDYg KysKIHZpcnQva3ZtL2t2bWlfaW50LmggICAgICAgICAgICAgICAgfCAgIDMgKwogdmlydC9rdm0v a3ZtaV9tc2cuYyAgICAgICAgICAgICAgICB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKysr KysrLQogNSBmaWxlcyBjaGFuZ2VkLCAxNzcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2t2bWkucnN0IGIvRG9jdW1l bnRhdGlvbi92aXJ0dWFsL2t2bS9rdm1pLnJzdAppbmRleCBhNjYwZGVmMjBiMjMuLjdmM2M0Zjhm Y2U2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9rdm1pLnJzdAorKysg Yi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2t2bWkucnN0CkBAIC0yMzIsNiArMjMyLDE0IEBA IFRoZSBmb2xsb3dpbmcgQyBzdHJ1Y3R1cmVzIGFyZSBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5 IHdoZW4gY29tbXVuaWNhdGluZwogb3ZlciB0aGUgd2lyZS4gVGhlIHBlZXIgdGhhdCBkZXRlY3Rz IGFueSBzaXplIG1pc21hdGNoIHNob3VsZCBzaW1wbHkgY2xvc2UKIHRoZSBjb25uZWN0aW9uIGFu ZCByZXBvcnQgdGhlIGVycm9yLgogCitUaGUgY29tbWFuZHMgcmVsYXRlZCB0byB2Q1BVLXMgc3Rh cnQgd2l0aDo6CisKKwlzdHJ1Y3Qga3ZtaV92Y3B1X2hkciB7CisJCV9fdTE2IHZjcHU7CisJCV9f dTE2IHBhZGRpbmcxOworCQlfX3UzMiBwYWRkaW5nMjsKKwl9CisKIDEuIEtWTUlfR0VUX1ZFUlNJ T04KIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4 L2t2bV9wYXJhLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtX3BhcmEuaAppbmRleCA2YzBjZTQ5 OTMxZTUuLjU0YzBlMjBmNWI2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bV9w YXJhLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bV9wYXJhLmgKQEAgLTEwLDEzICsxMCwx NSBAQAogICogLSBrdm1fcGFyYV9hdmFpbGFibGUKICAqLwogCi0vKiBSZXR1cm4gdmFsdWVzIGZv ciBoeXBlcmNhbGxzICovCisvKiBSZXR1cm4gdmFsdWVzIGZvciBoeXBlcmNhbGxzIGFuZCBWTSBp bnRyb3NwZWN0aW9uICovCiAjZGVmaW5lIEtWTV9FTk9TWVMJCTEwMDAKICNkZWZpbmUgS1ZNX0VG QVVMVAkJRUZBVUxUCiAjZGVmaW5lIEtWTV9FSU5WQUwJCUVJTlZBTAogI2RlZmluZSBLVk1fRTJC SUcJCUUyQklHCiAjZGVmaW5lIEtWTV9FUEVSTQkJRVBFUk0KICNkZWZpbmUgS1ZNX0VPUE5PVFNV UFAJCTk1CisjZGVmaW5lIEtWTV9FQUdBSU4JCTExCisjZGVmaW5lIEtWTV9FTk9NRU0JCUVOT01F TQogCiAjZGVmaW5lIEtWTV9IQ19WQVBJQ19QT0xMX0lSUQkJMQogI2RlZmluZSBLVk1fSENfTU1V X09QCQkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaCBiL2luY2x1ZGUv dWFwaS9saW51eC9rdm1pLmgKaW5kZXggZmYzNWZhYWJiN2VkLi4yOTQ1MmRhODE4ZTMgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm1pLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L2t2bWkuaApAQCAtMTE0LDQgKzExNCwxMCBAQCBzdHJ1Y3Qga3ZtaV9jb250cm9sX3ZtX2V2ZW50 cyB7CiAJX191MzIgcGFkZGluZzI7CiB9OwogCitzdHJ1Y3Qga3ZtaV92Y3B1X2hkciB7CisJX191 MTYgdmNwdTsKKwlfX3UxNiBwYWRkaW5nMTsKKwlfX3UzMiBwYWRkaW5nMjsKK307CisKICNlbmRp ZiAvKiBfVUFQSV9fTElOVVhfS1ZNSV9IICovCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pX2lu dC5oIGIvdmlydC9rdm0va3ZtaV9pbnQuaAppbmRleCA0NzQxOGU5YTg2ZjYuLjMzZWEwNWNiOTlh ZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtaV9pbnQuaAorKysgYi92aXJ0L2t2bS9rdm1pX2lu dC5oCkBAIC0xMTgsNSArMTE4LDggQEAgdm9pZCAqa3ZtaV9tc2dfYWxsb2NfY2hlY2soc2l6ZV90 IHNpemUpOwogdm9pZCBrdm1pX21zZ19mcmVlKHZvaWQgKmFkZHIpOwogaW50IGt2bWlfY21kX2Nv bnRyb2xfdm1fZXZlbnRzKHN0cnVjdCBrdm1pICppa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRfaWQs CiAJCQkgICAgICAgYm9vbCBlbmFibGUpOworaW50IGt2bWlfYWRkX2pvYihzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsCisJCSB2b2lkICgqZmN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmN0 eCksCisJCSB2b2lkICpjdHgsIHZvaWQgKCpmcmVlX2ZjdCkodm9pZCAqY3R4KSk7CiAKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtaV9tc2cuYyBiL3ZpcnQva3ZtL2t2bWlfbXNnLmMK aW5kZXggYTU1YzllMzViZTM2Li4yNzI4ZTY4NzBkNDcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2 bWlfbXNnLmMKKysrIGIvdmlydC9rdm0va3ZtaV9tc2cuYwpAQCAtOCw2ICs4LDE4IEBACiAjaW5j bHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSAia3ZtaV9pbnQuaCIKIAordHlwZWRlZiBpbnQg KCp2Y3B1X3JlcGx5X2ZjdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgY29uc3Qg c3RydWN0IGt2bWlfbXNnX2hkciAqbXNnLCBpbnQgZXJyLAorCQkJICAgICAgY29uc3Qgdm9pZCAq cnBsLCBzaXplX3QgcnBsX3NpemUpOworCitzdHJ1Y3Qga3ZtaV92Y3B1X2NtZCB7CisJdmNwdV9y ZXBseV9mY3QgcmVwbHlfY2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGt2bWlfbXNnX2hkciBoZHI7 CisJCXN0cnVjdCBrdm1pX3ZjcHVfaGRyIGNtZDsKKwl9ICptc2c7Cit9OworCiBzdGF0aWMgY29u c3QgY2hhciAqY29uc3QgbXNnX0lEc1tdID0gewogCVtLVk1JX0NIRUNLX0NPTU1BTkRdICAgICAg ICAgPSAiS1ZNSV9DSEVDS19DT01NQU5EIiwKIAlbS1ZNSV9DSEVDS19FVkVOVF0gICAgICAgICAg ID0gIktWTUlfQ0hFQ0tfRVZFTlQiLApAQCAtMTY1LDYgKzE3NywyMyBAQCBzdGF0aWMgaW50IGt2 bWlfbXNnX3ZtX21heWJlX3JlcGx5KHN0cnVjdCBrdm1pICppa3ZtLAogCXJldHVybiBrdm1pX21z Z192bV9yZXBseShpa3ZtLCBtc2csIGVyciwgcnBsLCBycGxfc2l6ZSk7CiB9CiAKK2ludCBrdm1p X21zZ192Y3B1X3JlcGx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCWNvbnN0IHN0cnVjdCBr dm1pX21zZ19oZHIgKm1zZywgaW50IGVyciwKKwkJCWNvbnN0IHZvaWQgKnJwbCwgc2l6ZV90IHJw bF9zaXplKQoreworCXJldHVybiBrdm1pX21zZ19yZXBseShJS1ZNKHZjcHUtPmt2bSksIG1zZywg ZXJyLCBycGwsIHJwbF9zaXplKTsKK30KKworaW50IGt2bWlfbXNnX3ZjcHVfZHJvcF9yZXBseShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRy ICptc2csIGludCBlcnIsCisJCQkgICAgICBjb25zdCB2b2lkICpycGwsIHNpemVfdCBycGxfc2l6 ZSkKK3sKKwlpZiAoIWt2bWlfdmFsaWRhdGVfbm9fcmVwbHkoSUtWTSh2Y3B1LT5rdm0pLCBtc2cs IHJwbF9zaXplLCBlcnIpKQorCQlyZXR1cm4gLUtWTV9FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30K Kwogc3RhdGljIGludCBoYW5kbGVfZ2V0X3ZlcnNpb24oc3RydWN0IGt2bWkgKmlrdm0sCiAJCQkg ICAgICBjb25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICptc2csIGNvbnN0IHZvaWQgKnJlcSkKIHsK QEAgLTI0OCw2ICsyNzcsMjMgQEAgc3RhdGljIGludCBoYW5kbGVfY29udHJvbF92bV9ldmVudHMo c3RydWN0IGt2bWkgKmlrdm0sCiAJcmV0dXJuIGt2bWlfbXNnX3ZtX21heWJlX3JlcGx5KGlrdm0s IG1zZywgZWMsIE5VTEwsIDApOwogfQogCitzdGF0aWMgaW50IGt2bWlfZ2V0X3ZjcHUoc3RydWN0 IGt2bWkgKmlrdm0sIHVuc2lnbmVkIGludCB2Y3B1X2lkeCwKKwkJCSBzdHJ1Y3Qga3ZtX3ZjcHUg KipkZXN0KQoreworCXN0cnVjdCBrdm0gKmt2bSA9IGlrdm0tPmt2bTsKKwlzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHU7CisKKwlpZiAodmNwdV9pZHggPj0gYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3Zj cHVzKSkKKwkJcmV0dXJuIC1LVk1fRUlOVkFMOworCisJdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0s IHZjcHVfaWR4KTsKKwlpZiAoIXZjcHUpCisJCXJldHVybiAtS1ZNX0VJTlZBTDsKKworCSpkZXN0 ID0gdmNwdTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBoYW5kbGVfY29udHJvbF9jbWRf cmVzcG9uc2Uoc3RydWN0IGt2bWkgKmlrdm0sCiAJCQkJCWNvbnN0IHN0cnVjdCBrdm1pX21zZ19o ZHIgKm1zZywKIAkJCQkJY29uc3Qgdm9pZCAqX3JlcSkKQEAgLTI3Myw2ICszMTksMTEgQEAgc3Rh dGljIGludCBoYW5kbGVfY29udHJvbF9jbWRfcmVzcG9uc2Uoc3RydWN0IGt2bWkgKmlrdm0sCiAJ cmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGJvb2wgaW52YWxpZF92Y3B1X2hkcihjb25zdCBzdHJ1 Y3Qga3ZtaV92Y3B1X2hkciAqaGRyKQoreworCXJldHVybiBoZHItPnBhZGRpbmcxIHx8IGhkci0+ cGFkZGluZzI7Cit9CisKIC8qCiAgKiBUaGVzZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgb24gdGhl IHJlY2VpdmluZyB0aHJlYWQvd29ya2VyLgogICovCkBAIC0yODYsMTYgKzMzNyw2NiBAQCBzdGF0 aWMgaW50KCpjb25zdCBtc2dfdm1bXSkoc3RydWN0IGt2bWkgKiwgY29uc3Qgc3RydWN0IGt2bWlf bXNnX2hkciAqLAogCVtLVk1JX0dFVF9WRVJTSU9OXSAgICAgICAgICAgPSBoYW5kbGVfZ2V0X3Zl cnNpb24sCiB9OwogCisvKgorICogVGhlc2UgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIG9uIHRoZSB2 Q1BVIHRocmVhZC4gVGhlIHJlY2VpdmluZyB0aHJlYWQKKyAqIHBhc3NlcyB0aGUgbWVzc2FnZXMg dXNpbmcgYSBuZXdseSBhbGxvY2F0ZWQgJ3N0cnVjdCBrdm1pX3ZjcHVfY21kJworICogYW5kIHNp Z25hbHMgdGhlIHZDUFUgdG8gaGFuZGxlIHRoZSBjb21tYW5kICh3aGljaCBpbmNsdWRlcworICog c2VuZGluZyBiYWNrIHRoZSByZXBseSkuCisgKi8KK3N0YXRpYyBpbnQoKmNvbnN0IG1zZ192Y3B1 W10pKHN0cnVjdCBrdm1fdmNwdSAqLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGt2bWlfbXNnX2hk ciAqLCBjb25zdCB2b2lkICosCisJCQkgICAgICB2Y3B1X3JlcGx5X2ZjdCkgPSB7Cit9OworCitz dGF0aWMgdm9pZCBrdm1pX2pvYl92Y3B1X2NtZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQg Kl9jdHgpCit7CisJY29uc3Qgc3RydWN0IGt2bWlfdmNwdV9jbWQgKmN0eCA9IF9jdHg7CisJc2l6 ZV90IGlkID0gY3R4LT5tc2ctPmhkci5pZDsKKwlpbnQgZXJyOworCisJZXJyID0gbXNnX3ZjcHVb aWRdKHZjcHUsICZjdHgtPm1zZy0+aGRyLCBjdHgtPm1zZyArIDEsIGN0eC0+cmVwbHlfY2IpOwor CisJaWYgKGVycikgeworCQlzdHJ1Y3Qga3ZtaSAqaWt2bSA9IElLVk0odmNwdS0+a3ZtKTsKKwor CQlrdm1pX2Vycihpa3ZtLAorCQkJICIlczogY21kIGlkOiAlenUgKCVzKSwgZXJyOiAlZFxuIiwg X19mdW5jX18sCisJCQkgaWQsIGlkMnN0cihpZCksIGVycik7CisJCWt2bWlfc29ja19zaHV0ZG93 bihpa3ZtKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt2bWlfZnJlZV9jdHgodm9pZCAqX2N0eCkK K3sKKwljb25zdCBzdHJ1Y3Qga3ZtaV92Y3B1X2NtZCAqY3R4ID0gX2N0eDsKKworCWt2bWlfbXNn X2ZyZWUoY3R4LT5tc2cpOworCWtmcmVlKGN0eCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtaV9tc2df cXVldWVfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBjb25zdCBzdHJ1Y3Qg a3ZtaV92Y3B1X2NtZCAqY21kKQoreworCXJldHVybiBrdm1pX2FkZF9qb2IodmNwdSwga3ZtaV9q b2JfdmNwdV9jbWQsICh2b2lkICopY21kLAorCQkJICAgIGt2bWlfZnJlZV9jdHgpOworfQorCiBz dGF0aWMgYm9vbCBpc192bV9tZXNzYWdlKHUxNiBpZCkKIHsKIAlyZXR1cm4gaWQgPCBBUlJBWV9T SVpFKG1zZ192bSkgJiYgISFtc2dfdm1baWRdOwogfQogCitzdGF0aWMgYm9vbCBpc192Y3B1X21l c3NhZ2UodTE2IGlkKQoreworCXJldHVybiBpZCA8IEFSUkFZX1NJWkUobXNnX3ZjcHUpICYmICEh bXNnX3ZjcHVbaWRdOworfQorCiBzdGF0aWMgYm9vbCBpc191bnN1cHBvcnRlZF9tZXNzYWdlKHUx NiBpZCkKIHsKIAlib29sIHN1cHBvcnRlZDsKIAotCXN1cHBvcnRlZCA9IGlzX2tub3duX21lc3Nh Z2UoaWQpICYmIGlzX3ZtX21lc3NhZ2UoaWQpOworCXN1cHBvcnRlZCA9IGlzX2tub3duX21lc3Nh Z2UoaWQpICYmCisJCQkoaXNfdm1fbWVzc2FnZShpZCkgfHwgaXNfdmNwdV9tZXNzYWdlKGlkKSk7 CiAKIAlyZXR1cm4gIXN1cHBvcnRlZDsKIH0KQEAgLTM2NCwxMiArNDY1LDY2IEBAIHN0YXRpYyBp bnQga3ZtaV9tc2dfZGlzcGF0Y2hfdm1fY21kKHN0cnVjdCBrdm1pICppa3ZtLAogCXJldHVybiBt c2dfdm1bbXNnLT5pZF0oaWt2bSwgbXNnLCBtc2cgKyAxKTsKIH0KIAorc3RhdGljIGludCBrdm1p X21zZ19kaXNwYXRjaF92Y3B1X2pvYihzdHJ1Y3Qga3ZtaSAqaWt2bSwKKwkJCQkgICAgICBzdHJ1 Y3Qga3ZtaV92Y3B1X2NtZCAqam9iLAorCQkJCSAgICAgIGJvb2wgKnF1ZXVlZCkKK3sKKwlzdHJ1 Y3Qga3ZtaV9tc2dfaGRyICpoZHIgPSAmam9iLT5tc2ctPmhkcjsKKwlzdHJ1Y3Qga3ZtaV92Y3B1 X2hkciAqY21kID0gJmpvYi0+bXNnLT5jbWQ7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gTlVM TDsKKwlpbnQgZXJyOworCisJaWYgKGludmFsaWRfdmNwdV9oZHIoY21kKSkKKwkJcmV0dXJuIC1L Vk1fRUlOVkFMOworCisJZXJyID0ga3ZtaV9nZXRfdmNwdShpa3ZtLCBjbWQtPnZjcHUsICZ2Y3B1 KTsKKworCWlmICghZXJyICYmIHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VO SU5JVElBTElaRUQpCisJCWVyciA9IC1LVk1fRUFHQUlOOworCisJaWYgKGVycikKKwkJcmV0dXJu IGt2bWlfbXNnX3ZtX21heWJlX3JlcGx5KGlrdm0sIGhkciwgZXJyLCBOVUxMLCAwKTsKKworCWVy ciA9IGt2bWlfbXNnX3F1ZXVlX3RvX3ZjcHUodmNwdSwgam9iKTsKKwlpZiAoIWVycikKKwkJKnF1 ZXVlZCA9IHRydWU7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGt2bWlfbXNnX2Rp c3BhdGNoX3ZjcHVfbXNnKHN0cnVjdCBrdm1pICppa3ZtLAorCQkJCSAgICAgIHN0cnVjdCBrdm1p X21zZ19oZHIgKm1zZywKKwkJCQkgICAgICBib29sICpxdWV1ZWQpCit7CisJc3RydWN0IGt2bWlf dmNwdV9jbWQgKmpvYl9tc2c7CisJaW50IGVycjsKKworCWpvYl9tc2cgPSBremFsbG9jKHNpemVv Zigqam9iX21zZyksIEdGUF9LRVJORUwpOworCWlmICgham9iX21zZykKKwkJcmV0dXJuIC1LVk1f RU5PTUVNOworCisJam9iX21zZy0+cmVwbHlfY2IgPSBpa3ZtLT5jbWRfcmVwbHlfZGlzYWJsZWQK KwkJCQk/IGt2bWlfbXNnX3ZjcHVfZHJvcF9yZXBseQorCQkJCToga3ZtaV9tc2dfdmNwdV9yZXBs eTsKKwlqb2JfbXNnLT5tc2cgPSAodm9pZCAqKW1zZzsKKworCWVyciA9IGt2bWlfbXNnX2Rpc3Bh dGNoX3ZjcHVfam9iKGlrdm0sIGpvYl9tc2csIHF1ZXVlZCk7CisKKwlpZiAoISpxdWV1ZWQpCisJ CWtmcmVlKGpvYl9tc2cpOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBrdm1pX21z Z19kaXNwYXRjaChzdHJ1Y3Qga3ZtaSAqaWt2bSwKIAkJCSAgICAgc3RydWN0IGt2bWlfbXNnX2hk ciAqbXNnLCBib29sICpxdWV1ZWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGt2bWlfbXNnX2Rp c3BhdGNoX3ZtX2NtZChpa3ZtLCBtc2cpOworCWlmIChpc192Y3B1X21lc3NhZ2UobXNnLT5pZCkp CisJCWVyciA9IGt2bWlfbXNnX2Rpc3BhdGNoX3ZjcHVfbXNnKGlrdm0sIG1zZywgcXVldWVkKTsK KwllbHNlCisJCWVyciA9IGt2bWlfbXNnX2Rpc3BhdGNoX3ZtX2NtZChpa3ZtLCBtc2cpOwogCiAJ aWYgKGVycikKIAkJa3ZtaV9lcnIoaWt2bSwgIiVzOiBtc2cgaWQ6ICV1ICglcyksIGVycjogJWRc biIsIF9fZnVuY19fLApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGlu dXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxt YW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=