From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 03/14] AMD/IOMMU: Fix multiple reference counting errors Date: Wed, 21 Nov 2018 13:21:11 +0000 Message-ID: <1542806482-24030-4-git-send-email-andrew.cooper3@citrix.com> References: <1542806482-24030-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1542806482-24030-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Jan Beulich , Andrew Cooper , Suravee Suthikulpanit , Brian Woods , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org TW9zdCBvZiB0aGVzZSBpc3N1ZXMgd291bGQgYmUgWFNBcyBpZiB0aGVzZSBwYXRocyB3ZXJlIGFj Y2Vzc2libGUgdG8gZ3Vlc3RzLgoKRmlyc3QsIG92ZXJyaWRlIHRoZSB7Z2V0LHB1dH1fZ2ZuKCkg aGVscGVycyB0byB1c2UgZ2ZuX3QsIHdoaWNoIHdhcyB0aGUKb3JpZ2luYWwgcHVycG9zZSBvZiB0 aGlzIHBhdGNoLgoKZ3Vlc3RfaW9tbXVfZ2V0X3RhYmxlX21mbigpIGhhcyB0d28gYnVncy4gIEZp cnN0LCBpdCBnZXRzIGEgcmVmIG9uIG9uZSBnZm4sCmFuZCBwdXRzIGEgcmVmIGZvciBhIGRpZmZl cmVudCBnZm4uICBUaGlzIGlzIG9ubHkgYSBsYXRlbnQgYnVnIGZvciBub3csIGFzIHdlCmRvbid0 IGRvIHBlci1nZm4gbG9ja2luZyB5ZXQuICBOZXh0LCB0aGUgbWZuIHJldHVybiB2YWx1ZSBpcyB1 bnNhZmUgdG8gdXNlCmFmdGVyIHB1dF9nZm4oKSBpcyBjYWxsZWQsIGFzIHRoZSBndWVzdCBjb3Vs ZCBoYXZlIGZyZWVkIHRoZSBwYWdlIGluIHRoZQptZWFudGltZS4KCkluIGFkZGl0aW9uLCBnZXRf Z2ZuX2Zyb21fYmFzZV9yZWcoKSBlcnJvbmVvdXNseSBhc3NlcnRzIHRoYXQgYmFzZV9yYXcgY2Fu J3QKYmUgMCwgYnV0IGl0IG1heSBsZWdpdGltYXRlbHkgYmUuICBPbiB0b3Agb2YgdGhhdCwgdGhl IHJldHVybiB2YWx1ZSBmcm9tCmd1ZXN0X2lvbW11X2dldF90YWJsZV9tZm4oKSBpcyBwYXNzZWQg aW50byBtYXBfZG9tYWluX3BhZ2UoKSBiZWZvcmUgY2hlY2tpbmcKdGhhdCBpdCBpcyBhIHJlYWwg bWZuLgoKTW9zdCBvZiB0aGUgY29tcGxleGl0eSBoZXJlIGlzIGlubGluaW5nIGd1ZXN0X2lvbW11 X2dldF90YWJsZV9tZm4oKSBhbmQKaG9sZGluZyB0aGUgZ2ZuIHJlZmVyZW5jZSB1bnRpbCB0aGUg b3BlcmF0aW9uIGlzIGNvbXBsZXRlLgoKRnVydGhlcm1vcmUsIGd1ZXN0X2lvbW11X3Byb2Nlc3Nf Y29tbWFuZCgpIGlzIGFsdGVyZWQgdG8gdGFrZSBhIGxvY2FsIGNvcHkgb2YKY21kX2VudHJ5X3Qs IHJhdGhlciB0aGFuIHBhc3NpbmcgYSBwb2ludGVyIHRvIGd1ZXN0IGNvbnRyb2xsZWQgbWVtb3J5 IGludG8KZWFjaCBvZiB0aGUgaGFuZGxpbmcgZnVuY3Rpb25zLiAgSXQgaXMgYWxzbyBtb2RpZmll ZCB0byBicmVhayBvbiBlcnJvciByYXRoZXIKdGhhbiBjb250aW51ZS4gIFRoZXNlIGNoYW5nZXMg YXJlIGluIGxpbmUgd2l0aCB0aGUgc3BlYyB3aGljaCBzdGF0ZXMgdGhhdCB0aGUKSU9NTVUgd2ls bCBzdHJpY3RseSByZWFkIGEgY29tbWFuZCBlbnRyeSBvbmNlLCBhbmQgd2lsbCBjZWFzZSBwcm9j ZXNzaW5nIGlmIGFuCmVycm9yIGlzIGVuY291bnRlcmVkLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8 SkJldWxpY2hAc3VzZS5jb20+CkNDOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpDQzog Um9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+CkNDOiBTdXJhdmVlIFN1dGhp a3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgpDQzogQnJpYW4gV29vZHMg PGJyaWFuLndvb2RzQGFtZC5jb20+CgpUaGlzIHBhdGNoIG15IG5vIG1lYW5zIGluZGljYXRlcyB0 aGF0IHRoZSBjb2RlIGlzIHJlYWR5IGZvciBwcm9kdWN0aW9uIHVzZS4KLS0tCiB4ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfZ3Vlc3QuYyB8IDIyNCArKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNDYgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11X2d1 ZXN0LmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfZ3Vlc3QuYwppbmRleCA5 NjE3NWJiLi4wM2NhMGNmIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQv aW9tbXVfZ3Vlc3QuYworKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfZ3Vl c3QuYwpAQCAtMjEsNiArMjEsMTMgQEAKICNpbmNsdWRlIDxhc20vYW1kLWlvbW11Lmg+CiAjaW5j bHVkZSA8YXNtL2h2bS9zdm0vYW1kLWlvbW11LXByb3RvLmg+CiAKKy8qIE92ZXJyaWRlIHtnZXQs cHV0fV9nZm4gdG8gd29yayB3aXRoIGdmbl90ICovCisjdW5kZWYgZ2V0X2dmbgorI2RlZmluZSBn ZXRfZ2ZuKGQsIGcsIHQpIGdldF9nZm5fdHlwZShkLCBnZm5feChnKSwgdCwgUDJNX0FMTE9DKQor I3VuZGVmIGdldF9nZm5fcXVlcnkKKyNkZWZpbmUgZ2V0X2dmbl9xdWVyeShkLCBnLCB0KSBnZXRf Z2ZuX3R5cGUoZCwgZ2ZuX3goZyksIHQsIDApCisjdW5kZWYgcHV0X2dmbgorI2RlZmluZSBwdXRf Z2ZuKGQsIGcpIF9fcHV0X2dmbihwMm1fZ2V0X2hvc3RwMm0oZCksIGdmbl94KGcpKQogCiAjZGVm aW5lIElPTU1VX01NSU9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKICNkZWZp bmUgSU9NTVVfTU1JT19QQUdFX05SICAgICAgICAgICAgICAgICAgICAgIDB4OApAQCAtMTE3LDEz ICsxMjQsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGhvc3RfZG9taWQoc3RydWN0IGRvbWFpbiAq ZCwgdWludDY0X3QgZ19kb21pZCkKICAgICByZXR1cm4gZC0+ZG9tYWluX2lkOwogfQogCi1zdGF0 aWMgdW5zaWduZWQgbG9uZyBnZXRfZ2ZuX2Zyb21fYmFzZV9yZWcodWludDY0X3QgYmFzZV9yYXcp Ci17Ci0gICAgYmFzZV9yYXcgJj0gUEFERFJfTUFTSzsKLSAgICBBU1NFUlQgKCBiYXNlX3JhdyAh PSAwICk7Ci0gICAgcmV0dXJuIGJhc2VfcmF3ID4+IFBBR0VfU0hJRlQ7Ci19Ci0KIHN0YXRpYyB2 b2lkIGd1ZXN0X2lvbW11X2RlbGl2ZXJfbXNpKHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgdWlu dDhfdCB2ZWN0b3IsIGRlc3QsIGRlc3RfbW9kZSwgZGVsaXZlcnlfbW9kZSwgdHJpZ19tb2RlOwpA QCAtMTM4LDIzICsxMzgsNiBAQCBzdGF0aWMgdm9pZCBndWVzdF9pb21tdV9kZWxpdmVyX21zaShz dHJ1Y3QgZG9tYWluICpkKQogICAgIHZtc2lfZGVsaXZlcihkLCB2ZWN0b3IsIGRlc3QsIGRlc3Rf bW9kZSwgZGVsaXZlcnlfbW9kZSwgdHJpZ19tb2RlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxv bmcgZ3Vlc3RfaW9tbXVfZ2V0X3RhYmxlX21mbihzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBiYXNlX3JhdywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGVudHJ5X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBwb3MpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBpZHgsIGdmbiwg bWZuOwotICAgIHAybV90eXBlX3QgcDJtdDsKLQotICAgIGdmbiA9IGdldF9nZm5fZnJvbV9iYXNl X3JlZyhiYXNlX3Jhdyk7Ci0gICAgaWR4ID0gKHBvcyAqIGVudHJ5X3NpemUpID4+IFBBR0VfU0hJ RlQ7Ci0KLSAgICBtZm4gPSBtZm5feChnZXRfZ2ZuKGQsIGdmbiArIGlkeCwgJnAybXQpKTsKLSAg ICBwdXRfZ2ZuKGQsIGdmbik7Ci0KLSAgICByZXR1cm4gbWZuOwotfQotCiBzdGF0aWMgdm9pZCBn dWVzdF9pb21tdV9lbmFibGVfZGV2X3RhYmxlKHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXUpCiB7 CiAgICAgdWludDMyX3QgbGVuZ3RoX3JhdyA9IGdldF9maWVsZF9mcm9tX3JlZ191MzIoaW9tbXUt PmRldl90YWJsZS5yZWdfYmFzZS5sbywKQEAgLTE3Niw3ICsxNTksMTAgQEAgc3RhdGljIHZvaWQg Z3Vlc3RfaW9tbXVfZW5hYmxlX3JpbmdfYnVmZmVyKHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXUs CiB2b2lkIGd1ZXN0X2lvbW11X2FkZF9wcHJfbG9nKHN0cnVjdCBkb21haW4gKmQsIHUzMiBlbnRy eVtdKQogewogICAgIHVpbnQxNl90IGdkZXZfaWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtZm4sIHRh aWwsIGhlYWQ7CisgICAgdW5zaWduZWQgbG9uZyB0YWlsLCBoZWFkOworICAgIG1mbl90IG1mbjsK KyAgICBnZm5fdCBnZm47CisgICAgcDJtX3R5cGVfdCBwMm10OwogICAgIHBwcl9lbnRyeV90ICps b2csICpsb2dfYmFzZTsKICAgICBzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11OwogCkBAIC0xOTcs MTEgKzE4MywyNCBAQCB2b2lkIGd1ZXN0X2lvbW11X2FkZF9wcHJfbG9nKHN0cnVjdCBkb21haW4g KmQsIHUzMiBlbnRyeVtdKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbWZuID0gZ3Vl c3RfaW9tbXVfZ2V0X3RhYmxlX21mbihkLCByZWdfdG9fdTY0KGlvbW11LT5wcHJfbG9nLnJlZ19i YXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwcHJfZW50 cnlfdCksIHRhaWwpOwotICAgIEFTU0VSVChtZm5fdmFsaWQoX21mbihtZm4pKSk7CisgICAgZ2Zu ID0gX2dmbihQRk5fRE9XTihyZWdfdG9fdTY0KGlvbW11LT5wcHJfbG9nLnJlZ19iYXNlKSkgKwor ICAgICAgICAgICAgICAgUEZOX0RPV04odGFpbCAqIHNpemVvZigqbG9nKSkpOwogCi0gICAgbG9n X2Jhc2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICBtZm4gPSBnZXRfZ2ZuKGQs IGdmbiwgJnAybXQpOworICAgIGlmICggbWZuX2VxKG1mbiwgSU5WQUxJRF9NRk4pIHx8ICFwMm1f aXNfcmFtKHAybXQpICkKKyAgICB7CisgICAgICAgIEFNRF9JT01NVV9ERUJVRygKKyAgICAgICAg ICAgICJFcnJvcjogZ3Vlc3QgaW9tbXUgcHByIGxvZyBiYWQgZ2ZuICUiUFJJX2dmbiIsIHR5cGUg JXUsIG1mbiAlIgorICAgICAgICAgICAgUFJJX21mbiIsIHJlZ19iYXNlICUjIlBSSXg2NCIsIHRh aWwgJSNseFxuIiwKKyAgICAgICAgICAgIGdmbl94KGdmbiksIHAybXQsIG1mbl94KG1mbiksCisg ICAgICAgICAgICByZWdfdG9fdTY0KGlvbW11LT5wcHJfbG9nLnJlZ19iYXNlKSwgdGFpbCk7Cisg ICAgICAgIGd1ZXN0X2lvbW11X2Rpc2FibGUoaW9tbXUpOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBBU1NFUlQobWZuX3ZhbGlkKG1mbikpOworCisgICAgbG9nX2Jhc2UgPSBtYXBf ZG9tYWluX3BhZ2UobWZuKTsKICAgICBsb2cgPSBsb2dfYmFzZSArIHRhaWwgJSAoUEFHRV9TSVpF IC8gc2l6ZW9mKHBwcl9lbnRyeV90KSk7CiAKICAgICAvKiBDb252ZXJ0IHBoeXNpY2FsIGRldmlj ZSBpZCBiYWNrIGludG8gdmlydHVhbCBkZXZpY2UgaWQgKi8KQEAgLTIyMCwxMiArMjE5LDE4IEBA IHZvaWQgZ3Vlc3RfaW9tbXVfYWRkX3Bwcl9sb2coc3RydWN0IGRvbWFpbiAqZCwgdTMyIGVudHJ5 W10pCiAgICAgdW5tYXBfZG9tYWluX3BhZ2UobG9nX2Jhc2UpOwogCiAgICAgZ3Vlc3RfaW9tbXVf ZGVsaXZlcl9tc2koZCk7CisKK291dDoKKyAgICBwdXRfZ2ZuKGQsIGdmbik7CiB9CiAKIHZvaWQg Z3Vlc3RfaW9tbXVfYWRkX2V2ZW50X2xvZyhzdHJ1Y3QgZG9tYWluICpkLCB1MzIgZW50cnlbXSkK IHsKICAgICB1aW50MTZfdCBkZXZfaWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtZm4sIHRhaWwsIGhl YWQ7CisgICAgdW5zaWduZWQgbG9uZyB0YWlsLCBoZWFkOworICAgIG1mbl90IG1mbjsKKyAgICBn Zm5fdCBnZm47CisgICAgcDJtX3R5cGVfdCBwMm10OwogICAgIGV2ZW50X2VudHJ5X3QgKmxvZywg KmxvZ19iYXNlOwogICAgIHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXU7CiAKQEAgLTI0NiwxMSAr MjUxLDI0IEBAIHZvaWQgZ3Vlc3RfaW9tbXVfYWRkX2V2ZW50X2xvZyhzdHJ1Y3QgZG9tYWluICpk LCB1MzIgZW50cnlbXSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1mbiA9IGd1ZXN0 X2lvbW11X2dldF90YWJsZV9tZm4oZCwgcmVnX3RvX3U2NChpb21tdS0+ZXZlbnRfbG9nLnJlZ19i YXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihldmVudF9l bnRyeV90KSwgdGFpbCk7Ci0gICAgQVNTRVJUKG1mbl92YWxpZChfbWZuKG1mbikpKTsKKyAgICBn Zm4gPSBfZ2ZuKFBGTl9ET1dOKHJlZ190b191NjQoaW9tbXUtPmV2ZW50X2xvZy5yZWdfYmFzZSkp ICsKKyAgICAgICAgICAgICAgIFBGTl9ET1dOKHRhaWwgKiBzaXplb2YoKmxvZykpKTsKKworICAg IG1mbiA9IGdldF9nZm4oZCwgZ2ZuLCAmcDJtdCk7CisgICAgaWYgKCBtZm5fZXEobWZuLCBJTlZB TElEX01GTikgfHwgIXAybV9pc19yYW0ocDJtdCkgKQorICAgIHsKKyAgICAgICAgQU1EX0lPTU1V X0RFQlVHKAorICAgICAgICAgICAgIkVycm9yOiBndWVzdCBpb21tdSBldmVudCBsb2cgYmFkIGdm biAlIlBSSV9nZm4iLCB0eXBlICV1LCBtZm4gJSIKKyAgICAgICAgICAgIFBSSV9tZm4iLCByZWdf YmFzZSAlIyJQUkl4NjQiLCB0YWlsICUjbHhcbiIsCisgICAgICAgICAgICBnZm5feChnZm4pLCBw Mm10LCBtZm5feChtZm4pLAorICAgICAgICAgICAgcmVnX3RvX3U2NChpb21tdS0+cHByX2xvZy5y ZWdfYmFzZSksIHRhaWwpOworICAgICAgICBndWVzdF9pb21tdV9kaXNhYmxlKGlvbW11KTsKKyAg ICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgQVNTRVJUKG1mbl92YWxpZChtZm4pKTsKIAot ICAgIGxvZ19iYXNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgbG9nX2Jhc2Ug PSBtYXBfZG9tYWluX3BhZ2UobWZuKTsKICAgICBsb2cgPSBsb2dfYmFzZSArIHRhaWwgJSAoUEFH RV9TSVpFIC8gc2l6ZW9mKGV2ZW50X2VudHJ5X3QpKTsKIAogICAgIC8qIHJlLXdyaXRlIHBoeXNp Y2FsIGRldmljZSBpZCBpbnRvIHZpcnR1YWwgZGV2aWNlIGlkICovCkBAIC0yNjksNiArMjg3LDkg QEAgdm9pZCBndWVzdF9pb21tdV9hZGRfZXZlbnRfbG9nKHN0cnVjdCBkb21haW4gKmQsIHUzMiBl bnRyeVtdKQogICAgIHVubWFwX2RvbWFpbl9wYWdlKGxvZ19iYXNlKTsKIAogICAgIGd1ZXN0X2lv bW11X2RlbGl2ZXJfbXNpKGQpOworCitvdXQ6CisgICAgcHV0X2dmbihkLCBnZm4pOwogfQogCiBz dGF0aWMgaW50IGRvX2NvbXBsZXRlX3Bwcl9yZXF1ZXN0KHN0cnVjdCBkb21haW4gKmQsIGNtZF9l bnRyeV90ICpjbWQpCkBAIC0zNDYsMTAgKzM2Nyw4IEBAIHN0YXRpYyBpbnQgZG9faW52YWxpZGF0 ZV9pb3RsYl9wYWdlcyhzdHJ1Y3QgZG9tYWluICpkLCBjbWRfZW50cnlfdCAqY21kKQogCiBzdGF0 aWMgaW50IGRvX2NvbXBsZXRpb25fd2FpdChzdHJ1Y3QgZG9tYWluICpkLCBjbWRfZW50cnlfdCAq Y21kKQogewotICAgIGJvb2xfdCBjb21fd2FpdF9pbnRfZW4sIGNvbV93YWl0X2ludCwgaSwgczsK KyAgICBib29sIGNvbV93YWl0X2ludF9lbiwgY29tX3dhaXRfaW50LCBpLCBzOwogICAgIHN0cnVj dCBndWVzdF9pb21tdSAqaW9tbXU7Ci0gICAgdW5zaWduZWQgbG9uZyBnZm47Ci0gICAgcDJtX3R5 cGVfdCBwMm10OwogCiAgICAgaW9tbXUgPSBkb21haW5faW9tbXUoZCk7CiAKQEAgLTM2Miw3ICsz ODEsMTAgQEAgc3RhdGljIGludCBkb19jb21wbGV0aW9uX3dhaXQoc3RydWN0IGRvbWFpbiAqZCwg Y21kX2VudHJ5X3QgKmNtZCkKICAgICBpZiAoIHMgKQogICAgIHsKICAgICAgICAgdWludDY0X3Qg Z2FkZHJfbG8sIGdhZGRyX2hpLCBnYWRkcl82NCwgZGF0YTsKLSAgICAgICAgdm9pZCAqdmFkZHI7 CisgICAgICAgIG1mbl90IG1mbjsKKyAgICAgICAgZ2ZuX3QgZ2ZuOworICAgICAgICBwMm1fdHlw ZV90IHAybXQ7CisgICAgICAgIHVpbnQ2NF90ICpwdHI7CiAKICAgICAgICAgZGF0YSA9ICh1aW50 NjRfdCljbWQtPmRhdGFbM10gPDwgMzIgfCBjbWQtPmRhdGFbMl07CiAgICAgICAgIGdhZGRyX2xv ID0gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihjbWQtPmRhdGFbMF0sCkBAIC0zNzQsMTMgKzM5Niwy NCBAQCBzdGF0aWMgaW50IGRvX2NvbXBsZXRpb25fd2FpdChzdHJ1Y3QgZG9tYWluICpkLCBjbWRf ZW50cnlfdCAqY21kKQogCiAgICAgICAgIGdhZGRyXzY0ID0gKGdhZGRyX2hpIDw8IDMyKSB8IChn YWRkcl9sbyA8PCAzKTsKIAotICAgICAgICBnZm4gPSBnYWRkcl82NCA+PiBQQUdFX1NISUZUOwot ICAgICAgICB2YWRkciA9IG1hcF9kb21haW5fcGFnZShnZXRfZ2ZuKGQsIGdmbiAsJnAybXQpKTsK LSAgICAgICAgcHV0X2dmbihkLCBnZm4pOworICAgICAgICBnZm4gPSBfZ2ZuKGdhZGRyXzY0ID4+ IFBBR0VfU0hJRlQpOworICAgICAgICBtZm4gPSBnZXRfZ2ZuKGQsIGdmbiwgJnAybXQpOwogCi0g ICAgICAgIHdyaXRlX3U2NF9hdG9taWMoKHVpbnQ2NF90ICopKHZhZGRyICsgKGdhZGRyXzY0ICYg KFBBR0VfU0laRS0xKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotICAgICAg ICB1bm1hcF9kb21haW5fcGFnZSh2YWRkcik7CisgICAgICAgIGlmICggbWZuX2VxKG1mbiwgSU5W QUxJRF9NRk4pIHx8ICFwMm1faXNfcmFtKHAybXQpICkKKyAgICAgICAgeworICAgICAgICAgICAg LyogWFhYIC0gV2hhdCB0byBkbyBoZXJlLCBlcnJvciB3aXNlPyAqLworICAgICAgICAgICAgZ3Vl c3RfaW9tbXVfZGlzYWJsZShpb21tdSk7CisgICAgICAgICAgICBwdXRfZ2ZuKGQsIGdmbik7CisK KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcHRyID0gbWFwX2Rv bWFpbl9wYWdlKG1mbikgKyAoZ2FkZHJfNjQgJiB+UEFHRV9NQVNLKTsKKworICAgICAgICB3cml0 ZV91NjRfYXRvbWljKHB0ciwgZGF0YSk7CisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHB0cik7 CisKKyAgICAgICAgcHV0X2dmbihkLCBnZm4pOwogICAgIH0KIAogICAgIGNvbV93YWl0X2ludF9l biA9IGlvbW11X2dldF9iaXQoaW9tbXUtPnJlZ19jdHJsLmxvLApAQCAtNDAwLDkgKzQzMywxMCBA QCBzdGF0aWMgaW50IGRvX2ludmFsaWRhdGVfZHRlKHN0cnVjdCBkb21haW4gKmQsIGNtZF9lbnRy eV90ICpjbWQpCiAgICAgZGV2X2VudHJ5X3QgKmdkdGUsICptZHRlLCAqZHRlX2Jhc2U7CiAgICAg c3RydWN0IGFtZF9pb21tdSAqaW9tbXUgPSBOVUxMOwogICAgIHN0cnVjdCBndWVzdF9pb21tdSAq Z19pb21tdTsKLSAgICB1aW50NjRfdCBnY3IzX2dmbiwgZ2NyM19tZm47CisgICAgbWZuX3QgZHRl X21mbiwgZ2NyM19tZm47CisgICAgZ2ZuX3QgZHRlX2dmbiwgZ2NyM19nZm47CiAgICAgdWludDhf dCBnbHgsIGd2OwotICAgIHVuc2lnbmVkIGxvbmcgZHRlX21mbiwgZmxhZ3M7CisgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKICAgICBwMm1fdHlwZV90IHAybXQ7CiAKICAgICBnX2lvbW11ID0gZG9t YWluX2lvbW11KGQpOwpAQCAtNDE3LDM1ICs0NTEsNDkgQEAgc3RhdGljIGludCBkb19pbnZhbGlk YXRlX2R0ZShzdHJ1Y3QgZG9tYWluICpkLCBjbWRfZW50cnlfdCAqY21kKQogICAgIGlmICggKGdi ZGYgKiBzaXplb2YoZGV2X2VudHJ5X3QpKSA+IGdfaW9tbXUtPmRldl90YWJsZS5zaXplICkKICAg ICAgICAgcmV0dXJuIDA7CiAKLSAgICBkdGVfbWZuID0gZ3Vlc3RfaW9tbXVfZ2V0X3RhYmxlX21m bihkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ190b191NjQo Z19pb21tdS0+ZGV2X3RhYmxlLnJlZ19iYXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoZGV2X2VudHJ5X3QpLCBnYmRmKTsKLSAgICBBU1NFUlQobWZu X3ZhbGlkKF9tZm4oZHRlX21mbikpKTsKKyAgICBkdGVfZ2ZuID0gX2dmbihQRk5fRE9XTihyZWdf dG9fdTY0KGdfaW9tbXUtPmRldl90YWJsZS5yZWdfYmFzZSkpICsKKyAgICAgICAgICAgICAgICAg ICBQRk5fRE9XTihnYmRmICogc2l6ZW9mKCpnZHRlKSkpOworICAgIGR0ZV9tZm4gPSBnZXRfZ2Zu KGQsIGR0ZV9nZm4sICZwMm10KTsKKworICAgIGlmICggbWZuX2VxKGR0ZV9tZm4sIElOVkFMSURf TUZOKSB8fCAhcDJtX2lzX3JhbShwMm10KSApCisgICAgeworICAgICAgICBwdXRfZ2ZuKGQsIGR0 ZV9nZm4pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBBU1NFUlQobWZuX3ZhbGlk KGR0ZV9tZm4pKTsKIAogICAgIC8qIFJlYWQgZ3Vlc3QgZHRlIGluZm9ybWF0aW9uICovCi0gICAg ZHRlX2Jhc2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihkdGVfbWZuKSk7CisgICAgZHRlX2Jhc2Ug PSBtYXBfZG9tYWluX3BhZ2UoZHRlX21mbik7CiAKICAgICBnZHRlID0gZHRlX2Jhc2UgKyBnYmRm ICUgKFBBR0VfU0laRSAvIHNpemVvZihkZXZfZW50cnlfdCkpOwogCiAgICAgZ2RvbV9pZCAgPSBn ZXRfZG9taWRfZnJvbV9kdGUoZ2R0ZSk7Ci0gICAgZ2NyM19nZm4gPSBnZXRfZ3Vlc3RfY3IzX2Zy b21fZHRlKGdkdGUpOworICAgIGdjcjNfZ2ZuID0gX2dmbihnZXRfZ3Vlc3RfY3IzX2Zyb21fZHRl KGdkdGUpKTsKICAgICBnbHggICAgICA9IGdldF9nbHhfZnJvbV9kdGUoZ2R0ZSk7CiAgICAgZ3Yg ICAgICAgPSBnZXRfZ3ZfZnJvbV9kdGUoZ2R0ZSk7CiAKICAgICB1bm1hcF9kb21haW5fcGFnZShk dGVfYmFzZSk7CisgICAgcHV0X2dmbihkLCBkdGVfZ2ZuKTsKIAogICAgIC8qIERvIG5vdCB1cGRh dGUgaG9zdCBkdGUgYmVmb3JlIGdjcjMgaGFzIGJlZW4gc2V0ICovCi0gICAgaWYgKCBnY3IzX2dm biA9PSAwICkKKyAgICBpZiAoIGdmbl94KGdjcjNfZ2ZuKSA9PSAwICkKICAgICAgICAgcmV0dXJu IDA7CiAKLSAgICBnY3IzX21mbiA9IG1mbl94KGdldF9nZm4oZCwgZ2NyM19nZm4sICZwMm10KSk7 Ci0gICAgcHV0X2dmbihkLCBnY3IzX2dmbik7CisgICAgZ2NyM19tZm4gPSBnZXRfZ2ZuKGQsIGdj cjNfZ2ZuLCAmcDJtdCk7CiAKLSAgICBBU1NFUlQobWZuX3ZhbGlkKF9tZm4oZ2NyM19tZm4pKSk7 CisgICAgaWYgKCBtZm5fZXEoZ2NyM19tZm4sIElOVkFMSURfTUZOKSB8fCAhcDJtX2lzX3JhbShw Mm10KSApCisgICAgeworICAgICAgICBwdXRfZ2ZuKGQsIGdjcjNfZ2ZuKTsKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorCisgICAgQVNTRVJUKG1mbl92YWxpZChnY3IzX21mbikpOwogCiAgICAg aW9tbXUgPSBmaW5kX2lvbW11X2Zvcl9kZXZpY2UoMCwgbWJkZik7CiAgICAgaWYgKCAhaW9tbXUg KQogICAgIHsKKyAgICAgICAgcHV0X2dmbihkLCBnY3IzX2dmbik7CiAgICAgICAgIEFNRF9JT01N VV9ERUJVRygiJXM6IEZhaWwgdG8gZmluZCBpb21tdSBmb3IgYmRmICV4IVxuIiwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtYmRmKTsKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7 CkBAIC00NTgsMTggKzUwNiwxOSBAQCBzdGF0aWMgaW50IGRvX2ludmFsaWRhdGVfZHRlKHN0cnVj dCBkb21haW4gKmQsIGNtZF9lbnRyeV90ICpjbWQpCiAKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgm aW9tbXUtPmxvY2ssIGZsYWdzKTsKICAgICBpb21tdV9kdGVfc2V0X2d1ZXN0X2NyMygodTMyICop bWR0ZSwgaGRvbV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3IzX21mbiA8PCBQ QUdFX1NISUZULCBndiwgZ2x4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5fdG9f bWFkZHIoZ2NyM19tZm4pLCBndiwgZ2x4KTsKIAogICAgIGFtZF9pb21tdV9mbHVzaF9kZXZpY2Uo aW9tbXUsIHJlcV9pZCk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ss IGZsYWdzKTsKIAorICAgIHB1dF9nZm4oZCwgZ2NyM19nZm4pOworCiAgICAgcmV0dXJuIDA7CiB9 CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X2lvbW11X3Byb2Nlc3NfY29tbWFuZCh1bnNpZ25lZCBsb25n IF9kKQogewotICAgIHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB0YWlsLCBoZWFkLCBlbnRyaWVzX3Bl cl9wYWdlLCBjbWRfbWZuOwotICAgIGNtZF9lbnRyeV90ICpjbWQsICpjbWRfYmFzZTsKKyAgICB1 bnNpZ25lZCBsb25nIHRhaWwsIGhlYWQ7CiAgICAgc3RydWN0IGRvbWFpbiAqZCA9IChzdHJ1Y3Qg ZG9tYWluICopX2Q7CiAgICAgc3RydWN0IGd1ZXN0X2lvbW11ICppb21tdTsKIApAQCAtNDkzLDU2 ICs1NDIsNzUgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfaW9tbXVfcHJvY2Vzc19jb21tYW5kKHVuc2ln bmVkIGxvbmcgX2QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbnRyaWVzX3Blcl9w YWdlID0gUEFHRV9TSVpFIC8gc2l6ZW9mKGNtZF9lbnRyeV90KTsKLQogICAgIHdoaWxlICggaGVh ZCAhPSB0YWlsICkKICAgICB7CisgICAgICAgIG1mbl90IG1mbjsKKyAgICAgICAgZ2ZuX3QgZ2Zu OworICAgICAgICBwMm1fdHlwZV90IHAybXQ7CisgICAgICAgIGNtZF9lbnRyeV90IGNtZCwgKnB0 cjsKICAgICAgICAgaW50IHJldCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBvcGNvZGU7CisK KyAgICAgICAgZ2ZuID0gX2dmbihQRk5fRE9XTihyZWdfdG9fdTY0KGlvbW11LT5jbWRfYnVmZmVy LnJlZ19iYXNlKSkgKworICAgICAgICAgICAgICAgICAgIFBGTl9ET1dOKGhlYWQgKiBzaXplb2Yo Y21kKSkpOwogCi0gICAgICAgIGNtZF9tZm4gPSBndWVzdF9pb21tdV9nZXRfdGFibGVfbWZuKGQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ190b191NjQo aW9tbXUtPmNtZF9idWZmZXIucmVnX2Jhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoY21kX2VudHJ5X3QpLCBoZWFkKTsKLSAgICAgICAgQVNT RVJUKG1mbl92YWxpZChfbWZuKGNtZF9tZm4pKSk7CisgICAgICAgIG1mbiA9IGdldF9nZm4oZCwg Z2ZuLCAmcDJtdCk7CisgICAgICAgIGlmICggbWZuX2VxKG1mbiwgSU5WQUxJRF9NRk4pIHx8ICFw Mm1faXNfcmFtKHAybXQpICkKKyAgICAgICAgeworICAgICAgICAgICAgQU1EX0lPTU1VX0RFQlVH KAorICAgICAgICAgICAgICAgICJFcnJvcjogZ3Vlc3QgaW9tbXUgY21kIGJ1ZmZlciBiYWQgZ2Zu ICUiUFJJX2dmbiIsIHR5cGUgJXUsIG1mbiAlIgorICAgICAgICAgICAgICAgIFBSSV9tZm4iLCBy ZWdfYmFzZSAlIyJQUkl4NjQiLCBoZWFkICUjbHhcbiIsCisgICAgICAgICAgICAgICAgZ2ZuX3go Z2ZuKSwgcDJtdCwgbWZuX3gobWZuKSwKKyAgICAgICAgICAgICAgICByZWdfdG9fdTY0KGlvbW11 LT5jbWRfYnVmZmVyLnJlZ19iYXNlKSwgaGVhZCk7CisgICAgICAgICAgICBwdXRfZ2ZuKGQsIGdm bik7CisgICAgICAgICAgICBndWVzdF9pb21tdV9kaXNhYmxlKGlvbW11KTsKKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIGNtZF9iYXNlID0gbWFwX2RvbWFpbl9wYWdl KF9tZm4oY21kX21mbikpOwotICAgICAgICBjbWQgPSBjbWRfYmFzZSArIGhlYWQgJSBlbnRyaWVz X3Blcl9wYWdlOworICAgICAgICBwdHIgPSBtYXBfZG9tYWluX3BhZ2UobWZuKSArIGhlYWQgJSAo UEFHRV9TSVpFIC8gc2l6ZW9mKGNtZF9lbnRyeV90KSk7CisgICAgICAgIG1lbWNweSgmY21kLCBw dHIsIHNpemVvZihjbWQpKTsKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocHRyKTsKKyAgICAg ICAgcHV0X2dmbihkLCBnZm4pOwogCi0gICAgICAgIG9wY29kZSA9IGdldF9maWVsZF9mcm9tX3Jl Z191MzIoY21kLT5kYXRhWzFdLAorICAgICAgICBvcGNvZGUgPSBnZXRfZmllbGRfZnJvbV9yZWdf dTMyKGNtZC5kYXRhWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElPTU1VX0NNRF9PUENPREVfTUFTSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJT01NVV9DTURfT1BDT0RFX1NISUZUKTsKICAgICAgICAgc3dpdGNoICggb3Bjb2Rl ICkKICAgICAgICAgewogICAgICAgICBjYXNlIElPTU1VX0NNRF9DT01QTEVUSU9OX1dBSVQ6Ci0g ICAgICAgICAgICByZXQgPSBkb19jb21wbGV0aW9uX3dhaXQoZCwgY21kKTsKKyAgICAgICAgICAg IHJldCA9IGRvX2NvbXBsZXRpb25fd2FpdChkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICBjYXNlIElPTU1VX0NNRF9JTlZBTElEQVRFX0RFVlRBQl9FTlRSWToKLSAgICAgICAg ICAgIHJldCA9IGRvX2ludmFsaWRhdGVfZHRlKGQsIGNtZCk7CisgICAgICAgICAgICByZXQgPSBk b19pbnZhbGlkYXRlX2R0ZShkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj YXNlIElPTU1VX0NNRF9JTlZBTElEQVRFX0lPTU1VX1BBR0VTOgotICAgICAgICAgICAgcmV0ID0g ZG9faW52YWxpZGF0ZV9wYWdlcyhkLCBjbWQpOworICAgICAgICAgICAgcmV0ID0gZG9faW52YWxp ZGF0ZV9wYWdlcyhkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElP TU1VX0NNRF9JTlZBTElEQVRFX0lPVExCX1BBR0VTOgotICAgICAgICAgICAgcmV0ID0gZG9faW52 YWxpZGF0ZV9pb3RsYl9wYWdlcyhkLCBjbWQpOworICAgICAgICAgICAgcmV0ID0gZG9faW52YWxp ZGF0ZV9pb3RsYl9wYWdlcyhkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj YXNlIElPTU1VX0NNRF9JTlZBTElEQVRFX0lOVF9UQUJMRToKICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICBjYXNlIElPTU1VX0NNRF9DT01QTEVURV9QUFJfUkVRVUVTVDoKLSAgICAgICAgICAg IHJldCA9IGRvX2NvbXBsZXRlX3Bwcl9yZXF1ZXN0KGQsIGNtZCk7CisgICAgICAgICAgICByZXQg PSBkb19jb21wbGV0ZV9wcHJfcmVxdWVzdChkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICBjYXNlIElPTU1VX0NNRF9JTlZBTElEQVRFX0lPTU1VX0FMTDoKLSAgICAgICAgICAg IHJldCA9IGRvX2ludmFsaWRhdGVfYWxsKGQsIGNtZCk7CisgICAgICAgICAgICByZXQgPSBkb19p bnZhbGlkYXRlX2FsbChkLCAmY21kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgQU1EX0lPTU1VX0RFQlVHKCJDTUQ6IFVua25vd24gY29tbWFuZCBj bWRfdHlwZSA9ICVseCAiCisgICAgICAgICAgICBBTURfSU9NTVVfREVCVUcoIkNNRDogVW5rbm93 biBjb21tYW5kIGNtZF90eXBlID0gJSN4ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi aGVhZCA9ICVsZFxuIiwgb3Bjb2RlLCBoZWFkKTsKKyAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7 CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHVubWFwX2RvbWFpbl9w YWdlKGNtZF9iYXNlKTsKICAgICAgICAgaWYgKCArK2hlYWQgPj0gaW9tbXUtPmNtZF9idWZmZXIu ZW50cmllcyApCiAgICAgICAgICAgICBoZWFkID0gMDsKICAgICAgICAgaWYgKCByZXQgKQorICAg ICAgICB7CiAgICAgICAgICAgICBndWVzdF9pb21tdV9kaXNhYmxlKGlvbW11KTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogTm93IHNoaWZ0IGNtZCBidWZm ZXIgaGVhZCBwb2ludGVyICovCkBAIC04MTgsMTAgKzg4NiwxMCBAQCBpbnQgZ3Vlc3RfaW9tbXVf c2V0X2Jhc2Uoc3RydWN0IGRvbWFpbiAqZCwgdWludDY0X3QgYmFzZSkKIAogICAgIGZvciAoIGlu dCBpID0gMDsgaSA8IElPTU1VX01NSU9fUEFHRV9OUjsgaSsrICkKICAgICB7Ci0gICAgICAgIHVu c2lnbmVkIGxvbmcgZ2ZuID0gYmFzZSArIGk7CisgICAgICAgIGdmbl90IGdmbiA9IF9nZm4oYmFz ZSArIGkpOwogCiAgICAgICAgIGdldF9nZm5fcXVlcnkoZCwgZ2ZuLCAmdCk7Ci0gICAgICAgIHAy bV9jaGFuZ2VfdHlwZV9vbmUoZCwgZ2ZuLCB0LCBwMm1fbW1pb19kbSk7CisgICAgICAgIHAybV9j aGFuZ2VfdHlwZV9vbmUoZCwgZ2ZuX3goZ2ZuKSwgdCwgcDJtX21taW9fZG0pOwogICAgICAgICBw dXRfZ2ZuKGQsIGdmbik7CiAgICAgfQogCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp bG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=