From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from pdx1-mailman-customer002.dreamhost.com (listserver-buz.dreamhost.com [69.163.136.29]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D9A6CECAAD3 for ; Tue, 6 Sep 2022 01:56:52 +0000 (UTC) Received: from pdx1-mailman-customer002.dreamhost.com (localhost [127.0.0.1]) by pdx1-mailman-customer002.dreamhost.com (Postfix) with ESMTP id 4MM7mN3xjrz1y6T; Mon, 5 Sep 2022 18:56:52 -0700 (PDT) Received: from smtp4.ccs.ornl.gov (smtp4.ccs.ornl.gov [160.91.203.40]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pdx1-mailman-customer002.dreamhost.com (Postfix) with ESMTPS id 4MM7lB55gbz1y6Q for ; Mon, 5 Sep 2022 18:55:50 -0700 (PDT) Received: from star.ccs.ornl.gov (star.ccs.ornl.gov [160.91.202.134]) by smtp4.ccs.ornl.gov (Postfix) with ESMTP id C92F8100B007; Mon, 5 Sep 2022 21:55:39 -0400 (EDT) Received: by star.ccs.ornl.gov (Postfix, from userid 2004) id C48C737C; Mon, 5 Sep 2022 21:55:39 -0400 (EDT) From: James Simmons To: Andreas Dilger , Oleg Drokin , NeilBrown Date: Mon, 5 Sep 2022 21:55:26 -0400 Message-Id: <1662429337-18737-14-git-send-email-jsimmons@infradead.org> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1662429337-18737-1-git-send-email-jsimmons@infradead.org> References: <1662429337-18737-1-git-send-email-jsimmons@infradead.org> MIME-Version: 1.0 Subject: [lustre-devel] [PATCH 13/24] lustre: sec: use enc pool for bounce pages X-BeenThere: lustre-devel@lists.lustre.org X-Mailman-Version: 2.1.39 Precedence: list List-Id: "For discussing Lustre software development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lustre Development List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: lustre-devel-bounces@lists.lustre.org Sender: "lustre-devel" RnJvbTogU2ViYXN0aWVuIEJ1aXNzb24gPHNidWlzc29uQGRkbi5jb20+CgpUYWtlIHBhZ2VzIGZy b20gdGhlIGVuYyBwb29sIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBmb3IKZW5jcnlwdGlvbiwg aW5zdGVhZCBvZiBsZXR0aW5nIGZzY3J5cHQgYWxsb2NhdGUgYSBib3VuY2UgcGFnZQpmb3IgZXZl cnkgY2FsbCB0byB0aGUgZW5jcnlwdGlvbiBwcmltaXRpdmVzLgpQYWdlcyBhcmUgdGFrZW4gZnJv bSB0aGUgZW5jIHBvb2wgYSB3aG9sZSBhcnJheSBhdCBhIHRpbWUuCgpUaGlzIHJlcXVpcmVzIG1v ZGlmeWluZyB0aGUgZnNjcnlwdCBBUEksIHNvIHRoYXQgbmV3IGZ1bmN0aW9ucwpmc2NyeXB0X2Vu Y3J5cHRfYmxvY2soKSBhbmQgZnNyeXB0X2RlY3J5cHRfYmxvY2soKSBhcmUgZXhwb3J0ZWQuClRo ZXNlIGZ1bmN0aW9ucyB0YWtlIGEgZGVzdGluYXRpb24gcGFnZSBwYXJhbWV0ZXIuCgpVc2luZyBl bmMgcG9vbCBmb3IgYm91bmNlIHBhZ2VzIGlzIGEgd29ydGh3aGlsZSBwZXJmb3JtYW5jZSB3aW4u IEhlcmUKYXJlIHBlcmZvcm1hbmNlIHBlbmFsdGllcyBpbmN1cnJlZCBieSBlbmNyeXB0aW9uLCB3 aXRob3V0IHRoaXMgcGF0Y2gsCmFuZCB3aXRoIHRoaXMgcGF0Y2g6CgogICAgICAgICAgICAgICAg ICAgICB8fD09PT09PT09PT09PT09PT09PT09PXw9PT09PT09PT09PT09PT09PT09PT18fAogICAg ICAgICAgICAgICAgICAgICB8fCBQZXJmb3JtYW5jZSBwZW5hbHR5IHwgUGVyZm9ybWFuY2UgcGVu YWx0eSB8fAogICAgICAgICAgICAgICAgICAgICB8fCAgICB3aXRob3V0IHBhdGNoICAgIHwgICAg IHdpdGggcGF0Y2ggICAgICB8fAp8fD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PXw9PT09PT09PT09PT09PT09PT09PT18fAp8fCBCYW5kd2lkdGgg4oCTIHdyaXRlIHwg ICAgICAgIDMwJS0zNSUgICAgICAgfCAgIDUlLTEwJSBsYXJnZSBJT3MgIHx8Cnx8ICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAxNSUgc21hbGwgSU9zICAgIHx8 Cnx8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0t LS0tLS0tLS0tLXx8Cnx8IEJhbmR3aWR0aCDigJMgcmVhZCAgfCAgICAgICAgIDIwJSAgICAgICAg ICB8ICAgIGxlc3MgdGhhbiAxMCUgICAgfHwKfHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfHwKfHwgICAgICBNZXRhZGF0YSAg ICAgfCAgICAgICAgIE4vQSAgICAgICAgICB8ICAgICAgICAgNSUgICAgICAgICAgfHwKfHwgY3Jl YXQsc3RhdCxyZW1vdmUgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgfHwKfHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18PT09PT09 PT09PT09PT09PT09PT09fHwKCldDLWJ1Zy1pZDogaHR0cHM6Ly9qaXJhLndoYW1jbG91ZC5jb20v YnJvd3NlL0xVLTE1MDAzCkx1c3RyZS1jb21taXQ6IGYzZmUxNDRiODU3MmU5ZTc1YiAoIkxVLTE1 MDAzIHNlYzogdXNlIGVuYyBwb29sIGZvciBib3VuY2UgcGFnZXMiKQpTaWduZWQtb2ZmLWJ5OiBT ZWJhc3RpZW4gQnVpc3NvbiA8c2J1aXNzb25AZGRuLmNvbT4KU2lnbmVkLW9mZi1ieTogSmFtZXMg U2ltbW9ucyA8anNpbW1vbnNAaW5mcmFkZWFkLm9yZz4KUmV2aWV3ZWQtb246IGh0dHBzOi8vcmV2 aWV3LndoYW1jbG91ZC5jb20vNDcxNDkKUmV2aWV3ZWQtYnk6IEFuZHJlYXMgRGlsZ2VyIDxhZGls Z2VyQHdoYW1jbG91ZC5jb20+ClJldmlld2VkLWJ5OiBPbGVnIERyb2tpbiA8Z3JlZW5Ad2hhbWNs b3VkLmNvbT4KLS0tCiBmcy9jcnlwdG8vY3J5cHRvLmMgICAgICAgICAgICAgfCAgMzQgKystLQog ZnMvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX3NlYy5oIHwgICAzICsKIGZzL2x1c3RyZS9sbGl0ZS9k aXIuYyAgICAgICAgICB8ICAgNSArLQogZnMvbHVzdHJlL29zYy9vc2NfcmVxdWVzdC5jICAgIHwg MTM0ICsrKysrKysrKysrLQogZnMvbHVzdHJlL3B0bHJwYy9zZWNfYnVsay5jICAgIHwgNDUyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBpbmNsdWRlL2xpbnV4L2Zz Y3J5cHQuaCAgICAgICAgfCAgNDkgKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgNjMyIGluc2VydGlv bnMoKyksIDQ1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2ZzL2NyeXB0by9jcnlwdG8uYyBi L2ZzL2NyeXB0by9jcnlwdG8uYwppbmRleCA5MjEyMzI1Ny4uZGUzZTA0MCAxMDA2NDQKLS0tIGEv ZnMvY3J5cHRvL2NyeXB0by5jCisrKyBiL2ZzL2NyeXB0by9jcnlwdG8uYwpAQCAtMjAyLDkgKzIw MiwxMCBAQCBzdHJ1Y3QgcGFnZSAqZnNjcnlwdF9lbmNyeXB0X3BhZ2VjYWNoZV9ibG9ja3Moc3Ry dWN0IHBhZ2UgKnBhZ2UsCiBFWFBPUlRfU1lNQk9MKGZzY3J5cHRfZW5jcnlwdF9wYWdlY2FjaGVf YmxvY2tzKTsKIAogLyoqCi0gKiBmc2NyeXB0X2VuY3J5cHRfYmxvY2tfaW5wbGFjZSgpIC0gRW5j cnlwdCBhIGZpbGVzeXN0ZW0gYmxvY2sgaW4tcGxhY2UKKyAqIGZzY3J5cHRfZW5jcnlwdF9ibG9j aygpIC0gQ2FjaGUgYW4gZW5jcnlwdGVkIGZpbGVzeXN0ZW0gYmxvY2sgaW4gYSBwYWdlCiAgKiBA aW5vZGU6ICAgICBUaGUgaW5vZGUgdG8gd2hpY2ggdGhpcyBibG9jayBiZWxvbmdzCi0gKiBAcGFn ZTogICAgICBUaGUgcGFnZSBjb250YWluaW5nIHRoZSBibG9jayB0byBlbmNyeXB0CisgKiBAc3Jj OiAgICAgICBUaGUgcGFnZSBjb250YWluaW5nIHRoZSBibG9jayB0byBlbmNyeXB0CisgKiBAZHN0 OiAgICAgICBUaGUgcGFnZSB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIGVuY3J5cHRlZCBkYXRhCiAg KiBAbGVuOiAgICAgICBTaXplIG9mIGJsb2NrIHRvIGVuY3J5cHQuICBEb2Vzbid0IG5lZWQgdG8g YmUgYSBtdWx0aXBsZSBvZiB0aGUKICAqCQlmcyBibG9jayBzaXplLCBidXQgbXVzdCBiZSBhIG11 bHRpcGxlIG9mIEZTX0NSWVBUT19CTE9DS19TSVpFLgogICogQG9mZnM6ICAgICAgQnl0ZSBvZmZz ZXQgd2l0aGluIEBwYWdlIGF0IHdoaWNoIHRoZSBibG9jayB0byBlbmNyeXB0IGJlZ2lucwpAQCAt MjE1LDE3ICsyMTYsMTggQEAgc3RydWN0IHBhZ2UgKmZzY3J5cHRfZW5jcnlwdF9wYWdlY2FjaGVf YmxvY2tzKHN0cnVjdCBwYWdlICpwYWdlLAogICogRW5jcnlwdCBhIHBvc3NpYmx5LWNvbXByZXNz ZWQgZmlsZXN5c3RlbSBibG9jayB0aGF0IGlzIGxvY2F0ZWQgaW4gYW4KICAqIGFyYml0cmFyeSBw YWdlLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIG9yaWdpbmFsIHBhZ2VjYWNoZSBwYWdlLiAgVGhl IEBpbm9kZQogICogYW5kIEBsYmxrX251bSBtdXN0IGJlIHNwZWNpZmllZCwgYXMgdGhleSBjYW4n dCBiZSBkZXRlcm1pbmVkIGZyb20gQHBhZ2UuCisgKiBUaGUgZGVjcnlwdGVkIGRhdGEgd2lsbCBi ZSBzdG9yZWQgaW4gQGRzdC4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzczsgLWVycm5vIG9u IGZhaWx1cmUKICAqLwotaW50IGZzY3J5cHRfZW5jcnlwdF9ibG9ja19pbnBsYWNlKGNvbnN0IHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgdW5zaWduZWQgaW50 IGxlbiwgdW5zaWduZWQgaW50IG9mZnMsCi0JCQkJICB1NjQgbGJsa19udW0sIGdmcF90IGdmcF9m bGFncykKK2ludCBmc2NyeXB0X2VuY3J5cHRfYmxvY2soY29uc3Qgc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IHBhZ2UgKnNyYywKKwkJCSAgIHN0cnVjdCBwYWdlICpkc3QsIHVuc2lnbmVkIGlu dCBsZW4sIHVuc2lnbmVkIGludCBvZmZzLAorCQkJICAgdTY0IGxibGtfbnVtLCBnZnBfdCBnZnBf ZmxhZ3MpCiB7Ci0JcmV0dXJuIGZzY3J5cHRfY3J5cHRfYmxvY2soaW5vZGUsIEZTX0VOQ1JZUFQs IGxibGtfbnVtLCBwYWdlLCBwYWdlLAorCXJldHVybiBmc2NyeXB0X2NyeXB0X2Jsb2NrKGlub2Rl LCBGU19FTkNSWVBULCBsYmxrX251bSwgc3JjLCBkc3QsCiAJCQkJICAgbGVuLCBvZmZzLCBnZnBf ZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChmc2NyeXB0X2VuY3J5cHRfYmxvY2tfaW5wbGFjZSk7 CitFWFBPUlRfU1lNQk9MKGZzY3J5cHRfZW5jcnlwdF9ibG9jayk7CiAKIC8qKgogICogZnNjcnlw dF9kZWNyeXB0X3BhZ2VjYWNoZV9ibG9ja3MoKSAtIERlY3J5cHQgZmlsZXN5c3RlbSBibG9ja3Mg aW4gYQpAQCAtMjcyLDkgKzI3NCwxMCBAQCBpbnQgZnNjcnlwdF9kZWNyeXB0X3BhZ2VjYWNoZV9i bG9ja3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCiBFWFBPUlRfU1lNQk9M KGZzY3J5cHRfZGVjcnlwdF9wYWdlY2FjaGVfYmxvY2tzKTsKIAogLyoqCi0gKiBmc2NyeXB0X2Rl Y3J5cHRfYmxvY2tfaW5wbGFjZSgpIC0gRGVjcnlwdCBhIGZpbGVzeXN0ZW0gYmxvY2sgaW4tcGxh Y2UKKyAqIGZzY3J5cHRfZGVjcnlwdF9ibG9jaygpIC0gQ2FjaGUgYSBkZWNyeXB0ZWQgYSBmaWxl c3lzdGVtIGJsb2NrIGluIGEgcGFnZQogICogQGlub2RlOiAgICAgVGhlIGlub2RlIHRvIHdoaWNo IHRoaXMgYmxvY2sgYmVsb25ncwotICogQHBhZ2U6ICAgICAgVGhlIHBhZ2UgY29udGFpbmluZyB0 aGUgYmxvY2sgdG8gZGVjcnlwdAorICogQHNyYzogICAgICAgVGhlIHBhZ2UgY29udGFpbmluZyB0 aGUgYmxvY2sgdG8gZGVjcnlwdAorICogQGRzdDogICAgICAgVGhlIHBhZ2Ugd2hpY2ggd2lsbCBj b250YWluIHRoZSBwbGFpbiBkYXRhCiAgKiBAbGVuOiAgICAgICBTaXplIG9mIGJsb2NrIHRvIGRl Y3J5cHQuICBEb2Vzbid0IG5lZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUKICAqCQlmcyBibG9j ayBzaXplLCBidXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIEZTX0NSWVBUT19CTE9DS19TSVpFLgog ICogQG9mZnM6ICAgICAgQnl0ZSBvZmZzZXQgd2l0aGluIEBwYWdlIGF0IHdoaWNoIHRoZSBibG9j ayB0byBkZWNyeXB0IGJlZ2lucwpAQCAtMjg0LDE3ICsyODcsMTggQEAgaW50IGZzY3J5cHRfZGVj cnlwdF9wYWdlY2FjaGVfYmxvY2tzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbGVu LAogICogRGVjcnlwdCBhIHBvc3NpYmx5LWNvbXByZXNzZWQgZmlsZXN5c3RlbSBibG9jayB0aGF0 IGlzIGxvY2F0ZWQgaW4gYW4KICAqIGFyYml0cmFyeSBwYWdlLCBub3QgbmVjZXNzYXJpbHkgaW4g dGhlIG9yaWdpbmFsIHBhZ2VjYWNoZSBwYWdlLiAgVGhlIEBpbm9kZQogICogYW5kIEBsYmxrX251 bSBtdXN0IGJlIHNwZWNpZmllZCwgYXMgdGhleSBjYW4ndCBiZSBkZXRlcm1pbmVkIGZyb20gQHBh Z2UuCisgKiBUaGUgZW5jcnlwdGVkIGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4gQGRzdC4KICAqCiAg KiBSZXR1cm46IDAgb24gc3VjY2VzczsgLWVycm5vIG9uIGZhaWx1cmUKICAqLwotaW50IGZzY3J5 cHRfZGVjcnlwdF9ibG9ja19pbnBsYWNlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVj dCBwYWdlICpwYWdlLAotCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnMs Ci0JCQkJICB1NjQgbGJsa19udW0pCitpbnQgZnNjcnlwdF9kZWNyeXB0X2Jsb2NrKGNvbnN0IHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpzcmMsCisJCQkgICBzdHJ1Y3QgcGFnZSAq ZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmcywKKwkJCSAgIHU2NCBsYmxr X251bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXJldHVybiBmc2NyeXB0X2NyeXB0X2Jsb2NrKGlu b2RlLCBGU19ERUNSWVBULCBsYmxrX251bSwgcGFnZSwgcGFnZSwKLQkJCQkgICBsZW4sIG9mZnMs IEdGUF9OT0ZTKTsKKwlyZXR1cm4gZnNjcnlwdF9jcnlwdF9ibG9jayhpbm9kZSwgRlNfREVDUllQ VCwgbGJsa19udW0sIHNyYywgZHN0LAorCQkJCSAgIGxlbiwgb2ZmcywgZ2ZwX2ZsYWdzKTsKIH0K LUVYUE9SVF9TWU1CT0woZnNjcnlwdF9kZWNyeXB0X2Jsb2NrX2lucGxhY2UpOworRVhQT1JUX1NZ TUJPTChmc2NyeXB0X2RlY3J5cHRfYmxvY2spOwogCiAvKioKICAqIGZzY3J5cHRfaW5pdGlhbGl6 ZSgpIC0gYWxsb2NhdGUgbWFqb3IgYnVmZmVycyBmb3IgZnMgZW5jcnlwdGlvbi4KZGlmZiAtLWdp dCBhL2ZzL2x1c3RyZS9pbmNsdWRlL2x1c3RyZV9zZWMuaCBiL2ZzL2x1c3RyZS9pbmNsdWRlL2x1 c3RyZV9zZWMuaAppbmRleCBlODQxMGUxLi43YzNjMTJhIDEwMDY0NAotLS0gYS9mcy9sdXN0cmUv aW5jbHVkZS9sdXN0cmVfc2VjLmgKKysrIGIvZnMvbHVzdHJlL2luY2x1ZGUvbHVzdHJlX3NlYy5o CkBAIC0xMDQ4LDYgKzEwNDgsOSBAQCBpbnQgc3B0bHJwY190YXJnZXRfZXhwb3J0X2NoZWNrKHN0 cnVjdCBvYmRfZXhwb3J0ICpleHAsCiAJCQkJc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXEpOwog CiAvKiBidWxrIHNlY3VyaXR5IGFwaSAqLworaW50IHNwdGxycGNfZW5jX3Bvb2xfYWRkX3VzZXIo dm9pZCk7CitpbnQgc3B0bHJwY19lbmNfcG9vbF9nZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2Ug KipwYSwgdW5zaWduZWQgaW50IGNvdW50KTsKK3ZvaWQgc3B0bHJwY19lbmNfcG9vbF9wdXRfcGFn ZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYSwgdW5zaWduZWQgaW50IGNvdW50KTsKIHZvaWQgc3B0 bHJwY19lbmNfcG9vbF9wdXRfcGFnZXMoc3RydWN0IHB0bHJwY19idWxrX2Rlc2MgKmRlc2MpOwog aW50IGdldF9mcmVlX3BhZ2VzX2luX3Bvb2wodm9pZCk7CiBpbnQgcG9vbF9pc19hdF9mdWxsX2Nh cGFjaXR5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvbHVzdHJlL2xsaXRlL2Rpci5jIGIvZnMvbHVz dHJlL2xsaXRlL2Rpci5jCmluZGV4IGFlYTE1ZjUuLmJmZmQzNGMgMTAwNjQ0Ci0tLSBhL2ZzL2x1 c3RyZS9sbGl0ZS9kaXIuYworKysgYi9mcy9sdXN0cmUvbGxpdGUvZGlyLmMKQEAgLTIyOTIsNyAr MjI5MiwxMCBAQCBzdGF0aWMgbG9uZyBsbF9kaXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVu c2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgRlNfSU9DX0FERF9FTkNS WVBUSU9OX0tFWToKIAkJaWYgKCFsbF9zYmlfaGFzX2VuY3J5cHQobGxfaTJzYmkoaW5vZGUpKSkK IAkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJcmV0dXJuIGZzY3J5cHRfaW9jdGxfYWRkX2tleShm aWxlLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlyYyA9IGZzY3J5cHRfaW9jdGxfYWRkX2tleShm aWxlLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlpZiAoIXJjKQorCQkJc3B0bHJwY19lbmNfcG9v bF9hZGRfdXNlcigpOworCQlyZXR1cm4gcmM7CiAJY2FzZSBGU19JT0NfUkVNT1ZFX0VOQ1JZUFRJ T05fS0VZOgogCQlpZiAoIWxsX3NiaV9oYXNfZW5jcnlwdChsbF9pMnNiaShpbm9kZSkpKQogCQkJ cmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZnMvbHVzdHJlL29zYy9vc2NfcmVxdWVz dC5jIGIvZnMvbHVzdHJlL29zYy9vc2NfcmVxdWVzdC5jCmluZGV4IDVhNGRiMjkuLmQ2NjE4NWIg MTAwNjQ0Ci0tLSBhL2ZzL2x1c3RyZS9vc2Mvb3NjX3JlcXVlc3QuYworKysgYi9mcy9sdXN0cmUv b3NjL29zY19yZXF1ZXN0LmMKQEAgLTEzNzgsMTMgKzEzNzgsMTA5IEBAIHN0YXRpYyBpbnQgb3Nj X2NoZWNrc3VtX2J1bGtfcncoY29uc3QgY2hhciAqb2JkX25hbWUsCiAJcmV0dXJuIHJjOwogfQog CisvKioKKyAqIG9zY19lbmNyeXB0X3BhZ2VjYWNoZV9ibG9ja3MoKSAtIG92ZXJsYXkgdG8gZnNj cnlwdF9lbmNyeXB0X3BhZ2VjYWNoZV9ibG9ja3MKKyAqIEBzcmNwYWdlOglUaGUgbG9ja2VkIHBh Z2VjYWNoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGJsb2NrKHMpIHRvIGVuY3J5cHQKKyAqIEBkc3Rw YWdlOglUaGUgcGFnZSB0byBwdXQgZW5jcnlwdGlvbiByZXN1bHQKKyAqIEBsZW46CVRvdGFsIHNp emUgb2YgdGhlIGJsb2NrKHMpIHRvIGVuY3J5cHQuICBNdXN0IGJlIGEgbm9uemVybworICoJCW11 bHRpcGxlIG9mIHRoZSBmaWxlc3lzdGVtJ3MgYmxvY2sgc2l6ZS4KKyAqIEBvZmZzOglCeXRlIG9m ZnNldCB3aXRoaW4gQHBhZ2Ugb2YgdGhlIGZpcnN0IGJsb2NrIHRvIGVuY3J5cHQuICBNdXN0IGJl CisgKgkJYSBtdWx0aXBsZSBvZiB0aGUgZmlsZXN5c3RlbSdzIGJsb2NrIHNpemUuCisgKiBAZ2Zw X2ZsYWdzOglNZW1vcnkgYWxsb2NhdGlvbiBmbGFncworICoKKyAqIFRoaXMgb3ZlcmxheSBmdW5j dGlvbiBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBwcm92aWRlIG91ciBvd24gYm91bmNlIHBh Z2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqb3NjX2VuY3J5cHRfcGFnZWNhY2hlX2Jsb2Nr cyhzdHJ1Y3QgcGFnZSAqc3JjcGFnZSwKKwkJCQkJCSBzdHJ1Y3QgcGFnZSAqZHN0cGFnZSwKKwkJ CQkJCSB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkJIHVuc2lnbmVkIGludCBvZmZzLAorCQkJCQkJ IGdmcF90IGdmcF9mbGFncykKK3sKKwljb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc3JjcGFn ZS0+bWFwcGluZy0+aG9zdDsKKwljb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tiaXRzID0gaW5vZGUt PmlfYmxrYml0czsKKwljb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gMSA8PCBibG9ja2Jp dHM7CisJdTY0IGxibGtfbnVtID0gKCh1NjQpc3JjcGFnZS0+aW5kZXggPDwgKFBBR0VfU0hJRlQg LSBibG9ja2JpdHMpKSArCisJCSAgICAgICAob2ZmcyA+PiBibG9ja2JpdHMpOworCXVuc2lnbmVk IGludCBpOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkoIWRzdHBhZ2UpKQorCQlyZXR1cm4g ZnNjcnlwdF9lbmNyeXB0X3BhZ2VjYWNoZV9ibG9ja3Moc3JjcGFnZSwgbGVuLCBvZmZzLAorCQkJ CQkJCWdmcF9mbGFncyk7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFQYWdlTG9ja2VkKHNyY3BhZ2Up KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAoV0FSTl9PTl9PTkNFKGxlbiA8 PSAwIHx8ICFJU19BTElHTkVEKGxlbiB8IG9mZnMsIGJsb2Nrc2l6ZSkpKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCS8qIFNldCBQYWdlUHJpdmF0ZTIgZm9yIGRpc2FtYmlndWF0aW9u IGluCisJICogb3NjX2ZpbmFsaXplX2JvdW5jZV9wYWdlKCkuCisJICogSXQgbWVhbnMgY2lwaGVy IHBhZ2Ugd2FzIG5vdCBhbGxvY2F0ZWQgYnkgbGxjcnlwdC4KKwkgKi8KKwlTZXRQYWdlUHJpdmF0 ZTIoZHN0cGFnZSk7CisKKwlmb3IgKGkgPSBvZmZzOyBpIDwgb2ZmcyArIGxlbjsgaSArPSBibG9j a3NpemUsIGxibGtfbnVtKyspIHsKKwkJZXJyID0gZnNjcnlwdF9lbmNyeXB0X2Jsb2NrKGlub2Rl LCBzcmNwYWdlLCBkc3RwYWdlLCBibG9ja3NpemUsCisJCQkJCSAgICBpLCBsYmxrX251bSwgZ2Zw X2ZsYWdzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCVNldFBh Z2VQcml2YXRlKGRzdHBhZ2UpOworCXNldF9wYWdlX3ByaXZhdGUoZHN0cGFnZSwgKHVuc2lnbmVk IGxvbmcpc3JjcGFnZSk7CisJcmV0dXJuIGRzdHBhZ2U7Cit9CisKKy8qKgorICogb3NjX2ZpbmFs aXplX2JvdW5jZV9wYWdlKCkgLSBvdmVybGF5IHRvIGxsY3J5cHRfZmluYWxpemVfYm91bmNlX3Bh Z2UKKyAqCisgKiBUaGlzIG92ZXJsYXkgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBi b3VuY2UgcGFnZXMKKyAqIGFsbG9jYXRlZCBieSBvdXJzZWx2ZXMuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCBvc2NfZmluYWxpemVfYm91bmNlX3BhZ2Uoc3RydWN0IHBhZ2UgKipwYWdlcCkKK3sK KwlzdHJ1Y3QgcGFnZSAqcGFnZSA9ICpwYWdlcDsKKworCS8qIFBhZ2VQcml2YXRlMiB3YXMgc2V0 IGluIG9zY19lbmNyeXB0X3BhZ2VjYWNoZV9ibG9ja3MKKwkgKiB0byBpbmRpY2F0ZSB0aGUgY2lw aGVyIHBhZ2Ugd2FzIGFsbG9jYXRlZCBieSBvdXJzZWx2ZXMuCisJICogU28gd2UgbXVzdCBub3Qg ZnJlZSBpdCB2aWEgZnNjcnlwdC4KKwkgKi8KKwlpZiAodW5saWtlbHkoIXBhZ2UgfHwgIVBhZ2VQ cml2YXRlMihwYWdlKSkpCisJCXJldHVybiBmc2NyeXB0X2ZpbmFsaXplX2JvdW5jZV9wYWdlKHBh Z2VwKTsKKworCWlmIChmc2NyeXB0X2lzX2JvdW5jZV9wYWdlKHBhZ2UpKSB7CisJCSpwYWdlcCA9 IGZzY3J5cHRfcGFnZWNhY2hlX3BhZ2UocGFnZSk7CisJCUNsZWFyUGFnZVByaXZhdGUyKHBhZ2Up OworCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsICh1bnNpZ25lZCBsb25nKU5VTEwpOworCQlDbGVh clBhZ2VQcml2YXRlKHBhZ2UpOworCX0KK30KKwogc3RhdGljIGlubGluZSB2b2lkIG9zY19yZWxl YXNlX2JvdW5jZV9wYWdlcyhzdHJ1Y3QgYnJ3X3BhZ2UgKipwZ2EsCiAJCQkJCSAgICB1MzIgcGFn ZV9jb3VudCkKIHsKICNpZmRlZiBDT05GSUdfRlNfRU5DUllQVElPTgotCWludCBpOworCXN0cnVj dCBwYWdlICoqcGEgPSBOVUxMOworCWludCBpLCBqID0gMDsKKworCWlmIChQYWdlQ2hlY2tlZChw Z2FbMF0tPnBnKSkgeworCQlwYSA9IGt2bWFsbG9jX2FycmF5KHBhZ2VfY291bnQsIHNpemVvZigq cGEpLAorCQkJCSAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCWlmICghcGEpCisJCQly ZXR1cm47CisJfQogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgeworCQkvKiBC b3VuY2UgcGFnZXMgdXNlZCBieSBvc2NfZW5jcnlwdF9wYWdlY2FjaGVfYmxvY2tzKCkKKwkJICog Y2FsbGVkIGZyb20gb3NjX2Jyd19wcmVwX3JlcXVlc3QoKQorCQkgKiBhcmUgaWRlbnRpZmllZCB0 aGFua3MgdG8gdGhlIFBhZ2VDaGVja2VkIGZsYWcuCisJCSAqLworCQlpZiAoUGFnZUNoZWNrZWQo cGdhW2ldLT5wZykpIHsKKwkJCWlmIChwYSkKKwkJCQlwYVtqKytdID0gcGdhW2ldLT5wZzsKKwkJ CW9zY19maW5hbGl6ZV9ib3VuY2VfcGFnZSgmcGdhW2ldLT5wZyk7CisJCX0KKwogCQkvKiBCb3Vu Y2UgcGFnZXMgYWxsb2NhdGVkIGJ5IGEgY2FsbCB0bwogCQkgKiBmc2NyeXB0X2VuY3J5cHRfcGFn ZWNhY2hlX2Jsb2NrcygpIGluIG9zY19icndfcHJlcF9yZXF1ZXN0KCkKIAkJICogYXJlIGlkZW50 aWZpZWQgdGhhbmtzIHRvIHRoZSBQYWdlQ2hlY2tlZCBmbGFnLgpAQCAtMTM5NCw2ICsxNDkwLDEx IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBvc2NfcmVsZWFzZV9ib3VuY2VfcGFnZXMoc3RydWN0IGJy d19wYWdlICoqcGdhLAogCQlwZ2FbaV0tPmNvdW50IC09IHBnYVtpXS0+YnBfY291bnRfZGlmZjsK IAkJcGdhW2ldLT5vZmYgKz0gcGdhW2ldLT5icF9vZmZfZGlmZjsKIAl9CisKKwlpZiAocGEpIHsK KwkJc3B0bHJwY19lbmNfcG9vbF9wdXRfcGFnZXNfYXJyYXkocGEsIGopOworCQlrdmZyZWUocGEp OworCX0KICNlbmRpZgogfQogCkBAIC0xNDQ1LDYgKzE1NDYsMjIgQEAgc3RhdGljIGludCBvc2Nf YnJ3X3ByZXBfcmVxdWVzdChpbnQgY21kLCBzdHJ1Y3QgY2xpZW50X29iZCAqY2xpLAogCiAJaWYg KG9wYyA9PSBPU1RfV1JJVEUgJiYgaW5vZGUgJiYgSVNfRU5DUllQVEVEKGlub2RlKSAmJgogCSAg ICBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShpbm9kZSkpIHsKKwkJc3RydWN0IHBhZ2UgKipw YSA9IE5VTEw7CisKKwkJa3ZmcmVlKHBhKTsKKwkJaWYgKCFwYSkgeworCQkJcHRscnBjX3JlcXVl c3RfZnJlZShyZXEpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlyYyA9IHNwdGxycGNf ZW5jX3Bvb2xfZ2V0X3BhZ2VzX2FycmF5KHBhLCBwYWdlX2NvdW50KTsKKwkJaWYgKHJjKSB7CisJ CQlDREVCVUcoRF9TRUMsICJmYWlsZWQgdG8gYWxsb2NhdGUgZnJvbSBlbmMgcG9vbDogJWRcbiIs CisJCQkgICAgICAgcmMpOworCQkJcHRscnBjX3JlcXVlc3RfZnJlZShyZXEpOworCQkJcmV0dXJu IHJjOworCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgewogCQkJc3Ry dWN0IGJyd19wYWdlICpicndwZyA9IHBnYVtpXTsKIAkJCXN0cnVjdCBwYWdlICpkYXRhX3BhZ2Ug PSBOVUxMOwpAQCAtMTQ3NCw5ICsxNTkxLDEwIEBAIHN0YXRpYyBpbnQgb3NjX2Jyd19wcmVwX3Jl cXVlc3QoaW50IGNtZCwgc3RydWN0IGNsaWVudF9vYmQgKmNsaSwKIAkJCQlicndwZy0+cGctPmlu ZGV4ID0gY2xwYWdlLT5jcF9wYWdlX2luZGV4OwogCQkJfQogCQkJZGF0YV9wYWdlID0KLQkJCQlm c2NyeXB0X2VuY3J5cHRfcGFnZWNhY2hlX2Jsb2NrcyhicndwZy0+cGcsCi0JCQkJCQkJCSBudW5p dHMsIDAsCi0JCQkJCQkJCSBHRlBfTk9GUyk7CisJCQkJb3NjX2VuY3J5cHRfcGFnZWNhY2hlX2Js b2NrcyhicndwZy0+cGcsCisJCQkJCQkJICAgICBwYSA/IHBhW2ldIDogTlVMTCwKKwkJCQkJCQkg ICAgIG51bml0cywgMCwKKwkJCQkJCQkgICAgIEdGUF9OT0ZTKTsKIAkJCWlmIChkaXJlY3Rpbykg ewogCQkJCWJyd3BnLT5wZy0+bWFwcGluZyA9IG1hcF9vcmlnOwogCQkJCWJyd3BnLT5wZy0+aW5k ZXggPSBpbmRleF9vcmlnOwpAQCAtMTQ5MCw2ICsxNjA4LDExIEBAIHN0YXRpYyBpbnQgb3NjX2Jy d19wcmVwX3JlcXVlc3QoaW50IGNtZCwgc3RydWN0IGNsaWVudF9vYmQgKmNsaSwKIAkJCQkJcmMg PSAwOwogCQkJCQlnb3RvIHJldHJ5X2VuY3J5cHQ7CiAJCQkJfQorCQkJCWlmIChwYSkgeworCQkJ CQlzcHRscnBjX2VuY19wb29sX3B1dF9wYWdlc19hcnJheShwYSArIGksCisJCQkJCQkJCQkgcGFn ZV9jb3VudCAtIGkpOworCQkJCQlrdmZyZWUocGEpOworCQkJCX0KIAkJCQlwdGxycGNfcmVxdWVz dF9mcmVlKHJlcSk7CiAJCQkJcmV0dXJuIHJjOwogCQkJfQpAQCAtMTUxNSw2ICsxNjM4LDkgQEAg c3RhdGljIGludCBvc2NfYnJ3X3ByZXBfcmVxdWVzdChpbnQgY21kLCBzdHJ1Y3QgY2xpZW50X29i ZCAqY2xpLAogCQkJYnJ3cGctPmJwX29mZl9kaWZmID0gYnJ3cGctPm9mZiAmIH5QQUdFX01BU0s7 CiAJCQlicndwZy0+b2ZmID0gYnJ3cGctPm9mZiAmIFBBR0VfTUFTSzsKIAkJfQorCisJCWlmIChw YSkKKwkJCWt2ZnJlZShwYSk7CiAJfSBlbHNlIGlmIChvcGMgPT0gT1NUX1dSSVRFICYmIGlub2Rl ICYmIElTX0VOQ1JZUFRFRChpbm9kZSkpIHsKIAkJc3RydWN0IG9zY19hc3luY19wYWdlICpvYXAg PSBicndfcGFnZTJvYXAocGdhWzBdKTsKIAkJc3RydWN0IGNsX3BhZ2UgKmNscGFnZSA9IG9hcDJj bF9wYWdlKG9hcCk7CmRpZmYgLS1naXQgYS9mcy9sdXN0cmUvcHRscnBjL3NlY19idWxrLmMgYi9m cy9sdXN0cmUvcHRscnBjL3NlY19idWxrLmMKaW5kZXggYjZhZTc3Yi4uNWRhZDgzZiAxMDA2NDQK LS0tIGEvZnMvbHVzdHJlL3B0bHJwYy9zZWNfYnVsay5jCisrKyBiL2ZzL2x1c3RyZS9wdGxycGMv c2VjX2J1bGsuYwpAQCAtMjk3LDE0ICsyOTcsMTkwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVu Y19wb29sc19jbGVhbnVwKHN0cnVjdCBwYWdlICoqKnBvb2xzLCBpbnQgbnBvb2xzKQogCXJldHVy biBjbGVhbmVkOwogfQogCisvKgorICogbWVyZ2UgQG5wb29scyBwb2ludGVkIGJ5IEBwb29scyB3 aGljaCBjb250YWlucyBAbnBhZ2VzIG5ldyBwYWdlcworICogaW50byBjdXJyZW50IHBvb2xzLgor ICoKKyAqIHdlIGhhdmUgb3B0aW9ucyB0byBhdm9pZCBtb3N0IG1lbW9yeSBjb3B5IHdpdGggc29t ZSB0cmlja3MuIGJ1dCB3ZSBjaG9vc2UKKyAqIHRoZSBzaW1wbGVzdCB3YXkgdG8gYXZvaWQgY29t cGxleGl0eS4gSXQncyBub3QgZnJlcXVlbnRseSBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGVu Y19wb29sc19pbnNlcnQoc3RydWN0IHBhZ2UgKioqcG9vbHMsIGludCBucG9vbHMsIGludCBucGFn ZXMpCit7CisJaW50IGZyZWVzbG90OworCWludCBvcF9pZHgsIG5wX2lkeCwgb2dfaWR4LCBuZ19p ZHg7CisJaW50IGN1cl9ucG9vbHMsIGVuZF9ucG9vbHM7CisKKwlMQVNTRVJUKG5wYWdlcyA+IDAp OworCUxBU1NFUlQocGFnZV9wb29scy5lcHBfdG90YWxfcGFnZXMrbnBhZ2VzIDw9IHBhZ2VfcG9v bHMuZXBwX21heF9wYWdlcyk7CisJTEFTU0VSVChucGFnZXNfdG9fbnBvb2xzKG5wYWdlcykgPT0g bnBvb2xzKTsKKwlMQVNTRVJUKHBhZ2VfcG9vbHMuZXBwX2dyb3dpbmcpOworCisJc3Bpbl9sb2Nr KCZwYWdlX3Bvb2xzLmVwcF9sb2NrKTsKKworCS8qCisJICogKDEpIGZpbGwgYWxsIHRoZSBmcmVl IHNsb3RzIG9mIGN1cnJlbnQgcG9vbHMuCisJICovCisJLyoKKwkgKiBmcmVlIHNsb3RzIGFyZSB0 aG9zZSBsZWZ0IGJ5IHJlbnQgcGFnZXMsIGFuZCB0aGUgZXh0cmEgb25lcyB3aXRoCisJICogaW5k ZXggPj0gdG90YWxfcGFnZXMsIGxvY2F0ZSBhdCB0aGUgdGFpbCBvZiBsYXN0IHBvb2wuCisJICov CisJZnJlZXNsb3QgPSBwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlcyAlIFBBR0VTX1BFUl9QT09M OworCWlmIChmcmVlc2xvdCAhPSAwKQorCQlmcmVlc2xvdCA9IFBBR0VTX1BFUl9QT09MIC0gZnJl ZXNsb3Q7CisJZnJlZXNsb3QgKz0gcGFnZV9wb29scy5lcHBfdG90YWxfcGFnZXMgLSBwYWdlX3Bv b2xzLmVwcF9mcmVlX3BhZ2VzOworCisJb3BfaWR4ID0gcGFnZV9wb29scy5lcHBfZnJlZV9wYWdl cyAvIFBBR0VTX1BFUl9QT09MOworCW9nX2lkeCA9IHBhZ2VfcG9vbHMuZXBwX2ZyZWVfcGFnZXMg JSBQQUdFU19QRVJfUE9PTDsKKwlucF9pZHggPSBucG9vbHMgLSAxOworCW5nX2lkeCA9IChucGFn ZXMgLSAxKSAlIFBBR0VTX1BFUl9QT09MOworCisJd2hpbGUgKGZyZWVzbG90KSB7CisJCUxBU1NF UlQoIXBhZ2VfcG9vbHMuZXBwX3Bvb2xzW29wX2lkeF1bb2dfaWR4XSk7CisJCUxBU1NFUlQoIXBv b2xzW25wX2lkeF1bbmdfaWR4XSk7CisKKwkJcGFnZV9wb29scy5lcHBfcG9vbHNbb3BfaWR4XVtv Z19pZHhdID0gcG9vbHNbbnBfaWR4XVtuZ19pZHhdOworCQlwb29sc1tucF9pZHhdW25nX2lkeF0g PSBOVUxMOworCisJCWZyZWVzbG90LS07CisKKwkJaWYgKCsrb2dfaWR4ID09IFBBR0VTX1BFUl9Q T09MKSB7CisJCQlvcF9pZHgrKzsKKwkJCW9nX2lkeCA9IDA7CisJCX0KKwkJaWYgKC0tbmdfaWR4 IDwgMCkgeworCQkJaWYgKG5wX2lkeCA9PSAwKQorCQkJCWJyZWFrOworCQkJbnBfaWR4LS07CisJ CQluZ19pZHggPSBQQUdFU19QRVJfUE9PTCAtIDE7CisJCX0KKwl9CisKKwkvKgorCSAqICgyKSBh ZGQgcG9vbHMgaWYgbmVlZGVkLgorCSAqLworCWN1cl9ucG9vbHMgPSAocGFnZV9wb29scy5lcHBf dG90YWxfcGFnZXMgKyBQQUdFU19QRVJfUE9PTCAtIDEpIC8KKwkJICAgICAgUEFHRVNfUEVSX1BP T0w7CisJZW5kX25wb29scyA9IChwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlcyArIG5wYWdlcyAr CisJCSAgICAgIFBBR0VTX1BFUl9QT09MIC0gMSkgLyBQQUdFU19QRVJfUE9PTDsKKwlMQVNTRVJU KGVuZF9ucG9vbHMgPD0gcGFnZV9wb29scy5lcHBfbWF4X3Bvb2xzKTsKKworCW5wX2lkeCA9IDA7 CisJd2hpbGUgKGN1cl9ucG9vbHMgPCBlbmRfbnBvb2xzKSB7CisJCUxBU1NFUlQocGFnZV9wb29s cy5lcHBfcG9vbHNbY3VyX25wb29sc10gPT0gTlVMTCk7CisJCUxBU1NFUlQobnBfaWR4IDwgbnBv b2xzKTsKKwkJTEFTU0VSVChwb29sc1tucF9pZHhdICE9IE5VTEwpOworCisJCXBhZ2VfcG9vbHMu ZXBwX3Bvb2xzW2N1cl9ucG9vbHMrK10gPSBwb29sc1tucF9pZHhdOworCQlwb29sc1tucF9pZHgr K10gPSBOVUxMOworCX0KKworCXBhZ2VfcG9vbHMuZXBwX3RvdGFsX3BhZ2VzICs9IG5wYWdlczsK KwlwYWdlX3Bvb2xzLmVwcF9mcmVlX3BhZ2VzICs9IG5wYWdlczsKKwlwYWdlX3Bvb2xzLmVwcF9z dF9sb3dmcmVlID0gcGFnZV9wb29scy5lcHBfZnJlZV9wYWdlczsKKworCWlmIChwYWdlX3Bvb2xz LmVwcF90b3RhbF9wYWdlcyA+IHBhZ2VfcG9vbHMuZXBwX3N0X21heF9wYWdlcykKKwkJcGFnZV9w b29scy5lcHBfc3RfbWF4X3BhZ2VzID0gcGFnZV9wb29scy5lcHBfdG90YWxfcGFnZXM7CisKKwlD REVCVUcoRF9TRUMsICJhZGQgJWQgcGFnZXMgdG8gdG90YWwgJWx1XG4iLCBucGFnZXMsCisJICAg ICAgIHBhZ2VfcG9vbHMuZXBwX3RvdGFsX3BhZ2VzKTsKKworCXNwaW5fdW5sb2NrKCZwYWdlX3Bv b2xzLmVwcF9sb2NrKTsKK30KKworc3RhdGljIGludCBlbmNfcG9vbHNfYWRkX3BhZ2VzKGludCBu cGFnZXMpCit7CisJc3RhdGljIERFRklORV9NVVRFWChhZGRfcGFnZXNfbXV0ZXgpOworCXN0cnVj dCBwYWdlICoqKnBvb2xzOworCWludCBucG9vbHMsIGFsbG9jZWQgPSAwOworCWludCBpLCBqLCBy YyA9IC1FTk9NRU07CisKKwlpZiAobnBhZ2VzIDwgUFRMUlBDX01BWF9CUldfUEFHRVMpCisJCW5w YWdlcyA9IFBUTFJQQ19NQVhfQlJXX1BBR0VTOworCisJbXV0ZXhfbG9jaygmYWRkX3BhZ2VzX211 dGV4KTsKKworCWlmIChucGFnZXMgKyBwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlcyA+IHBhZ2Vf cG9vbHMuZXBwX21heF9wYWdlcykKKwkJbnBhZ2VzID0gcGFnZV9wb29scy5lcHBfbWF4X3BhZ2Vz IC0gcGFnZV9wb29scy5lcHBfdG90YWxfcGFnZXM7CisJTEFTU0VSVChucGFnZXMgPiAwKTsKKwor CXBhZ2VfcG9vbHMuZXBwX3N0X2dyb3dzKys7CisKKwlucG9vbHMgPSBucGFnZXNfdG9fbnBvb2xz KG5wYWdlcyk7CisKKwlwb29scyA9IGt2bWFsbG9jX2FycmF5KG5wb29scywgc2l6ZW9mKCpwb29s cyksCisJCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICghcG9vbHMpCisJ CWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IG5wb29sczsgaSsrKSB7CisJCXBvb2xzW2ld ID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9OT0ZTKTsKKwkJaWYgKCFwb29sc1tpXSkKKwkJCWdv dG8gb3V0X3Bvb2xzOworCisJCWZvciAoaiA9IDA7IGogPCBQQUdFU19QRVJfUE9PTCAmJiBhbGxv Y2VkIDwgbnBhZ2VzOyBqKyspIHsKKwkJCXBvb2xzW2ldW2pdID0gYWxsb2NfcGFnZShHRlBfTk9G UyB8CisJCQkJCQkgX19HRlBfSElHSE1FTSk7CisJCQlpZiAoIXBvb2xzW2ldW2pdKQorCQkJCWdv dG8gb3V0X3Bvb2xzOworCisJCQlhbGxvY2VkKys7CisJCX0KKwl9CisJTEFTU0VSVChhbGxvY2Vk ID09IG5wYWdlcyk7CisKKwllbmNfcG9vbHNfaW5zZXJ0KHBvb2xzLCBucG9vbHMsIG5wYWdlcyk7 CisJQ0RFQlVHKERfU0VDLCAiYWRkZWQgJWQgcGFnZXMgaW50byBwb29sc1xuIiwgbnBhZ2VzKTsK KwlyYyA9IDA7CisKK291dF9wb29sczoKKwllbmNfcG9vbHNfY2xlYW51cChwb29scywgbnBvb2xz KTsKKwlrdmZyZWUocG9vbHMpOworb3V0OgorCWlmIChyYykgeworCQlwYWdlX3Bvb2xzLmVwcF9z dF9ncm93X2ZhaWxzKys7CisJCUNFUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGVuYyBwYWdl c1xuIiwgbnBhZ2VzKTsKKwl9CisKKwltdXRleF91bmxvY2soJmFkZF9wYWdlc19tdXRleCk7CisJ cmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5jX3Bvb2xzX3dha2V1cCh2b2lk KQogewogCWFzc2VydF9zcGluX2xvY2tlZCgmcGFnZV9wb29scy5lcHBfbG9jayk7CiAKLQlpZiAo dW5saWtlbHkocGFnZV9wb29scy5lcHBfd2FpdHFsZW4pKSB7Ci0JCUxBU1NFUlQod2FpdHF1ZXVl X2FjdGl2ZSgmcGFnZV9wb29scy5lcHBfd2FpdHEpKTsKKwkvKiB3YWl0cXVldWVfYWN0aXZlICov CisJaWYgKHVubGlrZWx5KHdhaXRxdWV1ZV9hY3RpdmUoJnBhZ2VfcG9vbHMuZXBwX3dhaXRxKSkp CiAJCXdha2VfdXAoJnBhZ2VfcG9vbHMuZXBwX3dhaXRxKTsKLQl9Cit9CisKK3N0YXRpYyBpbnQg ZW5jX3Bvb2xzX3Nob3VsZF9ncm93KGludCBwYWdlX25lZWRlZCwgdGltZTY0X3Qgbm93KQorewor CS8qCisJICogZG9uJ3QgZ3JvdyBpZiBzb21lb25lIGVsc2UgaXMgZ3Jvd2luZyB0aGUgcG9vbHMg cmlnaHQgbm93LAorCSAqIG9yIHRoZSBwb29scyBoYXMgcmVhY2hlZCBpdHMgZnVsbCBjYXBhY2l0 eQorCSAqLworCWlmIChwYWdlX3Bvb2xzLmVwcF9ncm93aW5nIHx8CisJICAgIHBhZ2VfcG9vbHMu ZXBwX3RvdGFsX3BhZ2VzID09IHBhZ2VfcG9vbHMuZXBwX21heF9wYWdlcykKKwkJcmV0dXJuIDA7 CisKKwkvKiBpZiB0b3RhbCBwYWdlcyBpcyBub3QgZW5vdWdoLCB3ZSBuZWVkIHRvIGdyb3cgKi8K KwlpZiAocGFnZV9wb29scy5lcHBfdG90YWxfcGFnZXMgPCBwYWdlX25lZWRlZCkKKwkJcmV0dXJu IDE7CisKKwkvKgorCSAqIHdlIHdhbnRlZCB0byByZXR1cm4gMCBoZXJlIGlmIHRoZXJlIHdhcyBh IHNocmluayBqdXN0CisJICogaGFwcGVuZWQgYSBtb21lbnQgYWdvLCBidXQgdGhpcyBtYXkgY2F1 c2UgZGVhZGxvY2sgaWYgYm90aAorCSAqIGNsaWVudCBhbmQgb3N0IGxpdmUgb24gc2luZ2xlIG5v ZGUuCisJICovCisKKwkvKgorCSAqIGhlcmUgd2UgcGVyaGFwcyBuZWVkIGNvbnNpZGVyIG90aGVy IGZhY3RvcnMgbGlrZSB3YWl0IHF1ZXVlCisJICogbGVuZ3RoLCBpZGxlIGluZGV4LCBldGMuID8K KwkgKi8KKworCS8qIGdyb3cgdGhlIHBvb2xzIGluIGFueSBvdGhlciBjYXNlcyAqLworCXJldHVy biAxOwogfQogCiAvKgpAQCAtMzIzLDQ5ICs0OTksMjg3IEBAIGludCBwb29sX2lzX2F0X2Z1bGxf Y2FwYWNpdHkodm9pZCkKIAlyZXR1cm4gKHBhZ2VfcG9vbHMuZXBwX3RvdGFsX3BhZ2VzID09IHBh Z2VfcG9vbHMuZXBwX21heF9wYWdlcyk7CiB9CiAKLXZvaWQgc3B0bHJwY19lbmNfcG9vbF9wdXRf cGFnZXMoc3RydWN0IHB0bHJwY19idWxrX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW5saW5lIHN0cnVj dCBwYWdlICoqcGFnZV9mcm9tX2J1bGtkZXNjKHZvaWQgKmFycmF5LCBpbnQgaW5kZXgpCiB7CisJ c3RydWN0IHB0bHJwY19idWxrX2Rlc2MgKmRlc2MgPSAoc3RydWN0IHB0bHJwY19idWxrX2Rlc2Mg KilhcnJheTsKKworCXJldHVybiAmZGVzYy0+YmRfZW5jX3ZlY1tpbmRleF0uYnZfcGFnZTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqKnBhZ2VfZnJvbV9wYWdlYXJyYXkodm9pZCAq YXJyYXksIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcGFnZSAqKnBhID0gKHN0cnVjdCBwYWdlICoq KWFycmF5OworCisJcmV0dXJuICZwYVtpbmRleF07Cit9CisKKy8qCisgKiB3ZSBhbGxvY2F0ZSB0 aGUgcmVxdWVzdGVkIHBhZ2VzIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9f c3B0bHJwY19lbmNfcG9vbF9nZXRfcGFnZXModm9pZCAqYXJyYXksIHVuc2lnbmVkIGludCBjb3Vu dCwKKwkJCQkJICAgICAgIHN0cnVjdCBwYWdlICoqKCpwYWdlX2Zyb20pKHZvaWQgKiwgaW50KSkK K3sKKwl3YWl0X3F1ZXVlX2VudHJ5X3Qgd2FpdGxpbms7CisJdW5zaWduZWQgbG9uZyB0aGlzX2lk bGUgPSAtMTsKKwl1NjQgdGlja19ucyA9IDA7CisJdGltZTY0X3Qgbm93OwogCWludCBwX2lkeCwg Z19pZHg7Ci0JaW50IGk7CisJaW50IGksIHJjID0gMDsKIAotCWlmICghZGVzYy0+YmRfZW5jX3Zl YykKLQkJcmV0dXJuOworCWlmICghYXJyYXkgfHwgY291bnQgPD0gMCB8fCBjb3VudCA+IHBhZ2Vf cG9vbHMuZXBwX21heF9wYWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJnBh Z2VfcG9vbHMuZXBwX2xvY2spOworCisJcGFnZV9wb29scy5lcHBfc3RfYWNjZXNzKys7CithZ2Fp bjoKKwlpZiAodW5saWtlbHkocGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyA8IGNvdW50KSkgewor CQlpZiAodGlja19ucyA9PSAwKQorCQkJdGlja19ucyA9IGt0aW1lX2dldF9ucygpOworCisJCW5v dyA9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTsKKworCQlwYWdlX3Bvb2xzLmVwcF9zdF9taXNz aW5ncysrOworCQlwYWdlX3Bvb2xzLmVwcF9wYWdlc19zaG9ydCArPSBjb3VudDsKKworCQlpZiAo ZW5jX3Bvb2xzX3Nob3VsZF9ncm93KGNvdW50LCBub3cpKSB7CisJCQlwYWdlX3Bvb2xzLmVwcF9n cm93aW5nID0gMTsKKworCQkJc3Bpbl91bmxvY2soJnBhZ2VfcG9vbHMuZXBwX2xvY2spOworCQkJ ZW5jX3Bvb2xzX2FkZF9wYWdlcyhwYWdlX3Bvb2xzLmVwcF9wYWdlc19zaG9ydCAvIDIpOworCQkJ c3Bpbl9sb2NrKCZwYWdlX3Bvb2xzLmVwcF9sb2NrKTsKKworCQkJcGFnZV9wb29scy5lcHBfZ3Jv d2luZyA9IDA7CisKKwkJCWVuY19wb29sc193YWtldXAoKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChw YWdlX3Bvb2xzLmVwcF9ncm93aW5nKSB7CisJCQkJaWYgKCsrcGFnZV9wb29scy5lcHBfd2FpdHFs ZW4gPgorCQkJCSAgICBwYWdlX3Bvb2xzLmVwcF9zdF9tYXhfd3FsZW4pCisJCQkJCXBhZ2VfcG9v bHMuZXBwX3N0X21heF93cWxlbiA9CisJCQkJCQlwYWdlX3Bvb2xzLmVwcF93YWl0cWxlbjsKKwor CQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCQlpbml0X3dh aXQoJndhaXRsaW5rKTsKKwkJCQlhZGRfd2FpdF9xdWV1ZSgmcGFnZV9wb29scy5lcHBfd2FpdHEs CisJCQkJCSAgICAgICAmd2FpdGxpbmspOworCisJCQkJc3Bpbl91bmxvY2soJnBhZ2VfcG9vbHMu ZXBwX2xvY2spOworCQkJCXNjaGVkdWxlKCk7CisJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBhZ2Vf cG9vbHMuZXBwX3dhaXRxLAorCQkJCQkJICAmd2FpdGxpbmspOworCQkJCXNwaW5fbG9jaygmcGFn ZV9wb29scy5lcHBfbG9jayk7CisJCQkJcGFnZV9wb29scy5lcHBfd2FpdHFsZW4tLTsKKwkJCX0g ZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBwdGxycGNkIHRocmVhZCBzaG91bGQgbm90IHNsZWVwIGlu IHRoYXQgY2FzZSwKKwkJCQkgKiBvciBkZWFkbG9jayBtYXkgb2NjdXIhCisJCQkJICogSW5zdGVh ZCwgcmV0dXJuIC1FTk9NRU0gc28gdGhhdCB1cHBlciBsYXllcnMKKwkJCQkgKiB3aWxsIHB1dCBy ZXF1ZXN0IGJhY2sgaW4gcXVldWUuCisJCQkJICovCisJCQkJcGFnZV9wb29scy5lcHBfc3Rfb3V0 b2ZtZW0rKzsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQor CQl9CisKKwkJaWYgKHBhZ2VfcG9vbHMuZXBwX3BhZ2VzX3Nob3J0IDwgY291bnQpIHsKKwkJCXJj ID0gLUVQUk9UTzsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQlwYWdlX3Bvb2xzLmVwcF9w YWdlc19zaG9ydCAtPSBjb3VudDsKKworCQl0aGlzX2lkbGUgPSAwOworCQlnb3RvIGFnYWluOwor CX0KKworCS8qIHJlY29yZCBtYXggd2FpdCB0aW1lICovCisJaWYgKHVubGlrZWx5KHRpY2tfbnMp KSB7CisJCWt0aW1lX3QgdGljayA9IGt0aW1lX3N1Yl9ucyhrdGltZV9nZXQoKSwgdGlja19ucyk7 CisKKwkJaWYgKGt0aW1lX2FmdGVyKHRpY2ssIHBhZ2VfcG9vbHMuZXBwX3N0X21heF93YWl0KSkK KwkJCXBhZ2VfcG9vbHMuZXBwX3N0X21heF93YWl0ID0gdGljazsKKwl9CisKKwkvKiBwcm9jZWVk IHdpdGggcmVzdCBvZiBhbGxvY2F0aW9uICovCisJcGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyAt PSBjb3VudDsKKworCXBfaWR4ID0gcGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyAvIFBBR0VTX1BF Ul9QT09MOworCWdfaWR4ID0gcGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyAlIFBBR0VTX1BFUl9Q T09MOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKipw YWdlcCA9IHBhZ2VfZnJvbShhcnJheSwgaSk7CisKKwkJaWYgKCFwYWdlX3Bvb2xzLmVwcF9wb29s c1twX2lkeF1bZ19pZHhdKSB7CisJCQlyYyA9IC1FUFJPVE87CisJCQlnb3RvIG91dF91bmxvY2s7 CisJCX0KKwkJKnBhZ2VwID0gcGFnZV9wb29scy5lcHBfcG9vbHNbcF9pZHhdW2dfaWR4XTsKKwkJ cGFnZV9wb29scy5lcHBfcG9vbHNbcF9pZHhdW2dfaWR4XSA9IE5VTEw7CisKKwkJaWYgKCsrZ19p ZHggPT0gUEFHRVNfUEVSX1BPT0wpIHsKKwkJCXBfaWR4Kys7CisJCQlnX2lkeCA9IDA7CisJCX0K Kwl9CisKKwlpZiAocGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyA8IHBhZ2VfcG9vbHMuZXBwX3N0 X2xvd2ZyZWUpCisJCXBhZ2VfcG9vbHMuZXBwX3N0X2xvd2ZyZWUgPSBwYWdlX3Bvb2xzLmVwcF9m cmVlX3BhZ2VzOworCisJLyoKKwkgKiBuZXcgaWRsZSBpbmRleCA9IChvbGQgKiB3ZWlnaHQgKyBu ZXcpIC8gKHdlaWdodCArIDEpCisJICovCisJaWYgKHRoaXNfaWRsZSA9PSAtMSkgeworCQl0aGlz X2lkbGUgPSBwYWdlX3Bvb2xzLmVwcF9mcmVlX3BhZ2VzICogSURMRV9JRFhfTUFYIC8KKwkJCSAg ICBwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlczsKKwl9CisJcGFnZV9wb29scy5lcHBfaWRsZV9p ZHggPSAocGFnZV9wb29scy5lcHBfaWRsZV9pZHggKiBJRExFX0lEWF9XRUlHSFQgKworCQkJCSAg IHRoaXNfaWRsZSkgLyAoSURMRV9JRFhfV0VJR0hUICsgMSk7CisKKwlwYWdlX3Bvb2xzLmVwcF9s YXN0X2FjY2VzcyA9IGt0aW1lX2dldF9zZWNvbmRzKCk7CisKK291dF91bmxvY2s6CisJc3Bpbl91 bmxvY2soJnBhZ2VfcG9vbHMuZXBwX2xvY2spOworCXJldHVybiByYzsKK30KKworaW50IHNwdGxy cGNfZW5jX3Bvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBwdGxycGNfYnVsa19kZXNjICpkZXNjKQorewor CWludCByYzsKIAogCUxBU1NFUlQoZGVzYy0+YmRfaW92X2NvdW50ID4gMCk7CisJTEFTU0VSVChk ZXNjLT5iZF9pb3ZfY291bnQgPD0gcGFnZV9wb29scy5lcHBfbWF4X3BhZ2VzKTsKKworCS8qIHJl c2VudCBidWxrLCBlbmMgaW92IG1pZ2h0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcHJldmlvdXNseSAq LworCWlmIChkZXNjLT5iZF9lbmNfdmVjKQorCQlyZXR1cm4gMDsKKworCWRlc2MtPmJkX2VuY192 ZWMgPSBrdm1hbGxvY19hcnJheShkZXNjLT5iZF9pb3ZfY291bnQsCisJCQkJCSAgc2l6ZW9mKCpk ZXNjLT5iZF9lbmNfdmVjKSwKKwkJCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYg KCFkZXNjLT5iZF9lbmNfdmVjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gX19zcHRscnBj X2VuY19wb29sX2dldF9wYWdlcygodm9pZCAqKWRlc2MsIGRlc2MtPmJkX2lvdl9jb3VudCwKKwkJ CQkJICBwYWdlX2Zyb21fYnVsa2Rlc2MpOworCWlmIChyYykgeworCQlrdmZyZWUoZGVzYy0+YmRf ZW5jX3ZlYyk7CisJCWRlc2MtPmJkX2VuY192ZWMgPSBOVUxMOworCX0KKwlyZXR1cm4gcmM7Cit9 CitFWFBPUlRfU1lNQk9MKHNwdGxycGNfZW5jX3Bvb2xfZ2V0X3BhZ2VzKTsKKworaW50IHNwdGxy cGNfZW5jX3Bvb2xfZ2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGEsIHVuc2lnbmVkIGlu dCBjb3VudCkKK3sKKwlyZXR1cm4gX19zcHRscnBjX2VuY19wb29sX2dldF9wYWdlcygodm9pZCAq KXBhLCBjb3VudCwKKwkJCQkJICAgIHBhZ2VfZnJvbV9wYWdlYXJyYXkpOworfQorRVhQT1JUX1NZ TUJPTChzcHRscnBjX2VuY19wb29sX2dldF9wYWdlc19hcnJheSk7CisKK3N0YXRpYyBpbnQgX19z cHRscnBjX2VuY19wb29sX3B1dF9wYWdlcyh2b2lkICphcnJheSwgdW5zaWduZWQgaW50IGNvdW50 LAorCQkJCQlzdHJ1Y3QgcGFnZSAqKigqcGFnZV9mcm9tKSh2b2lkICosIGludCkpCit7CisJaW50 IHBfaWR4LCBnX2lkeDsKKwlpbnQgaSwgcmMgPSAwOworCisJaWYgKCFhcnJheSB8fCBjb3VudCA8 PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9jaygmcGFnZV9wb29scy5lcHBfbG9j ayk7CiAKIAlwX2lkeCA9IHBhZ2VfcG9vbHMuZXBwX2ZyZWVfcGFnZXMgLyBQQUdFU19QRVJfUE9P TDsKIAlnX2lkeCA9IHBhZ2VfcG9vbHMuZXBwX2ZyZWVfcGFnZXMgJSBQQUdFU19QRVJfUE9PTDsK IAotCUxBU1NFUlQocGFnZV9wb29scy5lcHBfZnJlZV9wYWdlcyArIGRlc2MtPmJkX2lvdl9jb3Vu dCA8PQotCQlwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlcyk7Ci0JTEFTU0VSVChwYWdlX3Bvb2xz LmVwcF9wb29sc1twX2lkeF0pOworCWlmIChwYWdlX3Bvb2xzLmVwcF9mcmVlX3BhZ2VzICsgY291 bnQgPiBwYWdlX3Bvb2xzLmVwcF90b3RhbF9wYWdlcykgeworCQlyYyA9IC1FUFJPVE87CisJCWdv dG8gb3V0X3VubG9jazsKKwl9CisJaWYgKCFwYWdlX3Bvb2xzLmVwcF9wb29sc1twX2lkeF0pIHsK KwkJcmMgPSAtRVBST1RPOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCi0JZm9yIChpID0gMDsg aSA8IGRlc2MtPmJkX2lvdl9jb3VudDsgaSsrKSB7Ci0JCUxBU1NFUlQoZGVzYy0+YmRfZW5jX3Zl Y1tpXS5idl9wYWdlKTsKLQkJTEFTU0VSVChnX2lkeCAhPSAwIHx8IHBhZ2VfcG9vbHMuZXBwX3Bv b2xzW3BfaWR4XSk7Ci0JCUxBU1NFUlQoIXBhZ2VfcG9vbHMuZXBwX3Bvb2xzW3BfaWR4XVtnX2lk eF0pOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICoqcGFn ZXAgPSBwYWdlX2Zyb20oYXJyYXksIGkpOwogCi0JCXBhZ2VfcG9vbHMuZXBwX3Bvb2xzW3BfaWR4 XVtnX2lkeF0gPQotCQkJZGVzYy0+YmRfZW5jX3ZlY1tpXS5idl9wYWdlOworCQlpZiAoISpwYWdl cCB8fAorCQkgICAgcGFnZV9wb29scy5lcHBfcG9vbHNbcF9pZHhdW2dfaWR4XSkgeworCQkJcmMg PSAtRVBST1RPOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAKKwkJcGFnZV9wb29scy5lcHBf cG9vbHNbcF9pZHhdW2dfaWR4XSA9ICpwYWdlcDsKIAkJaWYgKCsrZ19pZHggPT0gUEFHRVNfUEVS X1BPT0wpIHsKIAkJCXBfaWR4Kys7CiAJCQlnX2lkeCA9IDA7CiAJCX0KIAl9CiAKLQlwYWdlX3Bv b2xzLmVwcF9mcmVlX3BhZ2VzICs9IGRlc2MtPmJkX2lvdl9jb3VudDsKLQorCXBhZ2VfcG9vbHMu ZXBwX2ZyZWVfcGFnZXMgKz0gY291bnQ7CiAJZW5jX3Bvb2xzX3dha2V1cCgpOwogCitvdXRfdW5s b2NrOgogCXNwaW5fdW5sb2NrKCZwYWdlX3Bvb2xzLmVwcF9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9 CisKK3ZvaWQgc3B0bHJwY19lbmNfcG9vbF9wdXRfcGFnZXMoc3RydWN0IHB0bHJwY19idWxrX2Rl c2MgKmRlc2MpCit7CisJaW50IHJjOworCisJaWYgKCFkZXNjLT5iZF9lbmNfdmVjKQorCQlyZXR1 cm47CisKKwlyYyA9IF9fc3B0bHJwY19lbmNfcG9vbF9wdXRfcGFnZXMoKHZvaWQgKilkZXNjLCBk ZXNjLT5iZF9pb3ZfY291bnQsCisJCQkJCSAgcGFnZV9mcm9tX2J1bGtkZXNjKTsKKwlpZiAocmMp CisJCUNERUJVRyhEX1NFQywgImVycm9yIHB1dHRpbmcgcGFnZXMgaW4gZW5jIHBvb2w6ICVkXG4i LCByYyk7CiAKLQlrZnJlZShkZXNjLT5iZF9lbmNfdmVjKTsKKwlrdmZyZWUoZGVzYy0+YmRfZW5j X3ZlYyk7CiAJZGVzYy0+YmRfZW5jX3ZlYyA9IE5VTEw7CiB9CiAKK3ZvaWQgc3B0bHJwY19lbmNf cG9vbF9wdXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYSwgdW5zaWduZWQgaW50IGNvdW50 KQoreworCWludCByYzsKKworCXJjID0gX19zcHRscnBjX2VuY19wb29sX3B1dF9wYWdlcygodm9p ZCAqKXBhLCBjb3VudCwKKwkJCQkJICBwYWdlX2Zyb21fcGFnZWFycmF5KTsKKwlpZiAocmMpCisJ CUNERUJVRyhEX1NFQywgImVycm9yIHB1dHRpbmcgcGFnZXMgaW4gZW5jIHBvb2w6ICVkXG4iLCBy Yyk7Cit9CitFWFBPUlRfU1lNQk9MKHNwdGxycGNfZW5jX3Bvb2xfcHV0X3BhZ2VzX2FycmF5KTsK KworLyoKKyAqIHdlIGRvbid0IGRvIG11Y2ggc3R1ZmYgZm9yIGFkZF91c2VyL2RlbF91c2VyIGFu eW1vcmUsIGV4Y2VwdCBhZGRpbmcgc29tZQorICogaW5pdGlhbCBwYWdlcyBpbiBhZGRfdXNlcigp IGlmIGN1cnJlbnQgcG9vbHMgYXJlIGVtcHR5LCByZXN0IHdvdWxkIGJlCisgKiBoYW5kbGVkIGJ5 IHRoZSBwb29scydzIHNlbGYtYWRhcHRpb24uCisgKi8KK2ludCBzcHRscnBjX2VuY19wb29sX2Fk ZF91c2VyKHZvaWQpCit7CisJaW50IG5lZWRfZ3JvdyA9IDA7CisKKwlzcGluX2xvY2soJnBhZ2Vf cG9vbHMuZXBwX2xvY2spOworCWlmIChwYWdlX3Bvb2xzLmVwcF9ncm93aW5nID09IDAgJiYgcGFn ZV9wb29scy5lcHBfdG90YWxfcGFnZXMgPT0gMCkgeworCQlwYWdlX3Bvb2xzLmVwcF9ncm93aW5n ID0gMTsKKwkJbmVlZF9ncm93ID0gMTsKKwl9CisJc3Bpbl91bmxvY2soJnBhZ2VfcG9vbHMuZXBw X2xvY2spOworCisJaWYgKG5lZWRfZ3JvdykgeworCQllbmNfcG9vbHNfYWRkX3BhZ2VzKFBUTFJQ Q19NQVhfQlJXX1BBR0VTICsKKwkJCQkgICAgUFRMUlBDX01BWF9CUldfUEFHRVMpOworCisJCXNw aW5fbG9jaygmcGFnZV9wb29scy5lcHBfbG9jayk7CisJCXBhZ2VfcG9vbHMuZXBwX2dyb3dpbmcg PSAwOworCQllbmNfcG9vbHNfd2FrZXVwKCk7CisJCXNwaW5fdW5sb2NrKCZwYWdlX3Bvb2xzLmVw cF9sb2NrKTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNwdGxycGNfZW5jX3Bv b2xfYWRkX3VzZXIpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5jX3Bvb2xzX2FsbG9jKHZvaWQp CiB7CiAJTEFTU0VSVChwYWdlX3Bvb2xzLmVwcF9tYXhfcG9vbHMpOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9mc2NyeXB0LmggYi9pbmNsdWRlL2xpbnV4L2ZzY3J5cHQuaAppbmRleCA5OTFm Zjg1Li5iZTA0OTBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzY3J5cHQuaAorKysgYi9p bmNsdWRlL2xpbnV4L2ZzY3J5cHQuaApAQCAtMTI4LDE1ICsxMjgsMzUgQEAgc3RydWN0IHBhZ2Ug KmZzY3J5cHRfZW5jcnlwdF9wYWdlY2FjaGVfYmxvY2tzKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJ CQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgb2ZmcywK IAkJCQkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKLWludCBmc2NyeXB0X2VuY3J5cHRfYmxvY2tf aW5wbGFjZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJ CQkgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzLAotCQkJCSAgdTY0IGxibGtf bnVtLCBnZnBfdCBnZnBfZmxhZ3MpOworaW50IGZzY3J5cHRfZW5jcnlwdF9ibG9jayhjb25zdCBz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqc3JjLAorCQkJICAgc3RydWN0IHBhZ2Ug KmRzdCwgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBvZmZzLCB1NjQgbGJs a19udW0sIGdmcF90IGdmcF9mbGFncyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGZzY3J5cHRfZW5j cnlwdF9ibG9ja19pbnBsYWNlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQlzdHJ1 Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCXVuc2lnbmVkIGludCBsZW4sCisJCQkJCQl1bnNpZ25lZCBp bnQgb2ZmcywKKwkJCQkJCXU2NCBsYmxrX251bSkKK3sKKwlyZXR1cm4gZnNjcnlwdF9lbmNyeXB0 X2Jsb2NrKGlub2RlLCBwYWdlLCBwYWdlLCBsZW4sIG9mZnMsIGxibGtfbnVtLAorCQkJCSAgICAg R0ZQX05PRlMpOworfQogCiBpbnQgZnNjcnlwdF9kZWNyeXB0X3BhZ2VjYWNoZV9ibG9ja3Moc3Ry dWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCiAJCQkJICAgICB1bnNpZ25lZCBpbnQg b2Zmcyk7Ci1pbnQgZnNjcnlwdF9kZWNyeXB0X2Jsb2NrX2lucGxhY2UoY29uc3Qgc3RydWN0IGlu b2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICB1bnNpZ25lZCBpbnQgbGVuLCB1 bnNpZ25lZCBpbnQgb2ZmcywKLQkJCQkgIHU2NCBsYmxrX251bSk7CisKK2ludCBmc2NyeXB0X2Rl Y3J5cHRfYmxvY2soY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnNyYywK KwkJCSAgIHN0cnVjdCBwYWdlICpkc3QsIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICB1bnNpZ25l ZCBpbnQgb2ZmcywgdTY0IGxibGtfbnVtLCBnZnBfdCBnZnBfZmxhZ3MpOworCitzdGF0aWMgaW5s aW5lIGludCBmc2NyeXB0X2RlY3J5cHRfYmxvY2tfaW5wbGFjZShjb25zdCBzdHJ1Y3QgaW5vZGUg Kmlub2RlLAorCQkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQl1bnNpZ25lZCBpbnQgbGVu LCB1bnNpZ25lZCBpbnQgb2ZmcywKKwkJCQkJCXU2NCBsYmxrX251bSkKK3sKKwlyZXR1cm4gZnNj cnlwdF9kZWNyeXB0X2Jsb2NrKGlub2RlLCBwYWdlLCBwYWdlLCBsZW4sIG9mZnMsIGxibGtfbnVt LAorCQkJCSAgICAgR0ZQX05PRlMpOworfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZnNjcnlwdF9p c19ib3VuY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTI3Miw2ICsyOTIsMTUgQEAg c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZnNjcnlwdF9lbmNyeXB0X3BhZ2VjYWNoZV9ibG9j a3Moc3RydWN0IHBhZ2UgKnBhZ2UsCiAJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOwogfQog CitzdGF0aWMgaW5saW5lIGludCBmc2NyeXB0X2VuY3J5cHRfYmxvY2soY29uc3Qgc3RydWN0IGlu b2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBwYWdlICpzcmMsIHN0cnVjdCBwYWdlICpkc3QsCisJ CQkJCSB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgdW5zaWduZWQgaW50IG9mZnMsIHU2NCBsYmxr X251bSwKKwkJCQkJIGdmcF90IGdmcF9mbGFncykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9 CisKIHN0YXRpYyBpbmxpbmUgaW50IGZzY3J5cHRfZW5jcnlwdF9ibG9ja19pbnBsYWNlKGNvbnN0 IHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkJCXVu c2lnbmVkIGludCBsZW4sCkBAIC0yOTYsNiArMzI1LDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZz Y3J5cHRfZGVjcnlwdF9ibG9ja19pbnBsYWNlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJ cmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCitzdGF0aWMgaW5saW5lIGludCBmc2NyeXB0X2RlY3J5 cHRfYmxvY2soY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBwYWdlICpz cmMsIHN0cnVjdCBwYWdlICpkc3QsCisJCQkJCSB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgdW5z aWduZWQgaW50IG9mZnMsIHU2NCBsYmxrX251bSkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9 CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBmc2NyeXB0X2lzX2JvdW5jZV9wYWdlKHN0cnVjdCBwYWdl ICpwYWdlKQogewogCXJldHVybiBmYWxzZTsKLS0gCjEuOC4zLjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmx1c3RyZS1kZXZlbCBtYWlsaW5nIGxpc3QK bHVzdHJlLWRldmVsQGxpc3RzLmx1c3RyZS5vcmcKaHR0cDovL2xpc3RzLmx1c3RyZS5vcmcvbGlz dGluZm8uY2dpL2x1c3RyZS1kZXZlbC1sdXN0cmUub3JnCg==