From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 45/92] kvm: introspection: add KVMI_GET_PAGE_WRITE_BITMAP Date: Fri, 9 Aug 2019 19:00:00 +0300 Message-ID: <20190809160047.8319-46-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 , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org VGhpcyBjb21tYW5kIHJldHVybnMgc3VicGFnZSBwcm90ZWN0aW9uIChTUFApIHdyaXRlIGJpdG1h cHMgZm9yIGFuIGFycmF5Cm9mIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBvZiA0S0Igc2l6ZS4K Ckxpa2UgdGhlIEtWTUlfR0VUX1BBR0VfQUNDRVNTIGNvbW1hbmQsIGl0IGNoZWNrcyBvbmx5IHRo ZSByYWRpeCB0cmVlLApub3QgdGhlIFNQUCB0YWJsZXMuICBTbywgZWl0aGVyIHdlIGNoYW5nZSBp dCB0byBjaGVjayB0aGUgU1BQIHRhYmxlcwpvciB3ZSBkcm9wIGl0LiBHaXZlbiB0aGUgZmFjdCB0 aGF0IHRoZSBLVk1JX0VWRU5UX1BGIGV2ZW50cyBhcmUgZmlsdGVyCnVzaW5nIHRoZSByYWRpeCB0 cmVlIGFuZCB0aGF0IHRoZSBpbnRyb3NwZWN0aW9uIHRvb2wgc2hvdWxkIGtub3cgd2hhdAppdCB0 cmFja3MsIHdlIHNob3VsZCBjaG9vc2UgdGhlIGxhdGVyLgoKU2lnbmVkLW9mZi1ieTogQWRhbGJl cnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgotLS0KIERvY3VtZW50YXRpb24vdmly dHVhbC9rdm0va3ZtaS5yc3QgfCA0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGFy Y2gveDg2L2t2bS9rdm1pLmMgICAgICAgICAgICAgICAgfCA0NCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9saW51eC9rdm1pLmggICAgICAgICAgfCAxMSArKysr KysrKwogdmlydC9rdm0va3ZtaS5jICAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKysrCiB2 aXJ0L2t2bS9rdm1pX2ludC5oICAgICAgICAgICAgICAgIHwgMTEgKysrKysrKysKIHZpcnQva3Zt L2t2bWlfbXNnLmMgICAgICAgICAgICAgICAgfCAxOCArKysrKysrKysrKysKIDYgZmlsZXMgY2hh bmdlZCwgMTM5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1 YWwva3ZtL2t2bWkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9rdm1pLnJzdAppbmRl eCBjMWQxMmFhYTg2MzMuLjJmZmI5MmIwZmE3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92 aXJ0dWFsL2t2bS9rdm1pLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2t2bWku cnN0CkBAIC02NTAsNiArNjUwLDUwIEBAIElmIFNQUCBpcyBub3QgZW5hYmxlZCwgKktWTUlfR0VU X1BBR0VfV1JJVEVfQklUTUFQKiBhbmQKICogLUtWTV9FT1BOT1RTVVBQIC0gdGhlIGhhcmR3YXJl IGRvZXNuJ3Qgc3VwcG9ydCBTUFAKICogLUtWTV9FT1BOT1RTVVBQIC0gdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gY2FuJ3QgZGlzYWJsZSBTUFAKIAorMTIuIEtWTUlfR0VUX1BBR0VfV1JJVEVf QklUTUFQCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOkFyY2hpdGVjdHVyZXM6 IHg4NgorOlZlcnNpb25zOiA+PSAxCis6UGFyYW1ldGVyczoKKworOjoKKworCXN0cnVjdCBrdm1p X2dldF9wYWdlX3dyaXRlX2JpdG1hcCB7CisJCV9fdTE2IHZpZXc7CisJCV9fdTE2IGNvdW50Owor CQlfX3UzMiBwYWRkaW5nOworCQlfX3U2NCBncGFbMF07CisJfTsKKworOlJldHVybnM6CisKKzo6 CisKKwlzdHJ1Y3Qga3ZtaV9lcnJvcl9jb2RlOworCXN0cnVjdCBrdm1pX2dldF9wYWdlX3dyaXRl X2JpdG1hcF9yZXBseSB7CisJCV9fdTMyIGJpdG1hcFswXTsKKwl9OworCitSZXR1cm5zIHN1YnBh Z2UgcHJvdGVjdGlvbiAoU1BQKSB3cml0ZSBiaXRtYXBzIGZvciBhbiBhcnJheSBvZiBgYGNvdW50 YGAKK2d1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBvZiA0S0Igc2l6ZS4KKworQnkgZGVmYXVsdCwg Zm9yIGFueSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLCB0aGUgcmV0dXJuZWQgYml0cyB3aWxsIGJl IHplcm8KKyhubyB3cml0ZSBhY2Nlc3MgZm9yIGFueSBzdWJwYWdlIGlmIHRoZSAqS1ZNSV9QQUdF X0FDQ0VTU19XKiBmbGFnIGhhcyBiZWVuCitjbGVhcmVkIGZvciB0aGUgd2hvbGUgNEtCIHBhZ2Ug LSBzZWUgKktWTUlfU0VUX1BBR0VfQUNDRVNTKikuCisKK09uIEludGVsIGhhcmR3YXJlIHdpdGgg bXVsdGlwbGUgRVBUIHZpZXdzLCB0aGUgYGB2aWV3YGAgYXJndW1lbnQgc2VsZWN0cyB0aGUKK0VQ VCB2aWV3ICgwIGlzIHByaW1hcnkpLiBPbiBhbGwgb3RoZXIgaGFyZHdhcmUgaXQgbXVzdCBiZSB6 ZXJvLgorCis6RXJyb3JzOgorCisqIC1LVk1fRUlOVkFMIC0gdGhlIHNlbGVjdGVkIFNQVCB2aWV3 IGlzIGludmFsaWQKKyogLUtWTV9FSU5WQUwgLSBwYWRkaW5nIGlzIG5vdCB6ZXJvCisqIC1LVk1f RU9QTk9UU1VQUCAtIGEgU1BUIHZpZXcgd2FzIHNlbGVjdGVkIGJ1dCB0aGUgaGFyZHdhcmUgZG9l c24ndCBzdXBwb3J0IGl0CisqIC1LVk1fRU9QTk9UU1VQUCAtIHRoZSBoYXJkd2FyZSBkb2Vzbid0 IHN1cHBvcnQgU1BQIG9yIGhhc24ndCBiZWVuIGVuYWJsZWQKKyogLUtWTV9FQUdBSU4gLSB0aGUg c2VsZWN0ZWQgdkNQVSBjYW4ndCBiZSBpbnRyb3NwZWN0ZWQgeWV0CisqIC1LVk1fRU5PTUVNIC0g bm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIHJlcGx5CisKIEV2ZW50cwogPT09PT09 CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1pLmMgYi9hcmNoL3g4Ni9rdm0va3ZtaS5j CmluZGV4IDAxZmQyMThlMjEzYy4uMzU2ZWM3OTkzNmIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9r dm0va3ZtaS5jCisrKyBiL2FyY2gveDg2L2t2bS9rdm1pLmMKQEAgLTIyNCw2ICsyMjQsNTAgQEAg aW50IGt2bWlfYXJjaF9jbWRfZ2V0X3BhZ2VfYWNjZXNzKHN0cnVjdCBrdm1pICppa3ZtLAogCXJl dHVybiAwOwogfQogCitpbnQga3ZtaV9hcmNoX2NtZF9nZXRfcGFnZV93cml0ZV9iaXRtYXAoc3Ry dWN0IGt2bWkgKmlrdm0sCisJCQkJCWNvbnN0IHN0cnVjdCBrdm1pX21zZ19oZHIgKm1zZywKKwkJ CQkJY29uc3Qgc3RydWN0IGt2bWlfZ2V0X3BhZ2Vfd3JpdGVfYml0bWFwCisJCQkJCSpyZXEsCisJ CQkJCXN0cnVjdCBrdm1pX2dldF9wYWdlX3dyaXRlX2JpdG1hcF9yZXBseQorCQkJCQkqKmRlc3Qs IHNpemVfdCAqZGVzdF9zaXplKQoreworCXN0cnVjdCBrdm1pX2dldF9wYWdlX3dyaXRlX2JpdG1h cF9yZXBseSAqcnBsID0gTlVMTDsKKwlzaXplX3QgcnBsX3NpemUgPSAwOworCXUxNiBrLCBuID0g cmVxLT5jb3VudDsKKwlpbnQgZWMgPSAwOworCisJaWYgKHJlcS0+cGFkZGluZykKKwkJcmV0dXJu IC1LVk1fRUlOVkFMOworCisJaWYgKG1zZy0+c2l6ZSA8IHNpemVvZigqcmVxKSArIHJlcS0+Y291 bnQgKiBzaXplb2YocmVxLT5ncGFbMF0pKQorCQlyZXR1cm4gLUtWTV9FSU5WQUw7CisKKwlpZiAo IWt2bWlfc3BwX2VuYWJsZWQoaWt2bSkpCisJCXJldHVybiAtS1ZNX0VPUE5PVFNVUFA7CisKKwlp ZiAocmVxLT52aWV3ICE9IDApCS8qIFRPRE8gKi8KKwkJcmV0dXJuIC1LVk1fRU9QTk9UU1VQUDsK KworCXJwbF9zaXplID0gc2l6ZW9mKCpycGwpICsgc2l6ZW9mKHJwbC0+Yml0bWFwWzBdKSAqIG47 CisJcnBsID0ga3ZtaV9tc2dfYWxsb2NfY2hlY2socnBsX3NpemUpOworCWlmICghcnBsKQorCQly ZXR1cm4gLUtWTV9FTk9NRU07CisKKwlmb3IgKGsgPSAwOyBrIDwgbiAmJiBlYyA9PSAwOyBrKysp CisJCWVjID0ga3ZtaV9jbWRfZ2V0X3BhZ2Vfd3JpdGVfYml0bWFwKGlrdm0sIHJlcS0+Z3BhW2td LAorCQkJCQkJICAgICZycGwtPmJpdG1hcFtrXSk7CisKKwlpZiAoZWMpIHsKKwkJa3ZtaV9tc2df ZnJlZShycGwpOworCQlyZXR1cm4gZWM7CisJfQorCisJKmRlc3QgPSBycGw7CisJKmRlc3Rfc2l6 ZSA9IHJwbF9zaXplOworCisJcmV0dXJuIDA7Cit9CisKIGludCBrdm1pX2FyY2hfY21kX3NldF9w YWdlX2FjY2VzcyhzdHJ1Y3Qga3ZtaSAqaWt2bSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBrdm1pX21z Z19oZHIgKm1zZywKIAkJCQkgIGNvbnN0IHN0cnVjdCBrdm1pX3NldF9wYWdlX2FjY2VzcyAqcmVx KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaCBiL2luY2x1ZGUvdWFwaS9s aW51eC9rdm1pLmgKaW5kZXggOWYyYjEzNzE4ZTQ3Li4xOWE2YTUwZGY5NmIgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9saW51eC9rdm1pLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWku aApAQCAtMTQ5LDYgKzE0OSwxNyBAQCBzdHJ1Y3Qga3ZtaV9jb250cm9sX3NwcCB7CiAJX191MzIg cGFkZGluZzM7CiB9OwogCitzdHJ1Y3Qga3ZtaV9nZXRfcGFnZV93cml0ZV9iaXRtYXAgeworCV9f dTE2IHZpZXc7CisJX191MTYgY291bnQ7CisJX191MzIgcGFkZGluZzsKKwlfX3U2NCBncGFbMF07 Cit9OworCitzdHJ1Y3Qga3ZtaV9nZXRfcGFnZV93cml0ZV9iaXRtYXBfcmVwbHkgeworCV9fdTMy IGJpdG1hcFswXTsKK307CisKIHN0cnVjdCBrdm1pX2dldF92Y3B1X2luZm9fcmVwbHkgewogCV9f dTY0IHRzY19zcGVlZDsKIH07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pLmMgYi92aXJ0L2t2 bS9rdm1pLmMKaW5kZXggZTE4ZGZmZmEyNWFjLi4yMmUyMzNjYTQ3NGMgMTAwNjQ0Ci0tLSBhL3Zp cnQva3ZtL2t2bWkuYworKysgYi92aXJ0L2t2bS9rdm1pLmMKQEAgLTExNjEsNiArMTE2MSwxNyBA QCBpbnQga3ZtaV9jbWRfZ2V0X3BhZ2VfYWNjZXNzKHN0cnVjdCBrdm1pICppa3ZtLCB1NjQgZ3Bh LCB1OCAqYWNjZXNzKQogCXJldHVybiAwOwogfQogCitpbnQga3ZtaV9jbWRfZ2V0X3BhZ2Vfd3Jp dGVfYml0bWFwKHN0cnVjdCBrdm1pICppa3ZtLCB1NjQgZ3BhLAorCQkJCSAgIHUzMiAqd3JpdGVf Yml0bWFwKQoreworCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKKwl1OCBpZ25vcmVkX2Fj Y2VzczsKKworCWt2bWlfZ2V0X2dmbl9hY2Nlc3MoaWt2bSwgZ2ZuLCAmaWdub3JlZF9hY2Nlc3Ms IHdyaXRlX2JpdG1hcCk7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGt2bWlfY21kX3NldF9wYWdl X2FjY2VzcyhzdHJ1Y3Qga3ZtaSAqaWt2bSwgdTY0IGdwYSwgdTggYWNjZXNzKQogewogCWdmbl90 IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bWlfaW50Lmgg Yi92aXJ0L2t2bS9rdm1pX2ludC5oCmluZGV4IGQ5YTEwYTNiNzA4Mi4uNzI0M2M1N2JlMjdhIDEw MDY0NAotLS0gYS92aXJ0L2t2bS9rdm1pX2ludC5oCisrKyBiL3ZpcnQva3ZtL2t2bWlfaW50LmgK QEAgLTE1MCw2ICsxNTAsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2V2ZW50X2VuYWJsZWQo c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXZlbnQpCiAJcmV0dXJuIHRlc3RfYml0KGV2ZW50 LCBJVkNQVSh2Y3B1KS0+ZXZfbWFzayk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1pX3Nw cF9lbmFibGVkKHN0cnVjdCBrdm1pICppa3ZtKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmaWt2 bS0+c3BwLmVuYWJsZWQpOworfQorCiAvKiBrdm1pX21zZy5jICovCiBib29sIGt2bWlfc29ja19n ZXQoc3RydWN0IGt2bWkgKmlrdm0sIGludCBmZCk7CiB2b2lkIGt2bWlfc29ja19zaHV0ZG93bihz dHJ1Y3Qga3ZtaSAqaWt2bSk7CkBAIC0xNjcsNiArMTcyLDcgQEAgdm9pZCAqa3ZtaV9tc2dfYWxs b2NfY2hlY2soc2l6ZV90IHNpemUpOwogdm9pZCBrdm1pX21zZ19mcmVlKHZvaWQgKmFkZHIpOwog aW50IGt2bWlfY21kX2dldF9wYWdlX2FjY2VzcyhzdHJ1Y3Qga3ZtaSAqaWt2bSwgdTY0IGdwYSwg dTggKmFjY2Vzcyk7CiBpbnQga3ZtaV9jbWRfc2V0X3BhZ2VfYWNjZXNzKHN0cnVjdCBrdm1pICpp a3ZtLCB1NjQgZ3BhLCB1OCBhY2Nlc3MpOworaW50IGt2bWlfY21kX2dldF9wYWdlX3dyaXRlX2Jp dG1hcChzdHJ1Y3Qga3ZtaSAqaWt2bSwgdTY0IGdwYSwgdTMyICpiaXRtYXApOwogaW50IGt2bWlf Y21kX2NvbnRyb2xfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV2 ZW50X2lkLAogCQkJICAgIGJvb2wgZW5hYmxlKTsKIGludCBrdm1pX2NtZF9jb250cm9sX3ZtX2V2 ZW50cyhzdHJ1Y3Qga3ZtaSAqaWt2bSwgdW5zaWduZWQgaW50IGV2ZW50X2lkLApAQCAtMTkxLDYg KzE5NywxMSBAQCBpbnQga3ZtaV9hcmNoX2NtZF9zZXRfcGFnZV9hY2Nlc3Moc3RydWN0IGt2bWkg Kmlrdm0sCiAJCQkJICBjb25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICptc2csCiAJCQkJICBjb25z dCBzdHJ1Y3Qga3ZtaV9zZXRfcGFnZV9hY2Nlc3MgKnJlcSk7CiBpbnQga3ZtaV9hcmNoX2NtZF9j b250cm9sX3NwcChzdHJ1Y3Qga3ZtaSAqaWt2bSk7CitpbnQga3ZtaV9hcmNoX2NtZF9nZXRfcGFn ZV93cml0ZV9iaXRtYXAoc3RydWN0IGt2bWkgKmlrdm0sCisJCQkJCWNvbnN0IHN0cnVjdCBrdm1p X21zZ19oZHIgKm1zZywKKwkJCQkJY29uc3Qgc3RydWN0IGt2bWlfZ2V0X3BhZ2Vfd3JpdGVfYml0 bWFwICpyZXEsCisJCQkJCXN0cnVjdCBrdm1pX2dldF9wYWdlX3dyaXRlX2JpdG1hcF9yZXBseSAq KmRlc3QsCisJCQkJCXNpemVfdCAqZGVzdF9zaXplKTsKIHZvaWQga3ZtaV9hcmNoX3NldHVwX2V2 ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bWlfZXZlbnQgKmV2KTsKIGJvb2wg a3ZtaV9hcmNoX3BmX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBndmFf dCBndmEsCiAJCQl1OCBhY2Nlc3MpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtaV9tc2cuYyBi L3ZpcnQva3ZtL2t2bWlfbXNnLmMKaW5kZXggZTUwMWE4MDdjOGEyLi5lYjI0N2FjM2UwMzcgMTAw NjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bWlfbXNnLmMKKysrIGIvdmlydC9rdm0va3ZtaV9tc2cuYwpA QCAtMzEsNiArMzEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbXNnX0lEc1tdID0gewog CVtLVk1JX0VWRU5UX1JFUExZXSAgICAgICAgICAgPSAiS1ZNSV9FVkVOVF9SRVBMWSIsCiAJW0tW TUlfR0VUX0dVRVNUX0lORk9dICAgICAgICA9ICJLVk1JX0dFVF9HVUVTVF9JTkZPIiwKIAlbS1ZN SV9HRVRfUEFHRV9BQ0NFU1NdICAgICAgID0gIktWTUlfR0VUX1BBR0VfQUNDRVNTIiwKKwlbS1ZN SV9HRVRfUEFHRV9XUklURV9CSVRNQVBdID0gIktWTUlfR0VUX1BBR0VfV1JJVEVfQklUTUFQIiwK IAlbS1ZNSV9HRVRfVkNQVV9JTkZPXSAgICAgICAgID0gIktWTUlfR0VUX1ZDUFVfSU5GTyIsCiAJ W0tWTUlfR0VUX1ZFUlNJT05dICAgICAgICAgICA9ICJLVk1JX0dFVF9WRVJTSU9OIiwKIAlbS1ZN SV9TRVRfUEFHRV9BQ0NFU1NdICAgICAgID0gIktWTUlfU0VUX1BBR0VfQUNDRVNTIiwKQEAgLTM4 Myw2ICszODQsMjIgQEAgc3RhdGljIGludCBoYW5kbGVfc2V0X3BhZ2VfYWNjZXNzKHN0cnVjdCBr dm1pICppa3ZtLAogCXJldHVybiBrdm1pX21zZ192bV9tYXliZV9yZXBseShpa3ZtLCBtc2csIGVj LCBOVUxMLCAwKTsKIH0KIAorc3RhdGljIGludCBoYW5kbGVfZ2V0X3BhZ2Vfd3JpdGVfYml0bWFw KHN0cnVjdCBrdm1pICppa3ZtLAorCQkJCQljb25zdCBzdHJ1Y3Qga3ZtaV9tc2dfaGRyICptc2cs CisJCQkJCWNvbnN0IHZvaWQgKnJlcSkKK3sKKwlzdHJ1Y3Qga3ZtaV9nZXRfcGFnZV93cml0ZV9i aXRtYXBfcmVwbHkgKnJwbCA9IE5VTEw7CisJc2l6ZV90IHJwbF9zaXplID0gMDsKKwlpbnQgZXJy LCBlYzsKKworCWVjID0ga3ZtaV9hcmNoX2NtZF9nZXRfcGFnZV93cml0ZV9iaXRtYXAoaWt2bSwg bXNnLCByZXEsICZycGwsCisJCQkJCQkgJnJwbF9zaXplKTsKKworCWVyciA9IGt2bWlfbXNnX3Zt X21heWJlX3JlcGx5KGlrdm0sIG1zZywgZWMsIHJwbCwgcnBsX3NpemUpOworCWt2bWlfbXNnX2Zy ZWUocnBsKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgYm9vbCBpbnZhbGlkX3ZjcHVfaGRy KGNvbnN0IHN0cnVjdCBrdm1pX3ZjcHVfaGRyICpoZHIpCiB7CiAJcmV0dXJuIGhkci0+cGFkZGlu ZzEgfHwgaGRyLT5wYWRkaW5nMjsKQEAgLTQwMCw2ICs0MTcsNyBAQCBzdGF0aWMgaW50KCpjb25z dCBtc2dfdm1bXSkoc3RydWN0IGt2bWkgKiwgY29uc3Qgc3RydWN0IGt2bWlfbXNnX2hkciAqLAog CVtLVk1JX0NPTlRST0xfVk1fRVZFTlRTXSAgICAgPSBoYW5kbGVfY29udHJvbF92bV9ldmVudHMs CiAJW0tWTUlfR0VUX0dVRVNUX0lORk9dICAgICAgICA9IGhhbmRsZV9nZXRfZ3Vlc3RfaW5mbywK IAlbS1ZNSV9HRVRfUEFHRV9BQ0NFU1NdICAgICAgID0gaGFuZGxlX2dldF9wYWdlX2FjY2VzcywK KwlbS1ZNSV9HRVRfUEFHRV9XUklURV9CSVRNQVBdID0gaGFuZGxlX2dldF9wYWdlX3dyaXRlX2Jp dG1hcCwKIAlbS1ZNSV9HRVRfVkVSU0lPTl0gICAgICAgICAgID0gaGFuZGxlX2dldF92ZXJzaW9u LAogCVtLVk1JX1NFVF9QQUdFX0FDQ0VTU10gICAgICAgPSBoYW5kbGVfc2V0X3BhZ2VfYWNjZXNz LAogfTsKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmly dHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5k YXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3ZpcnR1YWxpemF0aW9u