From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 68/92] kvm: x86: emulate a guest page table walk on SPT violations due to A/D bit updates Date: Fri, 9 Aug 2019 19:00:23 +0300 Message-ID: <20190809160047.8319-69-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 , Sean Christopherson , 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 RnJvbTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPgoKT24gU1BUIHBhZ2Ug ZmF1bHRzIGNhdXNlZCBieSBndWVzdCBwYWdlIHRhYmxlIHdhbGtzLCB1c2UgdGhlIGV4aXN0aW5n Cmd1ZXN0IHBhZ2UgdGFibGUgd2FsayBjb2RlIHRvIG1ha2UgdGhlIG5lY2Vzc2FyeSBhZGp1c3Rt ZW50cyB0byB0aGUgQS9ECmJpdHMgYW5kIHJldHVybiB0byBndWVzdC4gVGhpcyBlZmZlY3RpdmVs eSBieXBhc3NlcyB0aGUgeDg2IGVtdWxhdG9yCndobyB3YXMgbWFraW5nIHRoZSB3cm9uZyBtb2Rp ZmljYXRpb25zIGxlYWRpbmcgb25lIE9TIChXaW5kb3dzIDguMSB4NjQpCnRvIHRyaXBsZS1mYXVs dCB2ZXJ5IGVhcmx5IGluIHRoZSBib290IHByb2Nlc3Mgd2l0aCB0aGUgaW50cm9zcGVjdGlvbgpl bmFibGVkLgoKV2l0aCBpbnRyb3NwZWN0aW9uIGRpc2FibGVkLCB0aGVzZSBmYXVsdHMgYXJlIGhh bmRsZWQgYnkgc2ltcGx5IHJlbW92aW5nCnRoZSBwcm90ZWN0aW9uIGZyb20gdGhlIGFmZmVjdGVk IGd1ZXN0IHBhZ2UgYW5kIHJldHVybmluZyB0byBndWVzdC4KCkNDOiBTZWFuIENocmlzdG9waGVy c29uIDxzZWFuLmouY2hyaXN0b3BoZXJzb25AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBNaWhh aSBEb27Im3UgPG1kb250dUBiaXRkZWZlbmRlci5jb20+ClNpZ25lZC1vZmYtYnk6IEFkYWxiZXJ0 IExhesSDciA8YWxhemFyQGJpdGRlZmVuZGVyLmNvbT4KLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2Fz bS9rdm1faG9zdC5oICB8ICAyICstCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1pX2hvc3QuaCB8 ICA2ICsrKysrKwogYXJjaC94ODYva3ZtL2t2bWkuYyAgICAgICAgICAgICAgfCAzNCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQogYXJjaC94ODYva3ZtL21tdS5jICAgICAgICAgICAg ICAgfCAxMSArKysrKysrKystLQogYXJjaC94ODYva3ZtL3g4Ni5jICAgICAgICAgICAgICAgfCAg NiArKystLS0KIGluY2x1ZGUvbGludXgva3ZtaS5oICAgICAgICAgICAgIHwgIDMgKysrCiB2aXJ0 L2t2bS9rdm1pLmMgICAgICAgICAgICAgICAgICB8IDMxICsrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjM5MjY3OGRkZTQ2Li43OWYzYWE2OTI4ZTUg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94 ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTQyNSw3ICsxNDI1LDcgQEAgZ3BhX3Qga3Zt X21tdV9ndmFfdG9fZ3BhX2ZldGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAog Z3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3Zh X3QgZ3ZhLAogCQkJICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pOwogZ3Bh X3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90 IGd2YSwKLQkJCQlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKKwkJCQl1MzIgYWNj ZXNzLCBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKIAogdm9pZCBrdm1fdmNwdV9k ZWFjdGl2YXRlX2FwaWN2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL2t2bWlfaG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3Zt aV9ob3N0LmgKaW5kZXggM2YwNjZlN2ZlZWUyLi43MzM2OTg3NGYzYTggMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL2t2bWlfaG9zdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L2t2bWlfaG9zdC5oCkBAIC0xNiw2ICsxNiw3IEBAIGJvb2wga3ZtaV9tb25pdG9yZWRfbXNyKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcik7CiBib29sIGt2bWlfY3JfZXZlbnQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgY3IsCiAJCSAgIHVuc2lnbmVkIGxvbmcgb2xk X3ZhbHVlLCB1bnNpZ25lZCBsb25nICpuZXdfdmFsdWUpOwogdm9pZCBrdm1pX3hzZXRidl9ldmVu dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworYm9vbCBrdm1pX3VwZGF0ZV9hZF9mbGFncyhzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZWxzZSAvKiBDT05GSUdfS1ZNX0lOVFJPU1BFQ1RJT04g Ki8KIApAQCAtNDAsNiArNDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bWlfeHNldGJ2X2V2 ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGt2 bWlfdXBkYXRlX2FkX2ZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gZmFs c2U7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVFJPU1BFQ1RJT04gKi8KIAogI2VuZGlm IC8qIF9BU01fWDg2X0tWTUlfSE9TVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3Zt aS5jIGIvYXJjaC94ODYva3ZtL2t2bWkuYwppbmRleCA5ZDY2YzdkNmM5NTMuLjUzMTJmMTc5YWY5 YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bWkuYworKysgYi9hcmNoL3g4Ni9rdm0va3Zt aS5jCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBrdm1pX2FyY2hfYnJlYWtwb2ludF9ldmVudChz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmEsIHU4IGluc25fbGVuKQogCXUzMiBhY3Rpb247 CiAJdTY0IGdwYTsKIAotCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9zeXN0ZW0odmNwdSwgZ3Zh LCBOVUxMKTsKKwlncGEgPSBrdm1fbW11X2d2YV90b19ncGFfc3lzdGVtKHZjcHUsIGd2YSwgMCwg TlVMTCk7CiAKIAlhY3Rpb24gPSBrdm1pX21zZ19zZW5kX2JwKHZjcHUsIGdwYSwgaW5zbl9sZW4p OwogCXN3aXRjaCAoYWN0aW9uKSB7CkBAIC04MjIsNiArODIyLDM4IEBAIHU4IGt2bWlfYXJjaF9y ZWxheF9wYWdlX2FjY2Vzcyh1OCBvbGQsIHU4IG5ldykKIAlyZXR1cm4gcmV0OwogfQogCitib29s IGt2bWlfdXBkYXRlX2FkX2ZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qg eDg2X2V4Y2VwdGlvbiBleGNlcHRpb24gPSB7IH07CisJc3RydWN0IGt2bWkgKmlrdm07CisJYm9v bCByZXQgPSBmYWxzZTsKKwlndmFfdCBndmE7CisJZ3BhX3QgZ3BhOworCisJaWt2bSA9IGt2bWlf Z2V0KHZjcHUtPmt2bSk7CisJaWYgKCFpa3ZtKQorCQlyZXR1cm4gZmFsc2U7CisKKwlndmEgPSBr dm1fbW11X2ZhdWx0X2dsYSh2Y3B1KTsKKworCWlmIChndmEgPT0gfjB1bGwpIHsKKwkJa3ZtaV93 YXJuX29uY2UoaWt2bSwgIiVzOiBjYW5ub3QgcGVyZm9ybSB0cmFuc2xhdGlvblxuIiwKKwkJCSAg ICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCWdwYSA9IGt2bV9tbXVfZ3ZhX3Rv X2dwYV9zeXN0ZW0odmNwdSwgZ3ZhLCBQRkVSUl9XUklURV9NQVNLLCBOVUxMKTsKKwlpZiAoZ3Bh ID09IFVOTUFQUEVEX0dWQSkKKwkJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbSh2Y3B1 LCBndmEsIDAsICZleGNlcHRpb24pOworCisJcmV0ID0gKGdwYSAhPSBVTk1BUFBFRF9HVkEpOwor CitvdXQ6CisJa3ZtaV9wdXQodmNwdS0+a3ZtKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRp YyBjb25zdCBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCBhbGxvd19iaXQ7CiAJZW51bSBrdm1fcGFn ZV90cmFja19tb2RlIHRyYWNrX21vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMg Yi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggYzJmODYzNzk3NDk1Li42NWI2YWNiYTgyZGEgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAg LTQwLDcgKzQwLDkgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGlu dXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5fbGV2ZWxzLmg+CisjaW5jbHVkZSA8bGlu dXgva3ZtaS5oPgogCisjaW5jbHVkZSA8YXNtL2t2bWlfaG9zdC5oPgogI2luY2x1ZGUgPGFzbS9w YWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BhdC5oPgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CkBA IC01OTYwLDggKzU5NjIsMTMgQEAgaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGd2YV90IGNyMiwgdTY0IGVycm9yX2NvZGUsCiAJICovCiAJaWYgKHZjcHUtPmFy Y2gubW11LT5kaXJlY3RfbWFwICYmCiAJICAgIChlcnJvcl9jb2RlICYgUEZFUlJfTkVTVEVEX0dV RVNUX1BBR0UpID09IFBGRVJSX05FU1RFRF9HVUVTVF9QQUdFKSB7Ci0JCWt2bV9tbXVfdW5wcm90 ZWN0X3BhZ2UodmNwdS0+a3ZtLCBncGFfdG9fZ2ZuKGNyMikpOwotCQlyZXR1cm4gMTsKKwkJaWYg KGt2bWlfdHJhY2tlZF9nZm4odmNwdSwgZ3BhX3RvX2dmbihjcjIpKSkgeworCQkJaWYgKGt2bWlf dXBkYXRlX2FkX2ZsYWdzKHZjcHUpKQorCQkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJa3Zt X21tdV91bnByb3RlY3RfcGFnZSh2Y3B1LT5rdm0sIGdwYV90b19nZm4oY3IyKSk7CisJCQlyZXR1 cm4gMTsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9h cmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggZGQxMGY5ZTBjMDU0Li4yYzA2ZGU3M2E3ODQgMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUx NzUsOSArNTE3NSw5IEBAIGdwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZShzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKIAogLyogdXNlcyB0aGlzIHRvIGFjY2VzcyBhbnkgZ3Vl c3QncyBtYXBwZWQgbWVtb3J5IHdpdGhvdXQgY2hlY2tpbmcgQ1BMICovCiBncGFfdCBrdm1fbW11 X2d2YV90b19ncGFfc3lzdGVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAotCQkJ CXN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCisJCQkJdTMyIGFjY2Vzcywgc3RydWN0 IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKLQlyZXR1cm4gdmNwdS0+YXJjaC53YWxrX21t dS0+Z3ZhX3RvX2dwYSh2Y3B1LCBndmEsIDAsIGV4Y2VwdGlvbik7CisJcmV0dXJuIHZjcHUtPmFy Y2gud2Fsa19tbXUtPmd2YV90b19ncGEodmNwdSwgZ3ZhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7CiB9 CiAKIHN0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoZ3ZhX3QgYWRkciwgdm9p ZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCkBAIC04OTA0LDcgKzg5MDQsNyBAQCBpbnQga3Zt X2FyY2hfdmNwdV9pb2N0bF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXZjcHVf bG9hZCh2Y3B1KTsKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwot CWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9zeXN0ZW0odmNwdSwgdmFkZHIsIE5VTEwpOworCWdw YSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9zeXN0ZW0odmNwdSwgdmFkZHIsIDAsIE5VTEwpOwogCXNy Y3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgaWR4KTsKIAl0ci0+cGh5c2ljYWxfYWRk cmVzcyA9IGdwYTsKIAl0ci0+dmFsaWQgPSBncGEgIT0gVU5NQVBQRURfR1ZBOwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9rdm1pLmggYi9pbmNsdWRlL2xpbnV4L2t2bWkuaAppbmRleCA2OWRi MDI3OTVmYzAuLjEwY2Q2YzY0MTJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1pLmgK KysrIGIvaW5jbHVkZS9saW51eC9rdm1pLmgKQEAgLTIxLDYgKzIxLDcgQEAgYm9vbCBrdm1pX2h5 cGVyY2FsbF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogYm9vbCBrdm1pX3F1ZXVlX2V4 Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1pX3RyYXBfZXZlbnQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtaV9kZXNjcmlwdG9yX2V2ZW50KHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgdTggZGVzY3JpcHRvciwgdTggd3JpdGUpOworYm9vbCBrdm1pX3RyYWNr ZWRfZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKTsKIGJvb2wga3ZtaV9zaW5n bGVfc3RlcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgaW50ICplbXVsYXRpb25f dHlwZSk7CiB2b2lkIGt2bWlfaGFuZGxlX3JlcXVlc3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7 CiB2b2lkIGt2bWlfc3RvcF9zcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpAQCAtMzYsNiArMzcs OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtaV91bmluaXQodm9pZCkgeyB9CiBzdGF0aWMgaW5s aW5lIHZvaWQga3ZtaV9jcmVhdGVfdm0oc3RydWN0IGt2bSAqa3ZtKSB7IH0KIHN0YXRpYyBpbmxp bmUgdm9pZCBrdm1pX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKSB7IH0KIHN0YXRpYyBpbmxp bmUgaW50IGt2bWlfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gMDsg fQorc3RhdGljIGlubGluZSBib29sIGt2bWlfdHJhY2tlZF9nZm4oc3RydWN0IGt2bV92Y3B1ICp2 Y3B1LCBnZm5fdCBnZm4pCisJCQl7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSBib29s IGt2bWlfYnJlYWtwb2ludF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmEsCiAJ CQkJCSB1OCBpbnNuX2xlbikKIAkJCXsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL3ZpcnQv a3ZtL2t2bWkuYyBiL3ZpcnQva3ZtL2t2bWkuYwppbmRleCAxNGVhZGMzYjljYTkuLmNhMTQ2ZmZl YzA2MSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtaS5jCisrKyBiL3ZpcnQva3ZtL2t2bWkuYwpA QCAtMTkzLDYgKzE5MywzMyBAQCBzdGF0aWMgYm9vbCBrdm1pX3Jlc3RyaWN0ZWRfYWNjZXNzKHN0 cnVjdCBrdm1pICppa3ZtLCBncGFfdCBncGEsIHU4IGFjY2VzcykKIAlyZXR1cm4gZmFsc2U7CiB9 CiAKK2Jvb2wgaXNfdHJhY2tlZF9nZm4oc3RydWN0IGt2bWkgKmlrdm0sIGdmbl90IGdmbikKK3sK KwlzdHJ1Y3Qga3ZtaV9tZW1fYWNjZXNzICptOworCisJcmVhZF9sb2NrKCZpa3ZtLT5hY2Nlc3Nf dHJlZV9sb2NrKTsKKwltID0gX19rdm1pX2dldF9nZm5fYWNjZXNzKGlrdm0sIGdmbik7CisJcmVh ZF91bmxvY2soJmlrdm0tPmFjY2Vzc190cmVlX2xvY2spOworCisJcmV0dXJuICEhbTsKK30KKwor Ym9vbCBrdm1pX3RyYWNrZWRfZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKQor eworCXN0cnVjdCBrdm1pICppa3ZtOworCWJvb2wgcmV0OworCisJaWt2bSA9IGt2bWlfZ2V0KHZj cHUtPmt2bSk7CisJaWYgKCFpa3ZtKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXQgPSBpc190cmFj a2VkX2dmbihpa3ZtLCBnZm4pOworCisJa3ZtaV9wdXQodmNwdS0+a3ZtKTsKKworCXJldHVybiBy ZXQ7Cit9CisKIHN0YXRpYyB2b2lkIGt2bWlfY2xlYXJfbWVtX2FjY2VzcyhzdHJ1Y3Qga3ZtICpr dm0pCiB7CiAJdm9pZCAqKnNsb3Q7CkBAIC0xNjgxLDcgKzE3MDgsNyBAQCBzdGF0aWMgaW50IHdy aXRlX2N1c3RvbV9kYXRhX3RvX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEs CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJZ3BhX3QgZ3BhOwogCi0JZ3BhID0ga3ZtX21tdV9ndmFf dG9fZ3BhX3N5c3RlbSh2Y3B1LCBndmEsIE5VTEwpOworCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dw YV9zeXN0ZW0odmNwdSwgZ3ZhLCAwLCBOVUxMKTsKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkK IAkJcmV0dXJuIC1LVk1fRUlOVkFMOwogCkBAIC0xNzM4LDcgKzE3NjUsNyBAQCBzdGF0aWMgaW50 IHJlc3RvcmVfYmFja3VwX2RhdGFfdG9fcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90 IGd2YSwKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlncGFfdCBncGE7CiAKLQlncGEgPSBrdm1fbW11 X2d2YV90b19ncGFfc3lzdGVtKHZjcHUsIGd2YSwgTlVMTCk7CisJZ3BhID0ga3ZtX21tdV9ndmFf dG9fZ3BhX3N5c3RlbSh2Y3B1LCBndmEsIDAsIE5VTEwpOwogCWlmIChncGEgPT0gVU5NQVBQRURf R1ZBKQogCQlyZXR1cm4gLUtWTV9FSU5WQUw7CiAKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxp emF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3Vu ZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u