From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: [PATCH v5 05/10] xen/arm: optee: add std call handling Date: Tue, 21 May 2019 21:26:00 +0000 Message-ID: <20190521212530.12706-6-volodymyr_babchuk@epam.com> References: <20190521212530.12706-1-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hTCGs-0008G2-4Q for xen-devel@lists.xenproject.org; Tue, 21 May 2019 21:26:06 +0000 In-Reply-To: <20190521212530.12706-1-volodymyr_babchuk@epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: "tee-dev@lists.linaro.org" , Julien Grall , Stefano Stabellini , Volodymyr Babchuk List-Id: xen-devel@lists.xenproject.org VGhlIG1haW4gd2F5IHRvIGNvbW11bmljYXRlIHdpdGggT1AtVEVFIGlzIHRvIGlzc3VlIHN0YW5k YXJkIFNNQ0NDCmNhbGwuICJTdGFuZGFyZCIgaXMgYSBTTUNDQyB0ZXJtIGFuZCBpdCBtZWFucyB0 aGF0IGNhbGwgY2FuIGJlCmludGVycnVwdGVkIGFuZCBPUC1URUUgY2FuIHJldHVybiBjb250cm9s IHRvIE5XIGJlZm9yZSBjb21wbGV0aW5nCnRoZSBjYWxsLgoKSW4gY29udHJhc3Qgd2l0aCBmYXN0 IGNhbGxzLCB3aGVyZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMKYXJlIHBhc3NlZCBpbiBy ZWdpc3RlcnMsIHN0YW5kYXJkIGNhbGxzIHVzZSBzaGFyZWQgbWVtb3J5LiBSZWdpc3RlcgpwYWly IGExLGEyIGhvbGRzIDY0LWJpdCBQQSBvZiBjb21tYW5kIGJ1ZmZlciwgd2hlcmUgYWxsIGFyZ3Vt ZW50cwphcmUgc3RvcmVkIGFuZCB3aGljaCBpcyB1c2VkIHRvIHJldHVybiBkYXRhLiBPUC1URUUg aW50ZXJuYWxseQpjb3BpZXMgY29udGVudHMgb2YgdGhpcyBidWZmZXIgaW50byBvd24gc2VjdXJl IG1lbW9yeSBiZWZvcmUgYWNjZXNzaW5nCmFuZCB2YWxpZGF0aW5nIGFueSBkYXRhIGluIGNvbW1h bmQgYnVmZmVyLiBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzdXJlCnRoYXQgTlcgd2lsbCBub3QgY2hh bmdlIGNvbnRlbnRzIG9mIHRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVycy4KCk1lZGlhdG9yIG5lZWRz IHRvIGRvIHRoZSBzYW1lIGZvciBudW1iZXIgb2YgcmVhc29uczoKCjEuIFRvIG1ha2Ugc3VyZSB0 aGF0IGd1ZXN0IHdpbGwgbm90IGNoYW5nZSBkYXRhIGFmdGVyIHZhbGlkYXRpb24uCjIuIFRvIHRy YW5zbGF0ZSBJUEFzIHRvIFBBcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgKHRoaXMgaXMgbm90IGRv bmUKICAgaW4gdGhpcyBwYXRjaCkuCjMuIFRvIGhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzIGZyb20g Z3Vlc3QsIHNvIGl0IHdpbGwgbm90IGJlIGFibGUKICAgdG8gZG8gSVBBLT5QQSB0cmFuc2xhdGlv biBieSBtaXN1c2luZyBtZWRpYXRvci4KCkR1cmluZyBzdGFuZGFyZCBjYWxsIE9QLVRFRSBjYW4g aXNzdWUgbXVsdGlwbGUgIlJQQyByZXR1cm5zIiwgYXNraW5nCk5XIHRvIGRvIHNvbWUgd29yayBm b3IgT1AtVEVFLiBOVyB0aGVuIGlzc3VlcyBzcGVjaWFsIGNhbGwKT1BURUVfU01DX0NBTExfUkVU VVJOX0ZST01fUlBDIHRvIHJlc3VtZSBoYW5kbGluZyBvZiB0aGUgb3JpZ2luYWwgY2FsbC4KVGh1 cywgbWVkaWF0b3IgbmVlZHMgdG8gbWFpbnRhaW4gY29udGV4dCBmb3Igb3JpZ2luYWwgc3RhbmRh cmQgY2FsbApkdXJpbmcgbXVsdGlwbGUgU01DQ0MgY2FsbHMuCgpTdGFuZGFyZCBjYWxsIGlzIGNv bnNpZGVyZWQgY29tcGxldGUsIHdoZW4gcmV0dXJuZWQgdmFsdWUgaXMKbm90IGEgUlBDIHJlcXVl c3QuCgpTaWduZWQtb2ZmLWJ5OiBWb2xvZHlteXIgQmFiY2h1ayA8dm9sb2R5bXlyX2JhYmNodWtA ZXBhbS5jb20+Ci0tLQoKIEFsbCB0aGUgcGF0Y2hlcyB0byBvcHRlZS5jIHNob3VsZCBiZSBtZXJn ZWQgdG9nZXRoZXIuIFRoZXkgd2VyZQogc3BsaXQgdG8gZWFzZSB1cCByZXZpZXcuIEJ1dCB0aGV5 IGRlcGVuZCBoZWF2aWx5IG9uIGVhY2ggb3RoZXIuCgogIENoYW5nZXMgZnJvbSB2NDoKICAtIENv ZGUgdXNlcyBhcm1fc21jY2Nfc21jKCkgZGlyZWN0bHksIGluc3RlYWQgb2YgZm9yd2FyZF9jYWxs KCkKICAtIGRvX2NhbGxfd2l0aF9hcmcoKSBmdW5jdGlvbiBub3cgYWNjZXB0cyByZWdpc3RlciB2 YWx1ZXMgYXMKICAgIHBhcmFtZXRlcnMsIHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgUlBDIGhhbmRs ZXJzIHdpdGggY29ycmVjdAogICAgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gUlBDIHR5cGUKICAtIG9w dGVlX3Byb2JlKCkgY2FsbHMgT1BURUVfU01DX0dFVF9USFJFQURfQ09VTlQuIFRoaXMgY2FsbAog ICAgaXMgbWVyZ2VkIGludG8gT1AtVEVFIG1haW5saW5lIGFuZCB3aWxsIGJlIHJlbGVhc2VkIHdp dGgKICAgIE9QLVRFRSB2My41LjAKICAtIFJlbW92ZWQgREVGX01BWF9PUFRFRV9USFJFQURTIGJl Y2F1c2UgaXQgaXMgZXhwZWN0ZWQgdGhhdAogICAgT1AtVEVFIHdvdWxkIHN1cHBvcnQgT1BURUVf U01DX0dFVF9USFJFQURfQ09VTlQKICAtIE1vdmVkIG1hcC91bm1hcF94ZW5fYXJnKCkgb3V0c2lk ZSB0aGUgc3BpbmxvY2tzCiAgLSBBZGRlZCBnZXRfZG9tYWluX3JhbV9wYWdlKCkgaGVscGVyIGZ1 bmN0aW9uCiAgLSBDaGVjayB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoYXQgYXJlIHN1cHBs aWVkIGJ5IGd1ZXN0CgogIENoYW5nZXMgZnJvbSB2MzoKICAtIEFkZGVkIGFiaWxpdHkgdG8gcmVh ZCBudW1iZXIgb2YgdGhyZWFkcyBmcm9tIE9QLVRFRSwgaWYgaXQKICBzdXBwb3J0cyB0aGlzIGZl YXR1cmUKICAtIFBhZ2VzIGFyZSBhbGxvY2F0ZWQgZnJvbSBkb21oZWFwLCBpbnN0ZWFkIG9mIHhl bmhlYXAKICAtIEFkZGVkIGNvbW1lbnRzIGZvciBjb21wbGV4IGNvZGUKCiAgQ2hhbmdlcyBmcm9t IHYyOgogIC0gcmVuYW1lZCBzdHJ1Y3QgZG9tYWluX2N0eCB0byBzdHJ1Y3Qgb3B0ZWVfZG9tYWlu CiAgLSBmaXhlZCBjb2Rpbmcgc3R5bGUKICAtIE5vdyBJIHVzZSBhY2Nlc3NfZ3Vlc3RfbWVtb3J5 X2J5X2lwYSgpIGluc3RlYWQgb2YgbWFwcGluZ3MKICAgIHRvIHJlYWQgY29tbWFuZCBidWZmZXIK ICAtIEFkZGVkIHRyYWNraW5nIGZvciBpbiBmbGlnaHQgY2FsbHMsIHNvIGd1ZXN0IGNhbid0IHJl c3VtZQogICAgdGhlIHNhbWUgY2FsbCBmcm9tIHR3byBDUFVzIHNpbXVsdGFuaW91c2x5Ci0tLQog eGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jIHwgNTEwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUwNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyBiL3hlbi9hcmNo L2FybS90ZWUvb3B0ZWUuYwppbmRleCA2YzUxY2FhNDFhLi5mMDkyNDkyODQ5IDEwMDY0NAotLS0g YS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKKysrIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5j CkBAIC0yNSw4ICsyNSwxMyBAQAogICovCiAKICNpbmNsdWRlIDx4ZW4vZGV2aWNlX3RyZWUuaD4K KyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KKyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5j bHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgogI2luY2x1ZGUg PHhlbi9zY2hlZC5oPgogCisjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3Nt Y2NjLmg+CiAjaW5jbHVkZSA8YXNtL3RlZS90ZWUuaD4KICNpbmNsdWRlIDxhc20vdGVlL29wdGVl X21zZy5oPgpAQCAtMzUsNiArNDAsMTkgQEAKIC8qIE51bWJlciBvZiBTTUNzIGtub3duIHRvIHRo ZSBtZWRpYXRvciAqLwogI2RlZmluZSBPUFRFRV9NRURJQVRPUl9TTUNfQ09VTlQgICAxMQogCisv KgorICogIlRoZSByZXR1cm4gY29kZSBpcyBhbiBlcnJvciB0aGF0IG9yaWdpbmF0ZWQgd2l0aGlu IHRoZSB1bmRlcmx5aW5nCisgKiBjb21tdW5pY2F0aW9ucyBzdGFjayBsaW5raW5nIHRoZSByaWNo IE9TIHdpdGggdGhlIFRFRSIgYXMgZGVzY3JpYmVkCisgKiBpbiBHUCBURUUgQ2xpZW50IEFQSSBT cGVjaWZpY2F0aW9uLgorICovCisjZGVmaW5lIFRFRUNfT1JJR0lOX0NPTU1TIDB4MDAwMDAwMDIK KworLyoKKyAqICJJbnB1dCBwYXJhbWV0ZXJzIHdlcmUgaW52YWxpZCIgYXMgZGVzY3JpYmVkCisg KiBpbiBHUCBURUUgQ2xpZW50IEFQSSBTcGVjaWZpY2F0aW9uLgorICovCisjZGVmaW5lIFRFRUNf RVJST1JfQkFEX1BBUkFNRVRFUlMgMHhGRkZGMDAwNgorCiAvKiBDbGllbnQgSUQgMCBpcyByZXNl cnZlZCBmb3IgdGhlIGh5cGVydmlzb3IgaXRzZWxmICovCiAjZGVmaW5lIE9QVEVFX0NMSUVOVF9J RChkb21haW4pICgoZG9tYWluKS0+ZG9tYWluX2lkICsgMSkKIApAQCAtNDMsOCArNjEsMzEgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX1NNQ19TRUNfQ0FQX1VOUkVHSVNU RVJFRF9TSE0gfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRFRV9TTUNfU0VD X0NBUF9EWU5BTUlDX1NITSkKIAorc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG1h eF9vcHRlZV90aHJlYWRzOworCisvKgorICogQ2FsbCBjb250ZXh0LiBPUC1URUUgY2FuIGlzc3Vl IG11bHRpcGxlIFJQQyByZXR1cm5zIGR1cmluZyBvbmUgY2FsbC4KKyAqIFdlIG5lZWQgdG8gcHJl c2VydmUgY29udGV4dCBkdXJpbmcgdGhlbS4KKyAqLworc3RydWN0IG9wdGVlX3N0ZF9jYWxsIHsK KyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgLyogUGFnZSB3aGVyZSBzaGFkb3dlZCBj b3B5IG9mIGNhbGwgYXJndW1lbnRzIGlzIHN0b3JlZCAqLworICAgIHN0cnVjdCBwYWdlX2luZm8g Knhlbl9hcmdfcGc7CisgICAgLyogQWJvdmUgcGFnZSBtYXBwZWQgaW50byBYRU4gKi8KKyAgICBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqeGVuX2FyZzsKKyAgICAvKiBBZGRyZXNzIG9mIG9yaWdpbmFs IGNhbGwgYXJndW1lbnRzICovCisgICAgcGFkZHJfdCBndWVzdF9hcmdfaXBhOworICAgIGludCBv cHRlZV90aHJlYWRfaWQ7CisgICAgaW50IHJwY19vcDsKKyAgICBib29sIGluX2ZsaWdodDsKKyAg ICByZWdpc3Rlcl90IHJwY19wYXJhbXNbMl07Cit9OworCiAvKiBEb21haW4gY29udGV4dCAqLwog c3RydWN0IG9wdGVlX2RvbWFpbiB7CisgICAgc3RydWN0IGxpc3RfaGVhZCBjYWxsX2xpc3Q7Cisg ICAgYXRvbWljX3QgY2FsbF9jb3VudDsKKyAgICBzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0 aWMgYm9vbCBvcHRlZV9wcm9iZSh2b2lkKQpAQCAtNjYsNiArMTA3LDIzIEBAIHN0YXRpYyBib29s IG9wdGVlX3Byb2JlKHZvaWQpCiAgICAgICAgICAodWludDMyX3QpcmVzcC5hMyAhPSBPUFRFRV9N U0dfVUlEXzMgKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvKiBSZWFkIG51bWJlciBv ZiB0aHJlYWRzICovCisgICAgYXJtX3NtY2NjX3NtYyhPUFRFRV9TTUNfR0VUX1RIUkVBRF9DT1VO VCwgJnJlc3ApOworICAgIGlmICggcmVzcC5hMCA9PSBPUFRFRV9TTUNfUkVUVVJOX09LICkKKyAg ICB7CisgICAgICAgIG1heF9vcHRlZV90aHJlYWRzID0gcmVzcC5hMTsKKyAgICAgICAgcHJpbnRr KFhFTkxPR19JTkZPCisgICAgICAgICAgICAgICAiT1AtVEVFIHN1cHBvcnRzICV1IHNpbXVsdGFu ZW91cyB0aHJlYWRzIHBlciBndWVzdC5cbiIsCisgICAgICAgICAgICAgICBtYXhfb3B0ZWVfdGhy ZWFkcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJS CisgICAgICAgICAgICAgICAiQ2FuJ3QgcmVhZCBudW1iZXIgb2YgdGhyZWFkcyBzdXBwb3J0ZWQg YnkgT1AtVEVFOiAleFxuIiwKKyAgICAgICAgICAgICAgICh1aW50MzJfdClyZXNwLmEwKTsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05 OSwxOCArMTU3LDE2MyBAQCBzdGF0aWMgaW50IG9wdGVlX2RvbWFpbl9pbml0KHN0cnVjdCBkb21h aW4gKmQpCiAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgIH0KIAorICAgIElOSVRfTElTVF9I RUFEKCZjdHgtPmNhbGxfbGlzdCk7CisgICAgYXRvbWljX3NldCgmY3R4LT5jYWxsX2NvdW50LCAw KTsKKyAgICBzcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKKwogICAgIGQtPmFyY2gudGVlID0g Y3R4OwogCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCByZWdwYWlyX3RvX3Vp bnQ2NChyZWdpc3Rlcl90IHJlZzAsIHJlZ2lzdGVyX3QgcmVnMSkKK3sKKyAgICByZXR1cm4gKCh1 aW50NjRfdClyZWcwIDw8IDMyKSB8ICh1aW50MzJfdClyZWcxOworfQorCitzdGF0aWMgdm9pZCB1 aW50NjRfdG9fcmVncGFpcihyZWdpc3Rlcl90ICpyZWcwLCByZWdpc3Rlcl90ICpyZWcxLCB1aW50 NjRfdCB2YWwpCit7CisgICAgKnJlZzAgPSB2YWwgPj4gMzI7CisgICAgKnJlZzEgPSAodWludDMy X3QpdmFsOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqZ2V0X2RvbWFpbl9yYW1fcGFn ZShnZm5fdCBnZm4pCit7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBwMm1fdHlw ZV90IHQ7CisKKyAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBn Zm5feChnZm4pLCAmdCwgUDJNX0FMTE9DKTsKKyAgICBpZiAoICFwYWdlIHx8IHQgIT0gcDJtX3Jh bV9ydyApCisgICAgeworICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHBhZ2U7 Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmFsbG9jYXRlX3N0ZF9jYWxsKHN0 cnVjdCBvcHRlZV9kb21haW4gKmN0eCkKK3sKKyAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNh bGw7CisgICAgaW50IGNvdW50OworCisgICAgLyogTWFrZSBzdXJlIHRoYXQgZ3Vlc3QgZG9lcyBu b3QgZXhlY3V0ZSBtb3JlIHRoYW4gbWF4X29wdGVlX3RocmVhZHMgKi8KKyAgICBjb3VudCA9IGF0 b21pY19hZGRfdW5sZXNzKCZjdHgtPmNhbGxfY291bnQsIDEsIG1heF9vcHRlZV90aHJlYWRzKTsK KyAgICBpZiAoIGNvdW50ID09IG1heF9vcHRlZV90aHJlYWRzICkKKyAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT1NQQyk7CisKKyAgICBjYWxsID0geHphbGxvYyhzdHJ1Y3Qgb3B0ZWVfc3RkX2Nh bGwpOworICAgIGlmICggIWNhbGwgKQorICAgIHsKKyAgICAgICAgYXRvbWljX2RlYygmY3R4LT5j YWxsX2NvdW50KTsKKyAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisgICAgfQorCisg ICAgY2FsbC0+b3B0ZWVfdGhyZWFkX2lkID0gLTE7CisgICAgY2FsbC0+aW5fZmxpZ2h0ID0gdHJ1 ZTsKKworICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2FkZF90YWlsKCZjYWxs LT5saXN0LCAmY3R4LT5jYWxsX2xpc3QpOworICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwor CisgICAgcmV0dXJuIGNhbGw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3RkX2NhbGwoc3RydWN0 IG9wdGVlX2RvbWFpbiAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0 ZWVfc3RkX2NhbGwgKmNhbGwpCit7CisgICAgYXRvbWljX2RlYygmY3R4LT5jYWxsX2NvdW50KTsK KworICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2RlbCgmY2FsbC0+bGlzdCk7 CisgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisKKyAgICBBU1NFUlQoIWNhbGwtPmluX2Zs aWdodCk7CisgICAgQVNTRVJUKCFjYWxsLT54ZW5fYXJnKTsKKworICAgIGlmICggY2FsbC0+eGVu X2FyZ19wZyApCisgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKGNhbGwtPnhlbl9hcmdfcGcpOwor CisgICAgeGZyZWUoY2FsbCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcF94ZW5fYXJnKHN0cnVjdCBv cHRlZV9zdGRfY2FsbCAqY2FsbCkKK3sKKyAgICBBU1NFUlQoIWNhbGwtPnhlbl9hcmcpOworCisg ICAgY2FsbC0+eGVuX2FyZyA9IF9fbWFwX2RvbWFpbl9wYWdlKGNhbGwtPnhlbl9hcmdfcGcpOwor fQorCitzdGF0aWMgdm9pZCB1bm1hcF94ZW5fYXJnKHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2Fs bCkKK3sKKyAgICBpZiAoICFjYWxsLT54ZW5fYXJnICkKKyAgICAgICAgcmV0dXJuOworCisgICAg dW5tYXBfZG9tYWluX3BhZ2UoY2FsbC0+eGVuX2FyZyk7CisgICAgY2FsbC0+eGVuX2FyZyA9IE5V TEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmdldF9zdGRfY2FsbChzdHJ1 Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHRocmVhZF9pZCkKK3sKKyAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNh bGw7CisKKyAgICBzcGluX2xvY2soJmN0eC0+bG9jayk7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRy eSggY2FsbCwgJmN0eC0+Y2FsbF9saXN0LCBsaXN0ICkKKyAgICB7CisgICAgICAgIGlmICggY2Fs bC0+b3B0ZWVfdGhyZWFkX2lkID09IHRocmVhZF9pZCApCisgICAgICAgIHsKKyAgICAgICAgICAg IGlmICggY2FsbC0+aW5fZmxpZ2h0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiR3Vlc3Qg dHJpZXMgdG8gZXhlY3V0ZSBjYWxsIHdoaWNoIGlzIGFscmVhZHkgaW4gZmxpZ2h0LlxuIik7Cisg ICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxs LT5pbl9mbGlnaHQgPSB0cnVlOworICAgICAgICAgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7 CisgICAgICAgICAgICBtYXBfeGVuX2FyZyhjYWxsKTsKKworICAgICAgICAgICAgcmV0dXJuIGNh bGw7CisgICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2Nr KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwdXRfc3RkX2NhbGwoc3Ry dWN0IG9wdGVlX2RvbWFpbiAqY3R4LCBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNhbGwpCit7Cisg ICAgQVNTRVJUKGNhbGwtPmluX2ZsaWdodCk7CisgICAgdW5tYXBfeGVuX2FyZyhjYWxsKTsKKyAg ICBzcGluX2xvY2soJmN0eC0+bG9jayk7CisgICAgY2FsbC0+aW5fZmxpZ2h0ID0gZmFsc2U7Cisg ICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgb3B0ZWVfcmVsaW5x dWlzaF9yZXNvdXJjZXMoc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2Nj X3JlcyByZXNwOworICAgIHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2FsbCwgKmNhbGxfdG1wOwor ICAgIHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCA9IGQtPmFyY2gudGVlOwogCi0gICAgaWYgKCAh ZC0+YXJjaC50ZWUgKQorICAgIGlmICggIWN0eCApCiAgICAgICAgIHJldHVybiAwOwogCisgICAg LyoKKyAgICAgKiBXZSBuZWVkIHRvIGZyZWUgdXAgdG8gbWF4X29wdGVlX3RocmVhZHMgY2FsbHMu IFVzdWFsbHksIHRoaXMgaXMKKyAgICAgKiBubyBtb3JlIHRoYW4gOC0xNiBjYWxscy4gQnV0IGl0 IGRlcGVuZHMgb24gT1AtVEVFIGNvbmZpZ3VyYXRpb24KKyAgICAgKiAoQ0ZHX05VTV9USFJFQURT IG9wdGlvbikuCisgICAgICovCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBjYWxsLCBj YWxsX3RtcCwgJmN0eC0+Y2FsbF9saXN0LCBsaXN0ICkKKyAgICAgICAgZnJlZV9zdGRfY2FsbChj dHgsIGNhbGwpOworCisgICAgaWYgKCBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAgICAg ICAgcmV0dXJuIC1FUkVTVEFSVDsKKwogICAgIC8qCiAgICAgICogSW5mb3JtIE9QLVRFRSB0aGF0 IGRvbWFpbiBpcyBzaHV0dGluZyBkb3duLiBUaGlzIGlzCiAgICAgICogYWxzbyBhIGZhc3QgU01D IGNhbGwsIGxpa2UgT1BURUVfU01DX1ZNX0NSRUFURUQsIHNvCkBAIC0xMjMsMTEgKzMyNiwzMDgg QEAgc3RhdGljIGludCBvcHRlZV9yZWxpbnF1aXNoX3Jlc291cmNlcyhzdHJ1Y3QgZG9tYWluICpk KQogICAgIGFybV9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0RFU1RST1lFRCwgT1BURUVfQ0xJRU5U X0lEKGQpLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgJnJlc3ApOwogCisg ICAgQVNTRVJUKCFzcGluX2lzX2xvY2tlZCgmY3R4LT5sb2NrKSk7CisgICAgQVNTRVJUKCFhdG9t aWNfcmVhZCgmY3R4LT5jYWxsX2NvdW50KSk7CisKICAgICBYRlJFRShkLT5hcmNoLnRlZSk7CiAK ICAgICByZXR1cm4gMDsKIH0KIAorLyoKKyAqIENvcHkgY29tbWFuZCBidWZmZXIgaW50byBkb21o ZWFwIG1lbW9yeSB0bzoKKyAqIDEpIEhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzZXMgZnJvbSBndWVz dAorICogMikgTWFrZSBzdXJlIHRoYXQgZ3Vlc3Qgd291bGRuJ3QgY2hhbmdlIGRhdGEgaW4gY29t bWFuZCBidWZmZXIgZHVyaW5nIGNhbGwKKyAqLworc3RhdGljIGJvb2wgY29weV9zdGRfcmVxdWVz dChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQoreworICAgIGNhbGwtPmd1ZXN0X2FyZ19p cGEgPSByZWdwYWlyX3RvX3VpbnQ2NChnZXRfdXNlcl9yZWcocmVncywgMSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCAyKSk7 CisKKyAgICAvKgorICAgICAqIENvbW1hbmQgYnVmZmVyIHNob3VsZCBzdGFydCBhdCBwYWdlIGJv dW5kYXJ5LgorICAgICAqIFRoaXMgaXMgT1AtVEVFIEFCSSByZXF1aXJlbWVudC4KKyAgICAgKi8K KyAgICBpZiAoIGNhbGwtPmd1ZXN0X2FyZ19pcGEgJiAoT1BURUVfTVNHX05PTkNPTlRJR19QQUdF X1NJWkUgLSAxKSApCisgICAgeworICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVf U01DX1JFVFVSTl9FQkFEQUREUik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg ICBCVUlMRF9CVUdfT04oT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgPiBQQUdFX1NJWkUp OworCisgICAgY2FsbC0+eGVuX2FyZ19wZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShjdXJyZW50LT5k b21haW4sIDApOworICAgIGlmICggIWNhbGwtPnhlbl9hcmdfcGcgKQorICAgIHsKKyAgICAgICAg c2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRU5PTUVNKTsKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1hcF94ZW5fYXJnKGNhbGwpOworCisgICAgaWYg KCBhY2Nlc3NfZ3Vlc3RfbWVtb3J5X2J5X2lwYShjdXJyZW50LT5kb21haW4sIGNhbGwtPmd1ZXN0 X2FyZ19pcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLT54ZW5f YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BURUVfTVNHX05PTkNP TlRJR19QQUdFX1NJWkUsIGZhbHNlKSApCisgICAgeworICAgICAgICBzZXRfdXNlcl9yZWcocmVn cywgMCwgT1BURUVfU01DX1JFVFVSTl9FQkFEQUREUik7CisgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENvcHkgcmVzdWx0IG9mIGNv bXBsZXRlZCByZXF1ZXN0IGJhY2sgdG8gZ3Vlc3QncyBidWZmZXIuCisgKiBXZSBhcmUgY29weWlu ZyBvbmx5IHZhbHVlcyB0aGF0IHN1YmplY3RlZCB0byBjaGFuZ2UgdG8gbWluaW1pemUKKyAqIHBv c3NpYmxlIGluZm9ybWF0aW9uIGxlYWsuCisgKgorICogQmVjYXVzZSB0aGVyZSBjYW4gYmUgbXVs dGlwbGUgUlBDcyBkdXJpbmcgc3RhbmRhcmQgY2FsbCwgYW5kIGd1ZXN0CisgKiBpcyBub3Qgb2Js aWdhdGVkIHRvIHJldHVybiBmcm9tIFJQQyBpbW1lZGlhdGVseSwgdGhlcmUgY2FuIGJlCisgKiBh cmJpdHJhcnkgdGltZSBzcGFuIGJldHdlZW4gY2FsbGluZyBjb3B5X3N0ZF9yZXF1ZXN0KCkgYW5k CisgKiBjb3B5X3N0ZF9yZXF1ZXN0KCkuIFNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgZ3Vlc3QncyBj b21tYW5kIGJ1ZmZlcgorICogYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfc3RkX3JlcXVl c3RfYmFjayhzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQoreworICAgIHN0 cnVjdCBvcHRlZV9tc2dfYXJnICpndWVzdF9hcmc7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1aW50MzJfdCBhdHRyOworCisgICAgcGFnZSA9 IGdldF9kb21haW5fcmFtX3BhZ2UoZ2FkZHJfdG9fZ2ZuKGNhbGwtPmd1ZXN0X2FyZ19pcGEpKTsK KyAgICBpZiAoICFwYWdlICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEd1ZXN0IGRp ZCBzb21ldGhpbmcgdG8gb3duIGNvbW1hbmQgYnVmZmVyIGR1cmluZyB0aGUgY2FsbC4KKyAgICAg ICAgICogTm93IHdlIGV2ZW4gY2FuJ3Qgd3JpdGUgZXJyb3IgY29kZSB0byB0aGUgY29tbWFuZAor ICAgICAgICAgKiBidWZmZXIuIExldCdzIHRyeSB0byByZXR1cm4gZ2VuZXJpYyBlcnJvciB2aWEK KyAgICAgICAgICogcmVnaXN0ZXIuIFByb2JsZW0gaXMgdGhhdCBPUC1URUUgZG9lcyBub3Qga25v dyB0aGF0IGd1ZXN0CisgICAgICAgICAqIGRpZG4ndCByZWNlaXZlZCB2YWxpZCByZXNwb25zZS4g QnV0IGF0IGxlYXN0IGd1ZXN0IHdpbGwKKyAgICAgICAgICoga25vdyB0aGF0IHNvbWV0aGluZyBi YWQgaGFwcGVuZWQuCisgICAgICAgICAqLworICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwg T1BURUVfU01DX1JFVFVSTl9FQkFEQUREUik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIGd1ZXN0X2FyZyA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOworCisgICAgZ3Vlc3RfYXJn LT5yZXQgPSBjYWxsLT54ZW5fYXJnLT5yZXQ7CisgICAgZ3Vlc3RfYXJnLT5yZXRfb3JpZ2luID0g Y2FsbC0+eGVuX2FyZy0+cmV0X29yaWdpbjsKKyAgICBndWVzdF9hcmctPnNlc3Npb24gPSBjYWxs LT54ZW5fYXJnLT5zZXNzaW9uOworCisgICAgZm9yICggaSA9IDA7IGkgPCBjYWxsLT54ZW5fYXJn LT5udW1fcGFyYW1zOyBpKysgKQorICAgIHsKKyAgICAgICAgYXR0ciA9IGNhbGwtPnhlbl9hcmct PnBhcmFtc1tpXS5hdHRyOworCisgICAgICAgIHN3aXRjaCAoIGF0dHIgJiBPUFRFRV9NU0dfQVRU Ul9UWVBFX01BU0sgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQ RV9UTUVNX09VVFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5P VVQ6CisgICAgICAgICAgICBndWVzdF9hcmctPnBhcmFtc1tpXS51LnRtZW0uc2l6ZSA9CisgICAg ICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUudG1lbS5zaXplOworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX09V VFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5PVVQ6CisgICAg ICAgICAgICBndWVzdF9hcmctPnBhcmFtc1tpXS51LnJtZW0uc2l6ZSA9CisgICAgICAgICAgICAg ICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUucm1lbS5zaXplOworICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9PVVRQVVQ6Cisg ICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTk9VVDoKKyAgICAgICAgICAg IGd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYSA9CisgICAgICAgICAgICAgICAgY2FsbC0+ eGVuX2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYTsKKyAgICAgICAgICAgIGd1ZXN0X2FyZy0+cGFy YW1zW2ldLnUudmFsdWUuYiA9CisgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1z W2ldLnUudmFsdWUuYjsKKyAgICAgICAgICAgIGd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUudmFsdWUu YyA9CisgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYzsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVf Tk9ORToKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5QVVQ6CisgICAg ICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUOgorICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShndWVzdF9h cmcpOworICAgIHB1dF9wYWdlKHBhZ2UpOworfQorCisvKiBIYW5kbGUgUlBDIHJldHVybiBmcm9t IE9QLVRFRSAqLworc3RhdGljIHZvaWQgaGFuZGxlX3JwY19yZXR1cm4oc3RydWN0IGFybV9zbWNj Y19yZXMgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVl X3N0ZF9jYWxsICpjYWxsKQoreworICAgIGNhbGwtPnJwY19vcCA9IE9QVEVFX1NNQ19SRVRVUk5f R0VUX1JQQ19GVU5DKHJlcy0+YTApOworICAgIGNhbGwtPnJwY19wYXJhbXNbMF0gPSByZXMtPmEx OworICAgIGNhbGwtPnJwY19wYXJhbXNbMV0gPSByZXMtPmEyOworICAgIGNhbGwtPm9wdGVlX3Ro cmVhZF9pZCA9IHJlcy0+YTM7CisKKyAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgcmVzLT5hMCk7 CisgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDEsIHJlcy0+YTEpOworICAgIHNldF91c2VyX3JlZyhy ZWdzLCAyLCByZXMtPmEyKTsKKyAgICBzZXRfdXNlcl9yZWcocmVncywgMywgcmVzLT5hMyk7Cit9 CisKKy8qCisgKiAoUmUpc3RhcnQgc3RhbmRhcmQgY2FsbC4gVGhpcyBmdW5jdGlvbiB3aWxsIGJl IGNhbGxlZCBpbiB0d28gY2FzZXM6CisgKiAxLiBHdWVzdCBpbml0aWF0ZXMgbmV3IHN0YW5kYXJk IGNhbGwKKyAqIDIuIEd1ZXN0IGZpbmlzaGVkIFJQQyBoYW5kbGluZyBhbmQgYXNrcyBPUC1URUUg dG8gcmVzdW1lIHRoZSBjYWxsCisgKgorICogSW4gYW55IGNhc2UgT1AtVEVFIGNhbiBlaXRoZXIg Y29tcGxldGUgY2FsbCBvciBpc3N1ZSBhbm90aGVyIFJQQy4KKyAqIElmIHRoaXMgaXMgUlBDIC0g d2UgbmVlZCB0byBzdG9yZSBjYWxsIGNvbnRleHQgYW5kIHJldHVybiBiYWNrIHRvIGd1ZXN0Lgor ICogSWYgY2FsbCBpcyBjb21wbGV0ZSAtIHdlIG5lZWQgdG8gcmV0dXJuIHJlc3VsdHMgd2l0aCBj b3B5X3N0ZF9yZXF1ZXN0X2JhY2soKQorICogYW5kIHRoZW4gd2Ugd2lsbCBkZXN0cm95IHRoZSBj YWxsIGNvbnRleHQgYXMgaXQgaXMgbm90IG5lZWRlZCBhbnltb3JlLgorICovCitzdGF0aWMgdm9p ZCBkb19jYWxsX3dpdGhfYXJnKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCBhMCwgcmVnaXN0ZXJfdCBhMSwgcmVnaXN0 ZXJfdCBhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCBhMywgcmVn aXN0ZXJfdCBhNCwgcmVnaXN0ZXJfdCBhNSkKK3sKKyAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyBy ZXM7CisKKyAgICBhcm1fc21jY2Nfc21jKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIDAsIE9QVEVF X0NMSUVOVF9JRChjdXJyZW50LT5kb21haW4pLAorICAgICAgICAgICAgICAgICAgJnJlcyk7CisK KyAgICBpZiAoIE9QVEVFX1NNQ19SRVRVUk5fSVNfUlBDKHJlcy5hMCkgKQorICAgIHsKKyAgICAg ICAgaGFuZGxlX3JwY19yZXR1cm4oJnJlcywgcmVncywgY2FsbCk7CisgICAgICAgIHB1dF9zdGRf Y2FsbChjdHgsIGNhbGwpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5X3N0 ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdzLCBjYWxsKTsKKyAgICBzZXRfdXNlcl9yZWcocmVncywg MCwgcmVzLmEwKTsKKworICAgIHB1dF9zdGRfY2FsbChjdHgsIGNhbGwpOworICAgIGZyZWVfc3Rk X2NhbGwoY3R4LCBjYWxsKTsKK30KKworLyoKKyAqIFN0YW5kYXJkIGNhbGwgaGFuZGxpbmcuIFRo aXMgaXMgdGhlIG1haW4gdHlwZSBvZiB0aGUgY2FsbCB3aGljaAorICogbWFrZXMgT1AtVEVFIHVz ZWZ1bC4gTW9zdCBvZiB0aGUgb3RoZXIgY2FsbHMgdHlwZSBhcmUgdXRpbGl0eQorICogY2FsbHMs IHdoaWxlIHN0YW5kYXJkIGNhbGxzIGFyZSBuZWVkZWQgdG8gaW50ZXJhY3Qgd2l0aCBUcnVzdGVk CisgKiBBcHBsaWNhdGlvbnMgd2hpY2ggYXJlIHJ1bm5pbmcgaW5zaWRlIHRoZSBPUC1URUUuCisg KgorICogQWxsIGFyZ3VtZW50cyBmb3IgdGhpcyB0eXBlIG9mIGNhbGwgYXJlIHBhc3NlZCBpbiB0 aGUgY29tbWFuZAorICogYnVmZmVyIGluIHRoZSBndWVzdCBtZW1vcnkuIFdlIHdpbGwgY29weSB0 aGlzIGJ1ZmZlciBpbnRvCisgKiBvd24gc2hhZG93IGJ1ZmZlciBhbmQgcHJvdmlkZSB0aGUgY29w eSB0byBPUC1URUUuCisgKgorICogVGhpcyBjYWxsIGlzIHByZWVtcHRpYmxlLiBPUC1URUUgd2ls bCByZXR1cm4gZnJvbSB0aGUgY2FsbCBpZiB0aGVyZQorICogaXMgYW4gaW50ZXJydXB0IHJlcXVl c3QgcGVuZGluZy4gQWxzbywgT1AtVEVFIHdpbGwgaW50ZXJydXB0IHRoZQorICogY2FsbCBpZiBp dCBuZWVkcyBzb21lIHNlcnZpY2UgZnJvbSBndWVzdC4gSW4gYm90aCBjYXNlcyBpdCB3aWxsCisg KiBpc3N1ZSBSUEMsIHdoaWNoIGlzIHByb2Nlc3NlZCBieSBoYW5kbGVfcnBjX3JldHVybigpIGZ1 bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2NhbGwoc3RydWN0IG9wdGVlX2Rv bWFpbiAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQoreworICAgIHJlZ2lzdGVyX3QgYTEsIGEyOworICAgIHBhZGRyX3QgeGVuX2Fk ZHI7CisgICAgc2l6ZV90IGFyZ19zaXplOworICAgIHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2Fs bCA9IGFsbG9jYXRlX3N0ZF9jYWxsKGN0eCk7CisKKyAgICBpZiAoIElTX0VSUihjYWxsKSApCisg ICAgeworICAgICAgICBpZiAoIFBUUl9FUlIoY2FsbCkgPT0gLUVOT01FTSApCisgICAgICAgICAg ICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVfU01DX1JFVFVSTl9FTk9NRU0pOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVfU01DX1JFVFVS Tl9FVEhSRUFEX0xJTUlUKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCAh Y29weV9zdGRfcmVxdWVzdChyZWdzLCBjYWxsKSApCisgICAgICAgIGdvdG8gZXJyOworCisgICAg YXJnX3NpemUgPSBPUFRFRV9NU0dfR0VUX0FSR19TSVpFKGNhbGwtPnhlbl9hcmctPm51bV9wYXJh bXMpOworICAgIGlmICggYXJnX3NpemUgPiBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAp CisgICAgeworICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJB TUVURVJTOworICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXRfb3JpZ2luID0gVEVFQ19PUklHSU5f Q09NTVM7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGNvcHlfc3RkX3JlcXVlc3RfYmFjaygp IHdpbGwgc3RheSB3aXRoaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICBjYWxsLT54ZW5fYXJnLT5u dW1fcGFyYW1zID0gMDsKKworICAgICAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdz LCBjYWxsKTsKKworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCBjYWxs LT54ZW5fYXJnLT5jbWQgKQorICAgIHsKKyAgICBjYXNlIE9QVEVFX01TR19DTURfT1BFTl9TRVNT SU9OOgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9DTE9TRV9TRVNTSU9OOgorICAgIGNhc2UgT1BU RUVfTVNHX0NNRF9JTlZPS0VfQ09NTUFORDoKKyAgICBjYXNlIE9QVEVFX01TR19DTURfQ0FOQ0VM OgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE06CisgICAgY2FzZSBPUFRFRV9N U0dfQ01EX1VOUkVHSVNURVJfU0hNOgorICAgICAgICB4ZW5fYWRkciA9IHBhZ2VfdG9fbWFkZHIo Y2FsbC0+eGVuX2FyZ19wZyk7CisgICAgICAgIHVpbnQ2NF90b19yZWdwYWlyKCZhMSwgJmEyLCB4 ZW5fYWRkcik7CisKKyAgICAgICAgZG9fY2FsbF93aXRoX2FyZyhjdHgsIGNhbGwsIHJlZ3MsIE9Q VEVFX1NNQ19DQUxMX1dJVEhfQVJHLCBhMSwgYTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg T1BURUVfU01DX1NITV9DQUNIRUQsIDAsIDApOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVs dDoKKyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRUJBRENN RCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXJyOgorICAgIHB1dF9zdGRfY2FsbChjdHgs IGNhbGwpOworICAgIGZyZWVfc3RkX2NhbGwoY3R4LCBjYWxsKTsKKworICAgIHJldHVybjsKK30K KworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZ3Vlc3QgaXMgZmluaXNoZWQg cHJvY2Vzc2luZyBSUEMKKyAqIHJlcXVlc3QgZnJvbSBPUC1URUUgYW5kIHdpc2hlZCB0byByZXN1 bWUgdGhlIGludGVycnVwdGVkIHN0YW5kYXJkCisgKiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBo YW5kbGVfcnBjKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCit7CisgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsOworICAgIGludCBvcHRl ZV90aHJlYWRfaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMyk7CisKKyAgICBjYWxsID0gZ2V0X3N0 ZF9jYWxsKGN0eCwgb3B0ZWVfdGhyZWFkX2lkKTsKKworICAgIGlmICggIWNhbGwgKQorICAgIHsK KyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRVJFU1VNRSk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoaXMgaXMgdG8gcHJl dmVudCByYWNlIGJldHdlZW4gbmV3IGNhbGwgd2l0aCB0aGUgc2FtZSB0aHJlYWQgaWQuCisgICAg ICogT1AtVEVFIGNhbiByZXVzZSB0aHJlYWQgaWQgcmlnaHQgYWZ0ZXIgaXQgZmluaXNoZWQgaGFu ZGxpbmcgdGhlIGNhbGwsCisgICAgICogYmVmb3JlIFhFTiBoYWQgY2hhbmNlIHRvIGZyZWUgb2xk IGNhbGwgY29udGV4dC4KKyAgICAgKi8KKyAgICBjYWxsLT5vcHRlZV90aHJlYWRfaWQgPSAtMTsK KworICAgIHN3aXRjaCAoIGNhbGwtPnJwY19vcCApCisgICAgeworICAgIGNhc2UgT1BURUVfU01D X1JQQ19GVU5DX0FMTE9DOgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRlJFRToKKyAgICAgICAgLyog VE9ETzogQWRkIGhhbmRsaW5nICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BURUVfU01D X1JQQ19GVU5DX0ZPUkVJR05fSU5UUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRFRV9T TUNfUlBDX0ZVTkNfQ01EOgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgZG9fY2FsbF93aXRoX2FyZyhjdHgsIGNhbGwsIHJlZ3Ms IE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQywKKyAgICAgICAgICAgICAgICAgICAgIGNh bGwtPnJwY19wYXJhbXNbMF0sIGNhbGwtPnJwY19wYXJhbXNbMV0sCisgICAgICAgICAgICAgICAg ICAgICBvcHRlZV90aHJlYWRfaWQsIDAsIDApOworICAgIHJldHVybjsKK30KKwogc3RhdGljIHZv aWQgaGFuZGxlX2V4Y2hhbmdlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOwpAQCAtMTY2LDggKzY2Niw5IEBA IHN0YXRpYyB2b2lkIGhhbmRsZV9leGNoYW5nZV9jYXBhYmlsaXRpZXMoc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MpCiBzdGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOworICAgIHN0 cnVjdCBvcHRlZV9kb21haW4gKmN0eCA9IGN1cnJlbnQtPmRvbWFpbi0+YXJjaC50ZWU7CiAKLSAg ICBpZiAoICFjdXJyZW50LT5kb21haW4tPmFyY2gudGVlICkKKyAgICBpZiAoICFjdHggKQogICAg ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKCBnZXRfdXNlcl9yZWcocmVncywgMCkg KQpAQCAtMjM0LDggKzczNSwxMSBAQCBzdGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNl IE9QVEVFX1NNQ19DQUxMX1dJVEhfQVJHOgorICAgICAgICBoYW5kbGVfc3RkX2NhbGwoY3R4LCBy ZWdzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBjYXNlIE9QVEVFX1NNQ19DQUxMX1JF VFVSTl9GUk9NX1JQQzoKLSAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19S RVRVUk5fRU5PVEFWQUlMKTsKKyAgICAgICAgaGFuZGxlX3JwYyhjdHgsIHJlZ3MpOwogICAgICAg ICByZXR1cm4gdHJ1ZTsKIAogICAgIGRlZmF1bHQ6Ci0tIAoyLjIxLjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw= 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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CC55C072B5 for ; Tue, 21 May 2019 21:26:20 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 437362173E for ; Tue, 21 May 2019 21:26:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=epam.com header.i=@epam.com header.b="oau1Qe3q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 437362173E Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=epam.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hTCGs-0008GN-VL; Tue, 21 May 2019 21:26:06 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hTCGs-0008G2-4Q for xen-devel@lists.xenproject.org; Tue, 21 May 2019 21:26:06 +0000 X-Inumbo-ID: 08d46e38-7c0f-11e9-8980-bc764e045a96 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown [2a01:111:f400:fe0d::621]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 08d46e38-7c0f-11e9-8980-bc764e045a96; Tue, 21 May 2019 21:26:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gqc6t0i7GeCIavZUrJIt9LGftKr3vbmrWvIv+JuuP2w=; b=oau1Qe3q/Cyppo2L47KG6wvdto49j2pDZ7JnPwWV99EafUgtiEwYMr5YF+uE8+YqocpMLeS4ZvQrtMZjTOL8vQYPafwgvrrGr/AbzQFso0BJm/g2kLYrpBC+2wfJuvf4lWwJ/NMBBhWE8kxfKwb2MtYqrZDVOCIJ5rq3XAkQ0MjBRhoELQtlmZ7wu8AiclTeZ0Y3IjX5P3sq2d/d4Z2W664383b3zRwVttnQaOYdn4V+SRMbb6hg3ZjNmLdZLxHOzML94ydW711aYmTp9c/sJxrrnXr/PIDe2y7ZOh4b4ywdrGGfIQNL1XMZsbgIR140cWaqf9bLN1g+J+9vm9oOBg== Received: from AM0PR03MB4148.eurprd03.prod.outlook.com (20.176.214.210) by AM0PR03MB5698.eurprd03.prod.outlook.com (20.179.254.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1900.16; Tue, 21 May 2019 21:26:00 +0000 Received: from AM0PR03MB4148.eurprd03.prod.outlook.com ([fe80::55c5:599a:1f80:208a]) by AM0PR03MB4148.eurprd03.prod.outlook.com ([fe80::55c5:599a:1f80:208a%3]) with mapi id 15.20.1900.020; Tue, 21 May 2019 21:26:00 +0000 From: Volodymyr Babchuk To: "xen-devel@lists.xenproject.org" Thread-Topic: [PATCH v5 05/10] xen/arm: optee: add std call handling Thread-Index: AQHVEBvJ7B/7jKnGkUO3Gv/qMXpcag== Date: Tue, 21 May 2019 21:26:00 +0000 Message-ID: <20190521212530.12706-6-volodymyr_babchuk@epam.com> References: <20190521212530.12706-1-volodymyr_babchuk@epam.com> In-Reply-To: <20190521212530.12706-1-volodymyr_babchuk@epam.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Volodymyr_Babchuk@epam.com; x-originating-ip: [85.223.209.22] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ef57e637-23d1-4568-c8e2-08d6de32ec07 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020); SRVR:AM0PR03MB5698; x-ms-traffictypediagnostic: AM0PR03MB5698: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 0044C17179 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(136003)(366004)(346002)(396003)(39860400002)(189003)(199004)(6512007)(6486002)(5640700003)(6436002)(68736007)(3846002)(2616005)(476003)(11346002)(6916009)(486006)(6116002)(76116006)(14444005)(256004)(64756008)(66476007)(478600001)(305945005)(66946007)(54906003)(316002)(7736002)(73956011)(71190400001)(72206003)(2501003)(66556008)(80792005)(71200400001)(66446008)(30864003)(53946003)(26005)(4326008)(14454004)(25786009)(102836004)(2906002)(55236004)(8936002)(81166006)(5660300002)(99286004)(66066001)(1076003)(36756003)(86362001)(53936002)(6506007)(81156014)(446003)(2351001)(186003)(8676002)(76176011)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR03MB5698; H:AM0PR03MB4148.eurprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: epam.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: SUKhrCJN3KYrKZFGlyDYhwdFaszg7L8BOrH26W3UdMRoTXEpY3/nBUd+cEVs9Tx6B2jbW+D6CdK9YZoIMy1Gke9CVwPyfgMYTXE0NXhhZE9lGXQOtt6T4ZQhWwvJ229kPFKycYNt2PjzLFTetsP9LgOSoaiCb1FBESQccOA7PSb9tZui5EgfmHxWUijlX9dFgIaI+UCyez/yP7080ZXFtfpuEiyc5UWy1FeQVo1VDz/FFMy3gRw+bZ8HwgBK4WrzTpD9ePoEHtqND+MyqBeeK2B4easg/SzHWspl5H7/cFF8bwBk7S9Cthm+lT5I9zMzM1fFYQJJWKZo0hL65oDj5K9IXk5AUaFAqr25CqjBhE4/i1VCDkpLO8P7I3BKwAs2n6iDD7661eDVg+R9JqmooOTlgIxF8LeURhLEAp7abuQ= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef57e637-23d1-4568-c8e2-08d6de32ec07 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 May 2019 21:26:00.8658 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR03MB5698 Subject: [Xen-devel] [PATCH v5 05/10] xen/arm: optee: add std call handling X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "tee-dev@lists.linaro.org" , Julien Grall , Stefano Stabellini , Volodymyr Babchuk Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Message-ID: <20190521212600.VWvfZiEuTGB9hymfttHaExa1bz0NuzdvFG8HqgY8OUQ@z> VGhlIG1haW4gd2F5IHRvIGNvbW11bmljYXRlIHdpdGggT1AtVEVFIGlzIHRvIGlzc3VlIHN0YW5k YXJkIFNNQ0NDCmNhbGwuICJTdGFuZGFyZCIgaXMgYSBTTUNDQyB0ZXJtIGFuZCBpdCBtZWFucyB0 aGF0IGNhbGwgY2FuIGJlCmludGVycnVwdGVkIGFuZCBPUC1URUUgY2FuIHJldHVybiBjb250cm9s IHRvIE5XIGJlZm9yZSBjb21wbGV0aW5nCnRoZSBjYWxsLgoKSW4gY29udHJhc3Qgd2l0aCBmYXN0 IGNhbGxzLCB3aGVyZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMKYXJlIHBhc3NlZCBpbiBy ZWdpc3RlcnMsIHN0YW5kYXJkIGNhbGxzIHVzZSBzaGFyZWQgbWVtb3J5LiBSZWdpc3RlcgpwYWly IGExLGEyIGhvbGRzIDY0LWJpdCBQQSBvZiBjb21tYW5kIGJ1ZmZlciwgd2hlcmUgYWxsIGFyZ3Vt ZW50cwphcmUgc3RvcmVkIGFuZCB3aGljaCBpcyB1c2VkIHRvIHJldHVybiBkYXRhLiBPUC1URUUg aW50ZXJuYWxseQpjb3BpZXMgY29udGVudHMgb2YgdGhpcyBidWZmZXIgaW50byBvd24gc2VjdXJl IG1lbW9yeSBiZWZvcmUgYWNjZXNzaW5nCmFuZCB2YWxpZGF0aW5nIGFueSBkYXRhIGluIGNvbW1h bmQgYnVmZmVyLiBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzdXJlCnRoYXQgTlcgd2lsbCBub3QgY2hh bmdlIGNvbnRlbnRzIG9mIHRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVycy4KCk1lZGlhdG9yIG5lZWRz IHRvIGRvIHRoZSBzYW1lIGZvciBudW1iZXIgb2YgcmVhc29uczoKCjEuIFRvIG1ha2Ugc3VyZSB0 aGF0IGd1ZXN0IHdpbGwgbm90IGNoYW5nZSBkYXRhIGFmdGVyIHZhbGlkYXRpb24uCjIuIFRvIHRy YW5zbGF0ZSBJUEFzIHRvIFBBcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgKHRoaXMgaXMgbm90IGRv bmUKICAgaW4gdGhpcyBwYXRjaCkuCjMuIFRvIGhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzIGZyb20g Z3Vlc3QsIHNvIGl0IHdpbGwgbm90IGJlIGFibGUKICAgdG8gZG8gSVBBLT5QQSB0cmFuc2xhdGlv biBieSBtaXN1c2luZyBtZWRpYXRvci4KCkR1cmluZyBzdGFuZGFyZCBjYWxsIE9QLVRFRSBjYW4g aXNzdWUgbXVsdGlwbGUgIlJQQyByZXR1cm5zIiwgYXNraW5nCk5XIHRvIGRvIHNvbWUgd29yayBm b3IgT1AtVEVFLiBOVyB0aGVuIGlzc3VlcyBzcGVjaWFsIGNhbGwKT1BURUVfU01DX0NBTExfUkVU VVJOX0ZST01fUlBDIHRvIHJlc3VtZSBoYW5kbGluZyBvZiB0aGUgb3JpZ2luYWwgY2FsbC4KVGh1 cywgbWVkaWF0b3IgbmVlZHMgdG8gbWFpbnRhaW4gY29udGV4dCBmb3Igb3JpZ2luYWwgc3RhbmRh cmQgY2FsbApkdXJpbmcgbXVsdGlwbGUgU01DQ0MgY2FsbHMuCgpTdGFuZGFyZCBjYWxsIGlzIGNv bnNpZGVyZWQgY29tcGxldGUsIHdoZW4gcmV0dXJuZWQgdmFsdWUgaXMKbm90IGEgUlBDIHJlcXVl c3QuCgpTaWduZWQtb2ZmLWJ5OiBWb2xvZHlteXIgQmFiY2h1ayA8dm9sb2R5bXlyX2JhYmNodWtA ZXBhbS5jb20+Ci0tLQoKIEFsbCB0aGUgcGF0Y2hlcyB0byBvcHRlZS5jIHNob3VsZCBiZSBtZXJn ZWQgdG9nZXRoZXIuIFRoZXkgd2VyZQogc3BsaXQgdG8gZWFzZSB1cCByZXZpZXcuIEJ1dCB0aGV5 IGRlcGVuZCBoZWF2aWx5IG9uIGVhY2ggb3RoZXIuCgogIENoYW5nZXMgZnJvbSB2NDoKICAtIENv ZGUgdXNlcyBhcm1fc21jY2Nfc21jKCkgZGlyZWN0bHksIGluc3RlYWQgb2YgZm9yd2FyZF9jYWxs KCkKICAtIGRvX2NhbGxfd2l0aF9hcmcoKSBmdW5jdGlvbiBub3cgYWNjZXB0cyByZWdpc3RlciB2 YWx1ZXMgYXMKICAgIHBhcmFtZXRlcnMsIHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgUlBDIGhhbmRs ZXJzIHdpdGggY29ycmVjdAogICAgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gUlBDIHR5cGUKICAtIG9w dGVlX3Byb2JlKCkgY2FsbHMgT1BURUVfU01DX0dFVF9USFJFQURfQ09VTlQuIFRoaXMgY2FsbAog ICAgaXMgbWVyZ2VkIGludG8gT1AtVEVFIG1haW5saW5lIGFuZCB3aWxsIGJlIHJlbGVhc2VkIHdp dGgKICAgIE9QLVRFRSB2My41LjAKICAtIFJlbW92ZWQgREVGX01BWF9PUFRFRV9USFJFQURTIGJl Y2F1c2UgaXQgaXMgZXhwZWN0ZWQgdGhhdAogICAgT1AtVEVFIHdvdWxkIHN1cHBvcnQgT1BURUVf U01DX0dFVF9USFJFQURfQ09VTlQKICAtIE1vdmVkIG1hcC91bm1hcF94ZW5fYXJnKCkgb3V0c2lk ZSB0aGUgc3BpbmxvY2tzCiAgLSBBZGRlZCBnZXRfZG9tYWluX3JhbV9wYWdlKCkgaGVscGVyIGZ1 bmN0aW9uCiAgLSBDaGVjayB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoYXQgYXJlIHN1cHBs aWVkIGJ5IGd1ZXN0CgogIENoYW5nZXMgZnJvbSB2MzoKICAtIEFkZGVkIGFiaWxpdHkgdG8gcmVh ZCBudW1iZXIgb2YgdGhyZWFkcyBmcm9tIE9QLVRFRSwgaWYgaXQKICBzdXBwb3J0cyB0aGlzIGZl YXR1cmUKICAtIFBhZ2VzIGFyZSBhbGxvY2F0ZWQgZnJvbSBkb21oZWFwLCBpbnN0ZWFkIG9mIHhl bmhlYXAKICAtIEFkZGVkIGNvbW1lbnRzIGZvciBjb21wbGV4IGNvZGUKCiAgQ2hhbmdlcyBmcm9t IHYyOgogIC0gcmVuYW1lZCBzdHJ1Y3QgZG9tYWluX2N0eCB0byBzdHJ1Y3Qgb3B0ZWVfZG9tYWlu CiAgLSBmaXhlZCBjb2Rpbmcgc3R5bGUKICAtIE5vdyBJIHVzZSBhY2Nlc3NfZ3Vlc3RfbWVtb3J5 X2J5X2lwYSgpIGluc3RlYWQgb2YgbWFwcGluZ3MKICAgIHRvIHJlYWQgY29tbWFuZCBidWZmZXIK ICAtIEFkZGVkIHRyYWNraW5nIGZvciBpbiBmbGlnaHQgY2FsbHMsIHNvIGd1ZXN0IGNhbid0IHJl c3VtZQogICAgdGhlIHNhbWUgY2FsbCBmcm9tIHR3byBDUFVzIHNpbXVsdGFuaW91c2x5Ci0tLQog eGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jIHwgNTEwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUwNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyBiL3hlbi9hcmNo L2FybS90ZWUvb3B0ZWUuYwppbmRleCA2YzUxY2FhNDFhLi5mMDkyNDkyODQ5IDEwMDY0NAotLS0g YS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKKysrIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5j CkBAIC0yNSw4ICsyNSwxMyBAQAogICovCiAKICNpbmNsdWRlIDx4ZW4vZGV2aWNlX3RyZWUuaD4K KyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KKyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5j bHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgogI2luY2x1ZGUg PHhlbi9zY2hlZC5oPgogCisjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3Nt Y2NjLmg+CiAjaW5jbHVkZSA8YXNtL3RlZS90ZWUuaD4KICNpbmNsdWRlIDxhc20vdGVlL29wdGVl X21zZy5oPgpAQCAtMzUsNiArNDAsMTkgQEAKIC8qIE51bWJlciBvZiBTTUNzIGtub3duIHRvIHRo ZSBtZWRpYXRvciAqLwogI2RlZmluZSBPUFRFRV9NRURJQVRPUl9TTUNfQ09VTlQgICAxMQogCisv KgorICogIlRoZSByZXR1cm4gY29kZSBpcyBhbiBlcnJvciB0aGF0IG9yaWdpbmF0ZWQgd2l0aGlu IHRoZSB1bmRlcmx5aW5nCisgKiBjb21tdW5pY2F0aW9ucyBzdGFjayBsaW5raW5nIHRoZSByaWNo IE9TIHdpdGggdGhlIFRFRSIgYXMgZGVzY3JpYmVkCisgKiBpbiBHUCBURUUgQ2xpZW50IEFQSSBT cGVjaWZpY2F0aW9uLgorICovCisjZGVmaW5lIFRFRUNfT1JJR0lOX0NPTU1TIDB4MDAwMDAwMDIK KworLyoKKyAqICJJbnB1dCBwYXJhbWV0ZXJzIHdlcmUgaW52YWxpZCIgYXMgZGVzY3JpYmVkCisg KiBpbiBHUCBURUUgQ2xpZW50IEFQSSBTcGVjaWZpY2F0aW9uLgorICovCisjZGVmaW5lIFRFRUNf RVJST1JfQkFEX1BBUkFNRVRFUlMgMHhGRkZGMDAwNgorCiAvKiBDbGllbnQgSUQgMCBpcyByZXNl cnZlZCBmb3IgdGhlIGh5cGVydmlzb3IgaXRzZWxmICovCiAjZGVmaW5lIE9QVEVFX0NMSUVOVF9J RChkb21haW4pICgoZG9tYWluKS0+ZG9tYWluX2lkICsgMSkKIApAQCAtNDMsOCArNjEsMzEgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX1NNQ19TRUNfQ0FQX1VOUkVHSVNU RVJFRF9TSE0gfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRFRV9TTUNfU0VD X0NBUF9EWU5BTUlDX1NITSkKIAorc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG1h eF9vcHRlZV90aHJlYWRzOworCisvKgorICogQ2FsbCBjb250ZXh0LiBPUC1URUUgY2FuIGlzc3Vl IG11bHRpcGxlIFJQQyByZXR1cm5zIGR1cmluZyBvbmUgY2FsbC4KKyAqIFdlIG5lZWQgdG8gcHJl c2VydmUgY29udGV4dCBkdXJpbmcgdGhlbS4KKyAqLworc3RydWN0IG9wdGVlX3N0ZF9jYWxsIHsK KyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgLyogUGFnZSB3aGVyZSBzaGFkb3dlZCBj b3B5IG9mIGNhbGwgYXJndW1lbnRzIGlzIHN0b3JlZCAqLworICAgIHN0cnVjdCBwYWdlX2luZm8g Knhlbl9hcmdfcGc7CisgICAgLyogQWJvdmUgcGFnZSBtYXBwZWQgaW50byBYRU4gKi8KKyAgICBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqeGVuX2FyZzsKKyAgICAvKiBBZGRyZXNzIG9mIG9yaWdpbmFs IGNhbGwgYXJndW1lbnRzICovCisgICAgcGFkZHJfdCBndWVzdF9hcmdfaXBhOworICAgIGludCBv cHRlZV90aHJlYWRfaWQ7CisgICAgaW50IHJwY19vcDsKKyAgICBib29sIGluX2ZsaWdodDsKKyAg ICByZWdpc3Rlcl90IHJwY19wYXJhbXNbMl07Cit9OworCiAvKiBEb21haW4gY29udGV4dCAqLwog c3RydWN0IG9wdGVlX2RvbWFpbiB7CisgICAgc3RydWN0IGxpc3RfaGVhZCBjYWxsX2xpc3Q7Cisg ICAgYXRvbWljX3QgY2FsbF9jb3VudDsKKyAgICBzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0 aWMgYm9vbCBvcHRlZV9wcm9iZSh2b2lkKQpAQCAtNjYsNiArMTA3LDIzIEBAIHN0YXRpYyBib29s IG9wdGVlX3Byb2JlKHZvaWQpCiAgICAgICAgICAodWludDMyX3QpcmVzcC5hMyAhPSBPUFRFRV9N U0dfVUlEXzMgKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvKiBSZWFkIG51bWJlciBv ZiB0aHJlYWRzICovCisgICAgYXJtX3NtY2NjX3NtYyhPUFRFRV9TTUNfR0VUX1RIUkVBRF9DT1VO VCwgJnJlc3ApOworICAgIGlmICggcmVzcC5hMCA9PSBPUFRFRV9TTUNfUkVUVVJOX09LICkKKyAg ICB7CisgICAgICAgIG1heF9vcHRlZV90aHJlYWRzID0gcmVzcC5hMTsKKyAgICAgICAgcHJpbnRr KFhFTkxPR19JTkZPCisgICAgICAgICAgICAgICAiT1AtVEVFIHN1cHBvcnRzICV1IHNpbXVsdGFu ZW91cyB0aHJlYWRzIHBlciBndWVzdC5cbiIsCisgICAgICAgICAgICAgICBtYXhfb3B0ZWVfdGhy ZWFkcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJS CisgICAgICAgICAgICAgICAiQ2FuJ3QgcmVhZCBudW1iZXIgb2YgdGhyZWFkcyBzdXBwb3J0ZWQg YnkgT1AtVEVFOiAleFxuIiwKKyAgICAgICAgICAgICAgICh1aW50MzJfdClyZXNwLmEwKTsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05 OSwxOCArMTU3LDE2MyBAQCBzdGF0aWMgaW50IG9wdGVlX2RvbWFpbl9pbml0KHN0cnVjdCBkb21h aW4gKmQpCiAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgIH0KIAorICAgIElOSVRfTElTVF9I RUFEKCZjdHgtPmNhbGxfbGlzdCk7CisgICAgYXRvbWljX3NldCgmY3R4LT5jYWxsX2NvdW50LCAw KTsKKyAgICBzcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKKwogICAgIGQtPmFyY2gudGVlID0g Y3R4OwogCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCByZWdwYWlyX3RvX3Vp bnQ2NChyZWdpc3Rlcl90IHJlZzAsIHJlZ2lzdGVyX3QgcmVnMSkKK3sKKyAgICByZXR1cm4gKCh1 aW50NjRfdClyZWcwIDw8IDMyKSB8ICh1aW50MzJfdClyZWcxOworfQorCitzdGF0aWMgdm9pZCB1 aW50NjRfdG9fcmVncGFpcihyZWdpc3Rlcl90ICpyZWcwLCByZWdpc3Rlcl90ICpyZWcxLCB1aW50 NjRfdCB2YWwpCit7CisgICAgKnJlZzAgPSB2YWwgPj4gMzI7CisgICAgKnJlZzEgPSAodWludDMy X3QpdmFsOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqZ2V0X2RvbWFpbl9yYW1fcGFn ZShnZm5fdCBnZm4pCit7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBwMm1fdHlw ZV90IHQ7CisKKyAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBn Zm5feChnZm4pLCAmdCwgUDJNX0FMTE9DKTsKKyAgICBpZiAoICFwYWdlIHx8IHQgIT0gcDJtX3Jh bV9ydyApCisgICAgeworICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHBhZ2U7 Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmFsbG9jYXRlX3N0ZF9jYWxsKHN0 cnVjdCBvcHRlZV9kb21haW4gKmN0eCkKK3sKKyAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNh bGw7CisgICAgaW50IGNvdW50OworCisgICAgLyogTWFrZSBzdXJlIHRoYXQgZ3Vlc3QgZG9lcyBu b3QgZXhlY3V0ZSBtb3JlIHRoYW4gbWF4X29wdGVlX3RocmVhZHMgKi8KKyAgICBjb3VudCA9IGF0 b21pY19hZGRfdW5sZXNzKCZjdHgtPmNhbGxfY291bnQsIDEsIG1heF9vcHRlZV90aHJlYWRzKTsK KyAgICBpZiAoIGNvdW50ID09IG1heF9vcHRlZV90aHJlYWRzICkKKyAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT1NQQyk7CisKKyAgICBjYWxsID0geHphbGxvYyhzdHJ1Y3Qgb3B0ZWVfc3RkX2Nh bGwpOworICAgIGlmICggIWNhbGwgKQorICAgIHsKKyAgICAgICAgYXRvbWljX2RlYygmY3R4LT5j YWxsX2NvdW50KTsKKyAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisgICAgfQorCisg ICAgY2FsbC0+b3B0ZWVfdGhyZWFkX2lkID0gLTE7CisgICAgY2FsbC0+aW5fZmxpZ2h0ID0gdHJ1 ZTsKKworICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2FkZF90YWlsKCZjYWxs LT5saXN0LCAmY3R4LT5jYWxsX2xpc3QpOworICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwor CisgICAgcmV0dXJuIGNhbGw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3RkX2NhbGwoc3RydWN0 IG9wdGVlX2RvbWFpbiAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0 ZWVfc3RkX2NhbGwgKmNhbGwpCit7CisgICAgYXRvbWljX2RlYygmY3R4LT5jYWxsX2NvdW50KTsK KworICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2RlbCgmY2FsbC0+bGlzdCk7 CisgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisKKyAgICBBU1NFUlQoIWNhbGwtPmluX2Zs aWdodCk7CisgICAgQVNTRVJUKCFjYWxsLT54ZW5fYXJnKTsKKworICAgIGlmICggY2FsbC0+eGVu X2FyZ19wZyApCisgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKGNhbGwtPnhlbl9hcmdfcGcpOwor CisgICAgeGZyZWUoY2FsbCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcF94ZW5fYXJnKHN0cnVjdCBv cHRlZV9zdGRfY2FsbCAqY2FsbCkKK3sKKyAgICBBU1NFUlQoIWNhbGwtPnhlbl9hcmcpOworCisg ICAgY2FsbC0+eGVuX2FyZyA9IF9fbWFwX2RvbWFpbl9wYWdlKGNhbGwtPnhlbl9hcmdfcGcpOwor fQorCitzdGF0aWMgdm9pZCB1bm1hcF94ZW5fYXJnKHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2Fs bCkKK3sKKyAgICBpZiAoICFjYWxsLT54ZW5fYXJnICkKKyAgICAgICAgcmV0dXJuOworCisgICAg dW5tYXBfZG9tYWluX3BhZ2UoY2FsbC0+eGVuX2FyZyk7CisgICAgY2FsbC0+eGVuX2FyZyA9IE5V TEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmdldF9zdGRfY2FsbChzdHJ1 Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHRocmVhZF9pZCkKK3sKKyAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNh bGw7CisKKyAgICBzcGluX2xvY2soJmN0eC0+bG9jayk7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRy eSggY2FsbCwgJmN0eC0+Y2FsbF9saXN0LCBsaXN0ICkKKyAgICB7CisgICAgICAgIGlmICggY2Fs bC0+b3B0ZWVfdGhyZWFkX2lkID09IHRocmVhZF9pZCApCisgICAgICAgIHsKKyAgICAgICAgICAg IGlmICggY2FsbC0+aW5fZmxpZ2h0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiR3Vlc3Qg dHJpZXMgdG8gZXhlY3V0ZSBjYWxsIHdoaWNoIGlzIGFscmVhZHkgaW4gZmxpZ2h0LlxuIik7Cisg ICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxs LT5pbl9mbGlnaHQgPSB0cnVlOworICAgICAgICAgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7 CisgICAgICAgICAgICBtYXBfeGVuX2FyZyhjYWxsKTsKKworICAgICAgICAgICAgcmV0dXJuIGNh bGw7CisgICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2Nr KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwdXRfc3RkX2NhbGwoc3Ry dWN0IG9wdGVlX2RvbWFpbiAqY3R4LCBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNhbGwpCit7Cisg ICAgQVNTRVJUKGNhbGwtPmluX2ZsaWdodCk7CisgICAgdW5tYXBfeGVuX2FyZyhjYWxsKTsKKyAg ICBzcGluX2xvY2soJmN0eC0+bG9jayk7CisgICAgY2FsbC0+aW5fZmxpZ2h0ID0gZmFsc2U7Cisg ICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgb3B0ZWVfcmVsaW5x dWlzaF9yZXNvdXJjZXMoc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2Nj X3JlcyByZXNwOworICAgIHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2FsbCwgKmNhbGxfdG1wOwor ICAgIHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCA9IGQtPmFyY2gudGVlOwogCi0gICAgaWYgKCAh ZC0+YXJjaC50ZWUgKQorICAgIGlmICggIWN0eCApCiAgICAgICAgIHJldHVybiAwOwogCisgICAg LyoKKyAgICAgKiBXZSBuZWVkIHRvIGZyZWUgdXAgdG8gbWF4X29wdGVlX3RocmVhZHMgY2FsbHMu IFVzdWFsbHksIHRoaXMgaXMKKyAgICAgKiBubyBtb3JlIHRoYW4gOC0xNiBjYWxscy4gQnV0IGl0 IGRlcGVuZHMgb24gT1AtVEVFIGNvbmZpZ3VyYXRpb24KKyAgICAgKiAoQ0ZHX05VTV9USFJFQURT IG9wdGlvbikuCisgICAgICovCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBjYWxsLCBj YWxsX3RtcCwgJmN0eC0+Y2FsbF9saXN0LCBsaXN0ICkKKyAgICAgICAgZnJlZV9zdGRfY2FsbChj dHgsIGNhbGwpOworCisgICAgaWYgKCBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAgICAg ICAgcmV0dXJuIC1FUkVTVEFSVDsKKwogICAgIC8qCiAgICAgICogSW5mb3JtIE9QLVRFRSB0aGF0 IGRvbWFpbiBpcyBzaHV0dGluZyBkb3duLiBUaGlzIGlzCiAgICAgICogYWxzbyBhIGZhc3QgU01D IGNhbGwsIGxpa2UgT1BURUVfU01DX1ZNX0NSRUFURUQsIHNvCkBAIC0xMjMsMTEgKzMyNiwzMDgg QEAgc3RhdGljIGludCBvcHRlZV9yZWxpbnF1aXNoX3Jlc291cmNlcyhzdHJ1Y3QgZG9tYWluICpk KQogICAgIGFybV9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0RFU1RST1lFRCwgT1BURUVfQ0xJRU5U X0lEKGQpLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgJnJlc3ApOwogCisg ICAgQVNTRVJUKCFzcGluX2lzX2xvY2tlZCgmY3R4LT5sb2NrKSk7CisgICAgQVNTRVJUKCFhdG9t aWNfcmVhZCgmY3R4LT5jYWxsX2NvdW50KSk7CisKICAgICBYRlJFRShkLT5hcmNoLnRlZSk7CiAK ICAgICByZXR1cm4gMDsKIH0KIAorLyoKKyAqIENvcHkgY29tbWFuZCBidWZmZXIgaW50byBkb21o ZWFwIG1lbW9yeSB0bzoKKyAqIDEpIEhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzZXMgZnJvbSBndWVz dAorICogMikgTWFrZSBzdXJlIHRoYXQgZ3Vlc3Qgd291bGRuJ3QgY2hhbmdlIGRhdGEgaW4gY29t bWFuZCBidWZmZXIgZHVyaW5nIGNhbGwKKyAqLworc3RhdGljIGJvb2wgY29weV9zdGRfcmVxdWVz dChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQoreworICAgIGNhbGwtPmd1ZXN0X2FyZ19p cGEgPSByZWdwYWlyX3RvX3VpbnQ2NChnZXRfdXNlcl9yZWcocmVncywgMSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCAyKSk7 CisKKyAgICAvKgorICAgICAqIENvbW1hbmQgYnVmZmVyIHNob3VsZCBzdGFydCBhdCBwYWdlIGJv dW5kYXJ5LgorICAgICAqIFRoaXMgaXMgT1AtVEVFIEFCSSByZXF1aXJlbWVudC4KKyAgICAgKi8K KyAgICBpZiAoIGNhbGwtPmd1ZXN0X2FyZ19pcGEgJiAoT1BURUVfTVNHX05PTkNPTlRJR19QQUdF X1NJWkUgLSAxKSApCisgICAgeworICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVf U01DX1JFVFVSTl9FQkFEQUREUik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg ICBCVUlMRF9CVUdfT04oT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgPiBQQUdFX1NJWkUp OworCisgICAgY2FsbC0+eGVuX2FyZ19wZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShjdXJyZW50LT5k b21haW4sIDApOworICAgIGlmICggIWNhbGwtPnhlbl9hcmdfcGcgKQorICAgIHsKKyAgICAgICAg c2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRU5PTUVNKTsKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1hcF94ZW5fYXJnKGNhbGwpOworCisgICAgaWYg KCBhY2Nlc3NfZ3Vlc3RfbWVtb3J5X2J5X2lwYShjdXJyZW50LT5kb21haW4sIGNhbGwtPmd1ZXN0 X2FyZ19pcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLT54ZW5f YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BURUVfTVNHX05PTkNP TlRJR19QQUdFX1NJWkUsIGZhbHNlKSApCisgICAgeworICAgICAgICBzZXRfdXNlcl9yZWcocmVn cywgMCwgT1BURUVfU01DX1JFVFVSTl9FQkFEQUREUik7CisgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENvcHkgcmVzdWx0IG9mIGNv bXBsZXRlZCByZXF1ZXN0IGJhY2sgdG8gZ3Vlc3QncyBidWZmZXIuCisgKiBXZSBhcmUgY29weWlu ZyBvbmx5IHZhbHVlcyB0aGF0IHN1YmplY3RlZCB0byBjaGFuZ2UgdG8gbWluaW1pemUKKyAqIHBv c3NpYmxlIGluZm9ybWF0aW9uIGxlYWsuCisgKgorICogQmVjYXVzZSB0aGVyZSBjYW4gYmUgbXVs dGlwbGUgUlBDcyBkdXJpbmcgc3RhbmRhcmQgY2FsbCwgYW5kIGd1ZXN0CisgKiBpcyBub3Qgb2Js aWdhdGVkIHRvIHJldHVybiBmcm9tIFJQQyBpbW1lZGlhdGVseSwgdGhlcmUgY2FuIGJlCisgKiBh cmJpdHJhcnkgdGltZSBzcGFuIGJldHdlZW4gY2FsbGluZyBjb3B5X3N0ZF9yZXF1ZXN0KCkgYW5k CisgKiBjb3B5X3N0ZF9yZXF1ZXN0KCkuIFNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgZ3Vlc3QncyBj b21tYW5kIGJ1ZmZlcgorICogYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfc3RkX3JlcXVl c3RfYmFjayhzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsKQoreworICAgIHN0 cnVjdCBvcHRlZV9tc2dfYXJnICpndWVzdF9hcmc7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1aW50MzJfdCBhdHRyOworCisgICAgcGFnZSA9 IGdldF9kb21haW5fcmFtX3BhZ2UoZ2FkZHJfdG9fZ2ZuKGNhbGwtPmd1ZXN0X2FyZ19pcGEpKTsK KyAgICBpZiAoICFwYWdlICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEd1ZXN0IGRp ZCBzb21ldGhpbmcgdG8gb3duIGNvbW1hbmQgYnVmZmVyIGR1cmluZyB0aGUgY2FsbC4KKyAgICAg ICAgICogTm93IHdlIGV2ZW4gY2FuJ3Qgd3JpdGUgZXJyb3IgY29kZSB0byB0aGUgY29tbWFuZAor ICAgICAgICAgKiBidWZmZXIuIExldCdzIHRyeSB0byByZXR1cm4gZ2VuZXJpYyBlcnJvciB2aWEK KyAgICAgICAgICogcmVnaXN0ZXIuIFByb2JsZW0gaXMgdGhhdCBPUC1URUUgZG9lcyBub3Qga25v dyB0aGF0IGd1ZXN0CisgICAgICAgICAqIGRpZG4ndCByZWNlaXZlZCB2YWxpZCByZXNwb25zZS4g QnV0IGF0IGxlYXN0IGd1ZXN0IHdpbGwKKyAgICAgICAgICoga25vdyB0aGF0IHNvbWV0aGluZyBi YWQgaGFwcGVuZWQuCisgICAgICAgICAqLworICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwg T1BURUVfU01DX1JFVFVSTl9FQkFEQUREUik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIGd1ZXN0X2FyZyA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOworCisgICAgZ3Vlc3RfYXJn LT5yZXQgPSBjYWxsLT54ZW5fYXJnLT5yZXQ7CisgICAgZ3Vlc3RfYXJnLT5yZXRfb3JpZ2luID0g Y2FsbC0+eGVuX2FyZy0+cmV0X29yaWdpbjsKKyAgICBndWVzdF9hcmctPnNlc3Npb24gPSBjYWxs LT54ZW5fYXJnLT5zZXNzaW9uOworCisgICAgZm9yICggaSA9IDA7IGkgPCBjYWxsLT54ZW5fYXJn LT5udW1fcGFyYW1zOyBpKysgKQorICAgIHsKKyAgICAgICAgYXR0ciA9IGNhbGwtPnhlbl9hcmct PnBhcmFtc1tpXS5hdHRyOworCisgICAgICAgIHN3aXRjaCAoIGF0dHIgJiBPUFRFRV9NU0dfQVRU Ul9UWVBFX01BU0sgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQ RV9UTUVNX09VVFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5P VVQ6CisgICAgICAgICAgICBndWVzdF9hcmctPnBhcmFtc1tpXS51LnRtZW0uc2l6ZSA9CisgICAg ICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUudG1lbS5zaXplOworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX09V VFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5PVVQ6CisgICAg ICAgICAgICBndWVzdF9hcmctPnBhcmFtc1tpXS51LnJtZW0uc2l6ZSA9CisgICAgICAgICAgICAg ICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUucm1lbS5zaXplOworICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9PVVRQVVQ6Cisg ICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTk9VVDoKKyAgICAgICAgICAg IGd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYSA9CisgICAgICAgICAgICAgICAgY2FsbC0+ eGVuX2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYTsKKyAgICAgICAgICAgIGd1ZXN0X2FyZy0+cGFy YW1zW2ldLnUudmFsdWUuYiA9CisgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1z W2ldLnUudmFsdWUuYjsKKyAgICAgICAgICAgIGd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUudmFsdWUu YyA9CisgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUudmFsdWUuYzsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVf Tk9ORToKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5QVVQ6CisgICAg ICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUOgorICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShndWVzdF9h cmcpOworICAgIHB1dF9wYWdlKHBhZ2UpOworfQorCisvKiBIYW5kbGUgUlBDIHJldHVybiBmcm9t IE9QLVRFRSAqLworc3RhdGljIHZvaWQgaGFuZGxlX3JwY19yZXR1cm4oc3RydWN0IGFybV9zbWNj Y19yZXMgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVl X3N0ZF9jYWxsICpjYWxsKQoreworICAgIGNhbGwtPnJwY19vcCA9IE9QVEVFX1NNQ19SRVRVUk5f R0VUX1JQQ19GVU5DKHJlcy0+YTApOworICAgIGNhbGwtPnJwY19wYXJhbXNbMF0gPSByZXMtPmEx OworICAgIGNhbGwtPnJwY19wYXJhbXNbMV0gPSByZXMtPmEyOworICAgIGNhbGwtPm9wdGVlX3Ro cmVhZF9pZCA9IHJlcy0+YTM7CisKKyAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgcmVzLT5hMCk7 CisgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDEsIHJlcy0+YTEpOworICAgIHNldF91c2VyX3JlZyhy ZWdzLCAyLCByZXMtPmEyKTsKKyAgICBzZXRfdXNlcl9yZWcocmVncywgMywgcmVzLT5hMyk7Cit9 CisKKy8qCisgKiAoUmUpc3RhcnQgc3RhbmRhcmQgY2FsbC4gVGhpcyBmdW5jdGlvbiB3aWxsIGJl IGNhbGxlZCBpbiB0d28gY2FzZXM6CisgKiAxLiBHdWVzdCBpbml0aWF0ZXMgbmV3IHN0YW5kYXJk IGNhbGwKKyAqIDIuIEd1ZXN0IGZpbmlzaGVkIFJQQyBoYW5kbGluZyBhbmQgYXNrcyBPUC1URUUg dG8gcmVzdW1lIHRoZSBjYWxsCisgKgorICogSW4gYW55IGNhc2UgT1AtVEVFIGNhbiBlaXRoZXIg Y29tcGxldGUgY2FsbCBvciBpc3N1ZSBhbm90aGVyIFJQQy4KKyAqIElmIHRoaXMgaXMgUlBDIC0g d2UgbmVlZCB0byBzdG9yZSBjYWxsIGNvbnRleHQgYW5kIHJldHVybiBiYWNrIHRvIGd1ZXN0Lgor ICogSWYgY2FsbCBpcyBjb21wbGV0ZSAtIHdlIG5lZWQgdG8gcmV0dXJuIHJlc3VsdHMgd2l0aCBj b3B5X3N0ZF9yZXF1ZXN0X2JhY2soKQorICogYW5kIHRoZW4gd2Ugd2lsbCBkZXN0cm95IHRoZSBj YWxsIGNvbnRleHQgYXMgaXQgaXMgbm90IG5lZWRlZCBhbnltb3JlLgorICovCitzdGF0aWMgdm9p ZCBkb19jYWxsX3dpdGhfYXJnKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCBhMCwgcmVnaXN0ZXJfdCBhMSwgcmVnaXN0 ZXJfdCBhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCBhMywgcmVn aXN0ZXJfdCBhNCwgcmVnaXN0ZXJfdCBhNSkKK3sKKyAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyBy ZXM7CisKKyAgICBhcm1fc21jY2Nfc21jKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIDAsIE9QVEVF X0NMSUVOVF9JRChjdXJyZW50LT5kb21haW4pLAorICAgICAgICAgICAgICAgICAgJnJlcyk7CisK KyAgICBpZiAoIE9QVEVFX1NNQ19SRVRVUk5fSVNfUlBDKHJlcy5hMCkgKQorICAgIHsKKyAgICAg ICAgaGFuZGxlX3JwY19yZXR1cm4oJnJlcywgcmVncywgY2FsbCk7CisgICAgICAgIHB1dF9zdGRf Y2FsbChjdHgsIGNhbGwpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5X3N0 ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdzLCBjYWxsKTsKKyAgICBzZXRfdXNlcl9yZWcocmVncywg MCwgcmVzLmEwKTsKKworICAgIHB1dF9zdGRfY2FsbChjdHgsIGNhbGwpOworICAgIGZyZWVfc3Rk X2NhbGwoY3R4LCBjYWxsKTsKK30KKworLyoKKyAqIFN0YW5kYXJkIGNhbGwgaGFuZGxpbmcuIFRo aXMgaXMgdGhlIG1haW4gdHlwZSBvZiB0aGUgY2FsbCB3aGljaAorICogbWFrZXMgT1AtVEVFIHVz ZWZ1bC4gTW9zdCBvZiB0aGUgb3RoZXIgY2FsbHMgdHlwZSBhcmUgdXRpbGl0eQorICogY2FsbHMs IHdoaWxlIHN0YW5kYXJkIGNhbGxzIGFyZSBuZWVkZWQgdG8gaW50ZXJhY3Qgd2l0aCBUcnVzdGVk CisgKiBBcHBsaWNhdGlvbnMgd2hpY2ggYXJlIHJ1bm5pbmcgaW5zaWRlIHRoZSBPUC1URUUuCisg KgorICogQWxsIGFyZ3VtZW50cyBmb3IgdGhpcyB0eXBlIG9mIGNhbGwgYXJlIHBhc3NlZCBpbiB0 aGUgY29tbWFuZAorICogYnVmZmVyIGluIHRoZSBndWVzdCBtZW1vcnkuIFdlIHdpbGwgY29weSB0 aGlzIGJ1ZmZlciBpbnRvCisgKiBvd24gc2hhZG93IGJ1ZmZlciBhbmQgcHJvdmlkZSB0aGUgY29w eSB0byBPUC1URUUuCisgKgorICogVGhpcyBjYWxsIGlzIHByZWVtcHRpYmxlLiBPUC1URUUgd2ls bCByZXR1cm4gZnJvbSB0aGUgY2FsbCBpZiB0aGVyZQorICogaXMgYW4gaW50ZXJydXB0IHJlcXVl c3QgcGVuZGluZy4gQWxzbywgT1AtVEVFIHdpbGwgaW50ZXJydXB0IHRoZQorICogY2FsbCBpZiBp dCBuZWVkcyBzb21lIHNlcnZpY2UgZnJvbSBndWVzdC4gSW4gYm90aCBjYXNlcyBpdCB3aWxsCisg KiBpc3N1ZSBSUEMsIHdoaWNoIGlzIHByb2Nlc3NlZCBieSBoYW5kbGVfcnBjX3JldHVybigpIGZ1 bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2NhbGwoc3RydWN0IG9wdGVlX2Rv bWFpbiAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQoreworICAgIHJlZ2lzdGVyX3QgYTEsIGEyOworICAgIHBhZGRyX3QgeGVuX2Fk ZHI7CisgICAgc2l6ZV90IGFyZ19zaXplOworICAgIHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2Fs bCA9IGFsbG9jYXRlX3N0ZF9jYWxsKGN0eCk7CisKKyAgICBpZiAoIElTX0VSUihjYWxsKSApCisg ICAgeworICAgICAgICBpZiAoIFBUUl9FUlIoY2FsbCkgPT0gLUVOT01FTSApCisgICAgICAgICAg ICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVfU01DX1JFVFVSTl9FTk9NRU0pOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVfU01DX1JFVFVS Tl9FVEhSRUFEX0xJTUlUKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCAh Y29weV9zdGRfcmVxdWVzdChyZWdzLCBjYWxsKSApCisgICAgICAgIGdvdG8gZXJyOworCisgICAg YXJnX3NpemUgPSBPUFRFRV9NU0dfR0VUX0FSR19TSVpFKGNhbGwtPnhlbl9hcmctPm51bV9wYXJh bXMpOworICAgIGlmICggYXJnX3NpemUgPiBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAp CisgICAgeworICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJB TUVURVJTOworICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXRfb3JpZ2luID0gVEVFQ19PUklHSU5f Q09NTVM7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGNvcHlfc3RkX3JlcXVlc3RfYmFjaygp IHdpbGwgc3RheSB3aXRoaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICBjYWxsLT54ZW5fYXJnLT5u dW1fcGFyYW1zID0gMDsKKworICAgICAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdz LCBjYWxsKTsKKworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCBjYWxs LT54ZW5fYXJnLT5jbWQgKQorICAgIHsKKyAgICBjYXNlIE9QVEVFX01TR19DTURfT1BFTl9TRVNT SU9OOgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9DTE9TRV9TRVNTSU9OOgorICAgIGNhc2UgT1BU RUVfTVNHX0NNRF9JTlZPS0VfQ09NTUFORDoKKyAgICBjYXNlIE9QVEVFX01TR19DTURfQ0FOQ0VM OgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE06CisgICAgY2FzZSBPUFRFRV9N U0dfQ01EX1VOUkVHSVNURVJfU0hNOgorICAgICAgICB4ZW5fYWRkciA9IHBhZ2VfdG9fbWFkZHIo Y2FsbC0+eGVuX2FyZ19wZyk7CisgICAgICAgIHVpbnQ2NF90b19yZWdwYWlyKCZhMSwgJmEyLCB4 ZW5fYWRkcik7CisKKyAgICAgICAgZG9fY2FsbF93aXRoX2FyZyhjdHgsIGNhbGwsIHJlZ3MsIE9Q VEVFX1NNQ19DQUxMX1dJVEhfQVJHLCBhMSwgYTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg T1BURUVfU01DX1NITV9DQUNIRUQsIDAsIDApOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVs dDoKKyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRUJBRENN RCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXJyOgorICAgIHB1dF9zdGRfY2FsbChjdHgs IGNhbGwpOworICAgIGZyZWVfc3RkX2NhbGwoY3R4LCBjYWxsKTsKKworICAgIHJldHVybjsKK30K KworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZ3Vlc3QgaXMgZmluaXNoZWQg cHJvY2Vzc2luZyBSUEMKKyAqIHJlcXVlc3QgZnJvbSBPUC1URUUgYW5kIHdpc2hlZCB0byByZXN1 bWUgdGhlIGludGVycnVwdGVkIHN0YW5kYXJkCisgKiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBo YW5kbGVfcnBjKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCit7CisgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxsICpjYWxsOworICAgIGludCBvcHRl ZV90aHJlYWRfaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMyk7CisKKyAgICBjYWxsID0gZ2V0X3N0 ZF9jYWxsKGN0eCwgb3B0ZWVfdGhyZWFkX2lkKTsKKworICAgIGlmICggIWNhbGwgKQorICAgIHsK KyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRVJFU1VNRSk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoaXMgaXMgdG8gcHJl dmVudCByYWNlIGJldHdlZW4gbmV3IGNhbGwgd2l0aCB0aGUgc2FtZSB0aHJlYWQgaWQuCisgICAg ICogT1AtVEVFIGNhbiByZXVzZSB0aHJlYWQgaWQgcmlnaHQgYWZ0ZXIgaXQgZmluaXNoZWQgaGFu ZGxpbmcgdGhlIGNhbGwsCisgICAgICogYmVmb3JlIFhFTiBoYWQgY2hhbmNlIHRvIGZyZWUgb2xk IGNhbGwgY29udGV4dC4KKyAgICAgKi8KKyAgICBjYWxsLT5vcHRlZV90aHJlYWRfaWQgPSAtMTsK KworICAgIHN3aXRjaCAoIGNhbGwtPnJwY19vcCApCisgICAgeworICAgIGNhc2UgT1BURUVfU01D X1JQQ19GVU5DX0FMTE9DOgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRlJFRToKKyAgICAgICAgLyog VE9ETzogQWRkIGhhbmRsaW5nICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BURUVfU01D X1JQQ19GVU5DX0ZPUkVJR05fSU5UUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRFRV9T TUNfUlBDX0ZVTkNfQ01EOgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgZG9fY2FsbF93aXRoX2FyZyhjdHgsIGNhbGwsIHJlZ3Ms IE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQywKKyAgICAgICAgICAgICAgICAgICAgIGNh bGwtPnJwY19wYXJhbXNbMF0sIGNhbGwtPnJwY19wYXJhbXNbMV0sCisgICAgICAgICAgICAgICAg ICAgICBvcHRlZV90aHJlYWRfaWQsIDAsIDApOworICAgIHJldHVybjsKK30KKwogc3RhdGljIHZv aWQgaGFuZGxlX2V4Y2hhbmdlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOwpAQCAtMTY2LDggKzY2Niw5IEBA IHN0YXRpYyB2b2lkIGhhbmRsZV9leGNoYW5nZV9jYXBhYmlsaXRpZXMoc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MpCiBzdGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOworICAgIHN0 cnVjdCBvcHRlZV9kb21haW4gKmN0eCA9IGN1cnJlbnQtPmRvbWFpbi0+YXJjaC50ZWU7CiAKLSAg ICBpZiAoICFjdXJyZW50LT5kb21haW4tPmFyY2gudGVlICkKKyAgICBpZiAoICFjdHggKQogICAg ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKCBnZXRfdXNlcl9yZWcocmVncywgMCkg KQpAQCAtMjM0LDggKzczNSwxMSBAQCBzdGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNl IE9QVEVFX1NNQ19DQUxMX1dJVEhfQVJHOgorICAgICAgICBoYW5kbGVfc3RkX2NhbGwoY3R4LCBy ZWdzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBjYXNlIE9QVEVFX1NNQ19DQUxMX1JF VFVSTl9GUk9NX1JQQzoKLSAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19S RVRVUk5fRU5PVEFWQUlMKTsKKyAgICAgICAgaGFuZGxlX3JwYyhjdHgsIHJlZ3MpOwogICAgICAg ICByZXR1cm4gdHJ1ZTsKIAogICAgIGRlZmF1bHQ6Ci0tIAoyLjIxLjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=