From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@citrix.com header.s=securemail header.b=AMcRq16S; spf=softfail (domain: citrix.com, ip: , mailfrom: anthony.perard@citrix.com) Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com []) by groups.io with SMTP; Fri, 13 Sep 2019 07:51:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1568386268; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZzMuAekQ0s9/ThuMWqy291Ul+rre0jXW0+bqi1wWX1E=; b=AMcRq16Sg99bjvEVOiov5GIGJxocQuLScYt8+d0kIE6W7bfOBJ1niNsL Ovbun1xgXt16L/2hvismOl6Sd030S04qaEjxRAsPpcodrYAgfmKQjWuSq IXQAtc9NwJJqeyVVYGolTJCLbnX24mZh3s1NUScFB/F+ZGDHoNtQ2XR/F M=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 438aV6qfDMfFLKwz7+b256cgHR6jsDeUAT3aYMe98K54x5Kw+DD+JjwzgHc0JvX/ZDk39Y6COc tuIPX1b4FHKirXWaUEVlBDTuKgbOHruuqK6Cl3NaBYCr2+zodcDGmX9FnAeQQ2nwExGXQfyMot CzFPsAZMaVTYa2pR9Sv7OypMAoRznJ/lGIv3gounik3jQz8Tenu/xmIM+hAfoI4ayUDL+we9Tc in9zbAQitbvc/j2aq7/QvZJg0wYQe3E+mvgn+pPQUY3gFzlqv1/SgSwFpnijMNa4Ct6h9f2lA6 vBk= X-SBRS: 2.7 X-MesageID: 5595146 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,501,1559534400"; d="scan'208";a="5595146" From: "Anthony PERARD" To: CC: Ard Biesheuvel , Julien Grall , Jordan Justen , , Anthony Perard , Laszlo Ersek Subject: [PATCH 06/11] OvmfPkg/XenBusDxe: Rework XenStoreProcessMessage to avoid allocating memory Date: Fri, 13 Sep 2019 15:50:55 +0100 Message-ID: <20190913145100.303433-7-anthony.perard@citrix.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190913145100.303433-1-anthony.perard@citrix.com> References: <20190913145100.303433-1-anthony.perard@citrix.com> MIME-Version: 1.0 Return-Path: anthony.perard@citrix.com Content-Transfer-Encoding: base64 Content-Type: text/plain VGhpcyBwYXRjaCByZXdvcmsgWGVuU3RvcmVQcm9jZXNzTWVzc2FnZSBpbiBvcmRlciB0byBhdm9p ZCBtZW1vcnkKYWxsb2NhdGlvbiB3aGVuIGEgcmVwbHkgaXMgZXhwZWN0ZWQuIEluc3RlYWQgb2Yg YWxsb2NhdGluZyBhIGJ1ZmZlcgpmb3IgdGhpcyByZXBseSwgd2UgYXJlIGdvaW5nIHRvIGNvcHkg dG8gYSBidWZmZXIgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuCkZvciBtZXNzYWdlcyB0aGF0IGFyZW4n dCBmdWxseSByZWNlaXZlZCwgdGhleSB3aWxsIGJlIHN0b3JlZCBpbiBhCmJ1ZmZlciB0aGF0IGhh dmUgYmVlbiBhbGxvY2F0ZWQgYXQgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHRoZSBkcml2ZXIuCgpB IHRlbXBvcmFyeSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBtYWRlIGluIFhlblN0b3JlVGFsa3YgYnV0 IHRoYXQgd2lsbApiZSByZW1vdmVkIGluIGEgZnVydGhlciBwYXRjaC4KClJlZjogaHR0cHM6Ly9i dWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkwClNpZ25lZC1vZmYtYnk6 IEFudGhvbnkgUEVSQVJEIDxhbnRob255LnBlcmFyZEBjaXRyaXguY29tPgotLS0KIE92bWZQa2cv WGVuQnVzRHhlL1hlblN0b3JlLmMgfCAyOTcgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMzAgaW5zZXJ0aW9ucygrKSwgMTY3IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuQnVzRHhlL1hlblN0b3JlLmMgYi9Pdm1mUGtnL1hl bkJ1c0R4ZS9YZW5TdG9yZS5jCmluZGV4IGNhN2JlMTJkNjguLjAwNGQzYjYwMjIgMTAwNjQ0Ci0t LSBhL092bWZQa2cvWGVuQnVzRHhlL1hlblN0b3JlLmMKKysrIGIvT3ZtZlBrZy9YZW5CdXNEeGUv WGVuU3RvcmUuYwpAQCAtNzIsMjcgKzcyLDYgQEAgc3RydWN0IF9YRU5TVE9SRV9XQVRDSAogI2Rl ZmluZSBYRU5TVE9SRV9XQVRDSF9GUk9NX0xJTksobCkgXA0KICAgQ1IgKGwsIFhFTlNUT1JFX1dB VENILCBMaW5rLCBYRU5TVE9SRV9XQVRDSF9TSUdOQVRVUkUpDQogDQotDQotLyoqDQotICogU3Ry dWN0dXJlIGNhcHR1cmluZyBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBYZW5TdG9yZSBzZXJ2 aWNlLg0KLSAqLw0KLSNkZWZpbmUgWEVOU1RPUkVfTUVTU0FHRV9TSUdOQVRVUkUgU0lHTkFUVVJF XzMyICgnWCcsICdTJywgJ3MnLCAnbScpDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgVUlOVDMyIFNp Z25hdHVyZTsNCi0gIExJU1RfRU5UUlkgTGluazsNCi0NCi0gIHN0cnVjdCB4c2Rfc29ja21zZyBI ZWFkZXI7DQotDQotICB1bmlvbiB7DQotICAgIC8qIFF1ZXVlZCByZXBsaWVzLiAqLw0KLSAgICBz dHJ1Y3Qgew0KLSAgICAgIENIQVI4ICpCb2R5Ow0KLSAgICB9IFJlcGx5Ow0KLSAgfSB1Ow0KLX0g WEVOU1RPUkVfTUVTU0FHRTsNCi0jZGVmaW5lIFhFTlNUT1JFX01FU1NBR0VfRlJPTV9MSU5LKHIp IFwNCi0gIENSIChyLCBYRU5TVE9SRV9NRVNTQUdFLCBMaW5rLCBYRU5TVE9SRV9NRVNTQUdFX1NJ R05BVFVSRSkNCi0NCiAvKioNCiAgKiBDb250YWluZXIgZm9yIGFsbCBYZW5TdG9yZSByZWxhdGVk IHN0YXRlLg0KICAqLw0KQEAgLTEwNSwyMSArODQsNiBAQCB0eXBlZGVmIHN0cnVjdCB7CiANCiAg IFhFTkJVU19ERVZJQ0UgKkRldjsNCiANCi0gIC8qKg0KLSAgICogQSBsaXN0IG9mIHJlcGxpZXMg dG8gb3VyIHJlcXVlc3RzLg0KLSAgICoNCi0gICAqIFRoZSByZXBseSBsaXN0IGlzIGZpbGxlZCBi eSB4c19yY3ZfdGhyZWFkKCkuICBJdA0KLSAgICogaXMgY29uc3VtZWQgYnkgdGhlIGNvbnRleHQg dGhhdCBpc3N1ZWQgdGhlIHJlcXVlc3QNCi0gICAqIHRvIHdoaWNoIGEgcmVwbHkgaXMgbWFkZS4g IFRoZSByZXF1ZXN0ZXIgYmxvY2tzIGluDQotICAgKiBYZW5TdG9yZVJlYWRSZXBseSAoKS4NCi0g ICAqDQotICAgKiAvbm90ZSBPbmx5IG9uZSByZXF1ZXN0aW5nIGNvbnRleHQgY2FuIGJlIGFjdGl2 ZSBhdCBhIHRpbWUuDQotICAgKi8NCi0gIExJU1RfRU5UUlkgUmVwbHlMaXN0Ow0KLQ0KLSAgLyoq IExvY2sgcHJvdGVjdGluZyB0aGUgcmVwbHkgbGlzdC4gKi8NCi0gIEVGSV9MT0NLIFJlcGx5TG9j azsNCi0NCiAgIC8qKg0KICAgICogTGlzdCBvZiByZWdpc3RlcmVkIHdhdGNoZXMuDQogICAgKi8N CkBAIC0xMzYsNiArMTAwLDEzIEBAIHR5cGVkZWYgc3RydWN0IHsKIA0KICAgLyoqIEhhbmRsZSBm b3IgWGVuU3RvcmUgZXZlbnRzLiAqLw0KICAgRUZJX0VWRU5UIEV2ZW50Q2hhbm5lbEV2ZW50Ow0K Kw0KKyAgLyoqIEJ1ZmZlciB1c2VkIHRvIGNvcHkgcGF5bG9hZHMgZnJvbSB0aGUgeGVuc3RvcmUg cmluZyAqLw0KKyAgLy8gVGhlICsgMSBpcyB0byBhbGxvdyB0byBoYXZlIGEgXDAuDQorICBDSEFS OCBCdWZmZXJbWEVOU1RPUkVfUEFZTE9BRF9NQVggKyAxXTsNCisNCisgIC8qKiBJRCB1c2VkIHdo ZW4gc2VuZGluZyBtZXNzYWdlcyB0byB4ZW5zdG9yZWQgKi8NCisgIFVJTlROIE5leHRSZXF1ZXN0 SWQ7DQogfSBYRU5TVE9SRV9QUklWQVRFOw0KIA0KIC8vDQpAQCAtMTQ4LDYgKzExOSwxMiBAQCBz dGF0aWMgWEVOU1RPUkVfUFJJVkFURSB4czsKIC8vIFByaXZhdGUgVXRpbGl0eSBGdW5jdGlvbnMN CiAvLw0KIA0KK1NUQVRJQw0KK1hFTlNUT1JFX1NUQVRVUw0KK1hlblN0b3JlR2V0RXJyb3IgKA0K KyAgQ09OU1QgQ0hBUjggKkVycm9yU3RyDQorICApOw0KKw0KIC8qKg0KICAgQ291bnQgYW5kIG9w dGlvbmFsbHkgcmVjb3JkIHBvaW50ZXJzIHRvIGEgbnVtYmVyIG9mIE5VTCB0ZXJtaW5hdGVkDQog ICBzdHJpbmdzIGluIGEgYnVmZmVyLg0KQEAgLTYxMyw3MCArNTkwLDEwNiBAQCBYZW5TdG9yZVJl YWRTdG9yZSAoCiAgIEJsb2NrIHJlYWRpbmcgdGhlIG5leHQgbWVzc2FnZSBmcm9tIHRoZSBYZW5T dG9yZSBzZXJ2aWNlIGFuZA0KICAgcHJvY2VzcyB0aGUgcmVzdWx0Lg0KIA0KKyAgQHBhcmFtIEV4 cGVjdGVkUmVxdWVzdElkICAgICAgQmxvY2sgdW50aWwgYSByZXBseSB0byB3aXRoIHRoaXMgSUQg aXMgc2Vlbi4NCisgIEBwYXJhbSBFeHBlY3RlZFRyYW5zYWN0aW9uSWQgIElkZW0sIGJ1dCBzaG91 bGQgYWxzbyBtYXRjaCB0aGlzIElELg0KKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICAgICAgICAg SU46IHNpemUgb2YgdGhlIGJ1ZmZlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T1VUOiBUaGUgcmV0dXJuZWQgbGVuZ3RoIG9mIHRoZSByZXBseS4NCisgIEBwYXJhbSBCdWZmZXIg ICAgICAgICAgICAgICAgIFRoZSByZXR1cm5lZCBib2R5IG9mIHRoZSByZXBseS4NCisNCiAgIEBy ZXR1cm4gIFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTIG9uIHN1Y2Nlc3MuICBPdGhlcndpc2UgYW4g ZXJybm8gdmFsdWUNCiAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZmFpbHVyZSBl bmNvdW50ZXJlZC4NCiAqKi8NCiBTVEFUSUMNCiBYRU5TVE9SRV9TVEFUVVMNCiBYZW5TdG9yZVBy b2Nlc3NNZXNzYWdlICgNCi0gIFZPSUQNCisgIElOICAgICBVSU5UMzIgICAgRXhwZWN0ZWRSZXF1 ZXN0SWQsDQorICBJTiAgICAgVUlOVDMyICAgIEV4cGVjdGVkVHJhbnNhY3Rpb25JZCwNCisgIElO IE9VVCBVSU5UTiAgICAgKkJ1ZmZlclNpemUgT1BUSU9OQUwsDQorICBJTiBPVVQgQ0hBUjggICAg ICpCdWZmZXIgT1BUSU9OQUwNCiAgICkNCiB7DQotICBYRU5TVE9SRV9NRVNTQUdFICpNZXNzYWdl Ow0KLSAgQ0hBUjggKkJvZHk7DQotICBYRU5TVE9SRV9TVEFUVVMgU3RhdHVzOw0KLQ0KLSAgTWVz c2FnZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoWEVOU1RPUkVfTUVTU0FHRSkpOw0KLSAg TWVzc2FnZS0+U2lnbmF0dXJlID0gWEVOU1RPUkVfTUVTU0FHRV9TSUdOQVRVUkU7DQotICBTdGF0 dXMgPSBYZW5TdG9yZVJlYWRTdG9yZSAoJk1lc3NhZ2UtPkhlYWRlciwgc2l6ZW9mIChNZXNzYWdl LT5IZWFkZXIpKTsNCi0gIGlmIChTdGF0dXMgIT0gWEVOU1RPUkVfU1RBVFVTX1NVQ0NFU1MpIHsN Ci0gICAgRnJlZVBvb2wgKE1lc3NhZ2UpOw0KLSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiWGVu U3RvcmU6IEVycm9yIHJlYWQgc3RvcmUgKCVkKVxuIiwgU3RhdHVzKSk7DQotICAgIHJldHVybiBT dGF0dXM7DQotICB9DQotDQotICBCb2R5ID0gQWxsb2NhdGVQb29sIChNZXNzYWdlLT5IZWFkZXIu bGVuICsgMSk7DQotICBTdGF0dXMgPSBYZW5TdG9yZVJlYWRTdG9yZSAoQm9keSwgTWVzc2FnZS0+ SGVhZGVyLmxlbik7DQotICBpZiAoU3RhdHVzICE9IFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTKSB7 DQotICAgIEZyZWVQb29sIChCb2R5KTsNCi0gICAgRnJlZVBvb2wgKE1lc3NhZ2UpOw0KLSAgICBE RUJVRyAoKEVGSV9EX0VSUk9SLCAiWGVuU3RvcmU6IEVycm9yIHJlYWQgc3RvcmUgKCVkKVxuIiwg U3RhdHVzKSk7DQotICAgIHJldHVybiBTdGF0dXM7DQotICB9DQotICBCb2R5W01lc3NhZ2UtPkhl YWRlci5sZW5dID0gJ1wwJzsNCisgIHN0cnVjdCB4c2Rfc29ja21zZyBIZWFkZXI7DQorICBDSEFS OCAgICAgICAgICAgICAgKlBheWxvYWQ7DQorICBYRU5TVE9SRV9TVEFUVVMgICAgU3RhdHVzOw0K IA0KLSAgaWYgKE1lc3NhZ2UtPkhlYWRlci50eXBlID09IFhTX1dBVENIX0VWRU5UKSB7DQotICAg IENPTlNUIENIQVI4ICAgICpXYXRjaEV2ZW50UGF0aDsNCi0gICAgQ09OU1QgQ0hBUjggICAgKldh dGNoRXZlbnRUb2tlbjsNCi0gICAgVk9JRCAgICAgICAgICAgKkNvbnZlcnRlZFRva2VuOw0KLSAg ICBYRU5TVE9SRV9XQVRDSCAqV2F0Y2g7DQorICB3aGlsZSAoVFJVRSkgew0KIA0KLSAgICAvLw0K LSAgICAvLyBQYXJzZSBXQVRDSF9FVkVOVCBtZXNzYWdlcw0KLSAgICAvLyAgIDxwYXRoPlwwPHRv a2VuPlwwDQotICAgIC8vDQotICAgIFdhdGNoRXZlbnRQYXRoID0gQm9keTsNCi0gICAgV2F0Y2hF dmVudFRva2VuID0gV2F0Y2hFdmVudFBhdGggKyBBc2NpaVN0clNpemUgKFdhdGNoRXZlbnRQYXRo KTsNCisgICAgU3RhdHVzID0gWGVuU3RvcmVSZWFkU3RvcmUgKCZIZWFkZXIsIHNpemVvZiAoSGVh ZGVyKSk7DQorICAgIGlmIChTdGF0dXMgIT0gWEVOU1RPUkVfU1RBVFVTX1NVQ0NFU1MpIHsNCisg ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiWGVuU3RvcmU6IEVycm9yIHJlYWQgc3RvcmUgKCVk KVxuIiwgU3RhdHVzKSk7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KIA0KLSAgICBD b252ZXJ0ZWRUb2tlbiA9IChWT0lEICopIEFzY2lpU3RySGV4VG9VaW50biAoV2F0Y2hFdmVudFRv a2VuKTsNCisgICAgQVNTRVJUIChIZWFkZXIubGVuIDw9IFhFTlNUT1JFX1BBWUxPQURfTUFYKTsN CisgICAgaWYgKEhlYWRlci5sZW4gPiBYRU5TVE9SRV9QQVlMT0FEX01BWCkgew0KKyAgICAgIERF QlVHICgoREVCVUdfRVJST1IsICJYZW5TdG9yZTogTWVzc2FnZSBwYXlsb2FkIG92ZXIgJWQgKGlz ICVkKVxuIiwNCisgICAgICAgICAgWEVOU1RPUkVfUEFZTE9BRF9NQVgsIEhlYWRlci5sZW4pKTsN CisgICAgICBIZWFkZXIubGVuID0gWEVOU1RPUkVfUEFZTE9BRF9NQVg7DQorICAgIH0NCiANCi0g ICAgRWZpQWNxdWlyZUxvY2sgKCZ4cy5SZWdpc3RlcmVkV2F0Y2hlc0xvY2spOw0KLSAgICBXYXRj aCA9IFhlblN0b3JlRmluZFdhdGNoIChDb252ZXJ0ZWRUb2tlbik7DQotICAgIERFQlVHICgoREVC VUdfSU5GTywgIlhlblN0b3JlOiBXYXRjaCBldmVudCAlYVxuIiwgV2F0Y2hFdmVudFRva2VuKSk7 DQotICAgIGlmIChXYXRjaCAhPSBOVUxMKSB7DQotICAgICAgV2F0Y2gtPlRyaWdnZXJlZCA9IFRS VUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgREVCVUcgKChFRklfRF9XQVJOLCAiWGVuU3RvcmU6 IFdhdGNoIGhhbmRsZSAlYSBub3QgZm91bmRcbiIsDQotICAgICAgICAgICAgICBXYXRjaEV2ZW50 VG9rZW4pKTsNCisgICAgUGF5bG9hZCA9IHhzLkJ1ZmZlcjsNCisgICAgU3RhdHVzID0gWGVuU3Rv cmVSZWFkU3RvcmUgKFBheWxvYWQsIEhlYWRlci5sZW4pOw0KKyAgICBpZiAoU3RhdHVzICE9IFhF TlNUT1JFX1NUQVRVU19TVUNDRVNTKSB7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlhl blN0b3JlOiBFcnJvciByZWFkIHN0b3JlICglZClcbiIsIFN0YXR1cykpOw0KKyAgICAgIHJldHVy biBTdGF0dXM7DQogICAgIH0NCi0gICAgRWZpUmVsZWFzZUxvY2sgKCZ4cy5SZWdpc3RlcmVkV2F0 Y2hlc0xvY2spOw0KLSAgICBGcmVlUG9vbCAoTWVzc2FnZSk7DQotICAgIEZyZWVQb29sIChCb2R5 KTsNCi0gIH0gZWxzZSB7DQotICAgIE1lc3NhZ2UtPnUuUmVwbHkuQm9keSA9IEJvZHk7DQotICAg IEVmaUFjcXVpcmVMb2NrICgmeHMuUmVwbHlMb2NrKTsNCi0gICAgSW5zZXJ0VGFpbExpc3QgKCZ4 cy5SZXBseUxpc3QsICZNZXNzYWdlLT5MaW5rKTsNCi0gICAgRWZpUmVsZWFzZUxvY2sgKCZ4cy5S ZXBseUxvY2spOw0KKyAgICBQYXlsb2FkW0hlYWRlci5sZW5dID0gJ1wwJzsNCisNCisgICAgaWYg KEhlYWRlci50eXBlID09IFhTX1dBVENIX0VWRU5UKSB7DQorICAgICAgQ09OU1QgQ0hBUjggICAg KldhdGNoRXZlbnRQYXRoOw0KKyAgICAgIENPTlNUIENIQVI4ICAgICpXYXRjaEV2ZW50VG9rZW47 DQorICAgICAgVk9JRCAgICAgICAgICAgKkNvbnZlcnRlZFRva2VuOw0KKyAgICAgIFhFTlNUT1JF X1dBVENIICpXYXRjaDsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFBhcnNlIFdBVENIX0VWRU5U IG1lc3NhZ2VzDQorICAgICAgLy8gICA8cGF0aD5cMDx0b2tlbj5cMA0KKyAgICAgIC8vDQorICAg ICAgV2F0Y2hFdmVudFBhdGggPSBQYXlsb2FkOw0KKyAgICAgIFdhdGNoRXZlbnRUb2tlbiA9IFdh dGNoRXZlbnRQYXRoICsgQXNjaWlTdHJTaXplIChXYXRjaEV2ZW50UGF0aCk7DQorDQorICAgICAg Q29udmVydGVkVG9rZW4gPSAoVk9JRCAqKSBBc2NpaVN0ckhleFRvVWludG4gKFdhdGNoRXZlbnRU b2tlbik7DQorDQorICAgICAgRWZpQWNxdWlyZUxvY2sgKCZ4cy5SZWdpc3RlcmVkV2F0Y2hlc0xv Y2spOw0KKyAgICAgIFdhdGNoID0gWGVuU3RvcmVGaW5kV2F0Y2ggKENvbnZlcnRlZFRva2VuKTsN CisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJYZW5TdG9yZTogV2F0Y2ggZXZlbnQgJWFcbiIs IFdhdGNoRXZlbnRUb2tlbikpOw0KKyAgICAgIGlmIChXYXRjaCAhPSBOVUxMKSB7DQorICAgICAg ICBXYXRjaC0+VHJpZ2dlcmVkID0gVFJVRTsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgREVC VUcgKChERUJVR19XQVJOLCAiWGVuU3RvcmU6IFdhdGNoIGhhbmRsZSAlYSBub3QgZm91bmRcbiIs DQorICAgICAgICAgICAgICAgIFdhdGNoRXZlbnRUb2tlbikpOw0KKyAgICAgIH0NCisgICAgICBF ZmlSZWxlYXNlTG9jayAoJnhzLlJlZ2lzdGVyZWRXYXRjaGVzTG9jayk7DQorDQorICAgICAgaWYg KEhlYWRlci5yZXFfaWQgPT0gRXhwZWN0ZWRSZXF1ZXN0SWQNCisgICAgICAgICYmIEhlYWRlci50 eF9pZCA9PSBFeHBlY3RlZFRyYW5zYWN0aW9uSWQNCisgICAgICAgICYmIEJ1ZmZlciA9PSBOVUxM KSB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gV2Ugd2VyZSB3YWl0aW5nIGZvciBhIHdhdGNo IGV2ZW50DQorICAgICAgICAvLw0KKyAgICAgICAgcmV0dXJuIFhFTlNUT1JFX1NUQVRVU19TVUND RVNTOw0KKyAgICAgIH0NCisgICAgfSBlbHNlIGlmIChIZWFkZXIucmVxX2lkID09IEV4cGVjdGVk UmVxdWVzdElkDQorICAgICAgJiYgSGVhZGVyLnR4X2lkID09IEV4cGVjdGVkVHJhbnNhY3Rpb25J ZCkgew0KKyAgICAgIFN0YXR1cyA9IFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTOw0KKyAgICAgIGlm IChIZWFkZXIudHlwZSA9PSBYU19FUlJPUikgew0KKyAgICAgICAgU3RhdHVzID0gWGVuU3RvcmVH ZXRFcnJvciAoUGF5bG9hZCk7DQorICAgICAgfSBlbHNlIGlmIChCdWZmZXIgIT0gTlVMTCkgew0K KyAgICAgICAgQVNTRVJUIChCdWZmZXJTaXplICE9IE5VTEwpOw0KKyAgICAgICAgQVNTRVJUICgq QnVmZmVyU2l6ZSA+PSBIZWFkZXIubGVuKTsNCisgICAgICAgIENvcHlNZW0gKEJ1ZmZlciwgUGF5 bG9hZCwgTUlOIChIZWFkZXIubGVuICsgMSwgKkJ1ZmZlclNpemUpKTsNCisgICAgICAgICpCdWZm ZXJTaXplID0gSGVhZGVyLmxlbjsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgLy8NCisgICAg ICAgIC8vIFBheWxvYWQgc2hvdWxkIGJlICJPSyIgaWYgdGhlIGZ1bmN0aW9uIHNlbmRpbmcgYSBy ZXF1ZXN0IGRvZXNuJ3QNCisgICAgICAgIC8vIGV4cGVjdCBhIHJlcGx5Lg0KKyAgICAgICAgLy8N CisgICAgICAgIEFTU0VSVCAoSGVhZGVyLmxlbiA9PSAzKTsNCisgICAgICAgIEFTU0VSVCAoQXNj aWlTdHJDbXAgKFBheWxvYWQsICJPSyIpID09IDApOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4g U3RhdHVzOw0KKyAgICB9DQorDQogICB9DQogDQogICByZXR1cm4gWEVOU1RPUkVfU1RBVFVTX1NV Q0NFU1M7DQpAQCAtNzM2LDUxICs3NDksNiBAQCBYZW5TdG9yZUdldEVycm9yICgKICAgcmV0dXJu IFhFTlNUT1JFX1NUQVRVU19FSU5WQUw7DQogfQ0KIA0KLS8qKg0KLSAgQmxvY2sgd2FpdGluZyBm b3IgYSByZXBseSB0byBhIG1lc3NhZ2UgcmVxdWVzdC4NCi0NCi0gIEBwYXJhbSBUeXBlUHRyIFRo ZSByZXR1cm5lZCB0eXBlIG9mIHRoZSByZXBseS4NCi0gIEBwYXJhbSBMZW5QdHIgIFRoZSByZXR1 cm5lZCBib2R5IGxlbmd0aCBvZiB0aGUgcmVwbHkuDQotICBAcGFyYW0gUmVzdWx0ICBUaGUgcmV0 dXJuZWQgYm9keSBvZiB0aGUgcmVwbHkuDQotKiovDQotU1RBVElDDQotWEVOU1RPUkVfU1RBVFVT DQotWGVuU3RvcmVSZWFkUmVwbHkgKA0KLSAgT1VUIGVudW0geHNkX3NvY2ttc2dfdHlwZSAqVHlw ZVB0ciwNCi0gIE9VVCBVSU5UMzIgKkxlblB0ciBPUFRJT05BTCwNCi0gIE9VVCBWT0lEICoqUmVz dWx0DQotICApDQotew0KLSAgWEVOU1RPUkVfTUVTU0FHRSAqTWVzc2FnZTsNCi0gIExJU1RfRU5U UlkgKkVudHJ5Ow0KLSAgQ0hBUjggKkJvZHk7DQotDQotICB3aGlsZSAoSXNMaXN0RW1wdHkgKCZ4 cy5SZXBseUxpc3QpKSB7DQotICAgIFhFTlNUT1JFX1NUQVRVUyBTdGF0dXM7DQotICAgIFN0YXR1 cyA9IFhlblN0b3JlUHJvY2Vzc01lc3NhZ2UgKCk7DQotICAgIGlmIChTdGF0dXMgIT0gWEVOU1RP UkVfU1RBVFVTX1NVQ0NFU1MgJiYgU3RhdHVzICE9IFhFTlNUT1JFX1NUQVRVU19FQUdBSU4pIHsN Ci0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiWGVuU3RvcmUsIGVycm9yIHdoaWxlIHJlYWRp bmcgdGhlIHJpbmcgKCVkKS5cbiIsDQotICAgICAgICAgICAgICBTdGF0dXMpKTsNCi0gICAgICBy ZXR1cm4gU3RhdHVzOw0KLSAgICB9DQotICB9DQotICBFZmlBY3F1aXJlTG9jayAoJnhzLlJlcGx5 TG9jayk7DQotICBFbnRyeSA9IEdldEZpcnN0Tm9kZSAoJnhzLlJlcGx5TGlzdCk7DQotICBNZXNz YWdlID0gWEVOU1RPUkVfTUVTU0FHRV9GUk9NX0xJTksgKEVudHJ5KTsNCi0gIFJlbW92ZUVudHJ5 TGlzdCAoRW50cnkpOw0KLSAgRWZpUmVsZWFzZUxvY2sgKCZ4cy5SZXBseUxvY2spOw0KLQ0KLSAg KlR5cGVQdHIgPSBNZXNzYWdlLT5IZWFkZXIudHlwZTsNCi0gIGlmIChMZW5QdHIgIT0gTlVMTCkg ew0KLSAgICAqTGVuUHRyID0gTWVzc2FnZS0+SGVhZGVyLmxlbjsNCi0gIH0NCi0gIEJvZHkgPSBN ZXNzYWdlLT51LlJlcGx5LkJvZHk7DQotDQotICBGcmVlUG9vbCAoTWVzc2FnZSk7DQotICAqUmVz dWx0ID0gQm9keTsNCi0gIHJldHVybiBYRU5TVE9SRV9TVEFUVVNfU1VDQ0VTUzsNCi19DQotDQog LyoqDQogICBTZW5kIGEgbWVzc2FnZSB3aXRoIGFuIG9wdGlvbmFsbHkgbXV0aS1wYXJ0IGJvZHkg dG8gdGhlIFhlblN0b3JlIHNlcnZpY2UuDQogDQpAQCAtODA2LDE2ICs3NzQsMTcgQEAgWGVuU3Rv cmVUYWxrdiAoCiAgICkNCiB7DQogICBzdHJ1Y3QgeHNkX3NvY2ttc2cgTWVzc2FnZTsNCi0gIHZv aWQgKlJldHVybiA9IE5VTEw7DQotICBVSU5UMzIgSW5kZXg7DQotICBYRU5TVE9SRV9TVEFUVVMg U3RhdHVzOw0KKyAgVUlOVE4gICAgICAgICAgICAgIEluZGV4Ow0KKyAgWEVOU1RPUkVfU1RBVFVT ICAgIFN0YXR1czsNCisgIFZPSUQgICAgICAgICAgICAgICAqQnVmZmVyOw0KKyAgVUlOVE4gICAg ICAgICAgICAgIEJ1ZmZlclNpemU7DQogDQogICBpZiAoVHJhbnNhY3Rpb24gPT0gWFNUX05JTCkg ew0KICAgICBNZXNzYWdlLnR4X2lkID0gMDsNCiAgIH0gZWxzZSB7DQogICAgIE1lc3NhZ2UudHhf aWQgPSBUcmFuc2FjdGlvbi0+SWQ7DQogICB9DQotICBNZXNzYWdlLnJlcV9pZCA9IDA7DQorICBN ZXNzYWdlLnJlcV9pZCA9IHhzLk5leHRSZXF1ZXN0SWQrKzsNCiAgIE1lc3NhZ2UudHlwZSA9IFJl cXVlc3RUeXBlOw0KICAgTWVzc2FnZS5sZW4gPSAwOw0KICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgTnVtUmVxdWVzdHM7IEluZGV4KyspIHsNCkBAIC04MzYsMjkgKzgwNSwzNiBAQCBYZW5TdG9y ZVRhbGt2ICgKICAgICB9DQogICB9DQogDQotICBTdGF0dXMgPSBYZW5TdG9yZVJlYWRSZXBseSAo KGVudW0geHNkX3NvY2ttc2dfdHlwZSAqKSZNZXNzYWdlLnR5cGUsIExlblB0ciwgJlJldHVybik7 DQotDQotRXJyb3I6DQotICBpZiAoU3RhdHVzICE9IFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTKSB7 DQotICAgIHJldHVybiBTdGF0dXM7DQorICBpZiAoUmVzdWx0UHRyKSB7DQorICAgIEJ1ZmZlciA9 IEFsbG9jYXRlUG9vbCAoWEVOU1RPUkVfUEFZTE9BRF9NQVggKyAxKTsNCisgICAgQnVmZmVyU2l6 ZSA9IFhFTlNUT1JFX1BBWUxPQURfTUFYOw0KKyAgfSBlbHNlIHsNCisgICAgQnVmZmVyID0gTlVM TDsNCisgICAgQnVmZmVyU2l6ZSA9IDA7DQogICB9DQogDQotICBpZiAoTWVzc2FnZS50eXBlID09 IFhTX0VSUk9SKSB7DQotICAgIFN0YXR1cyA9IFhlblN0b3JlR2V0RXJyb3IgKFJldHVybik7DQot ICAgIEZyZWVQb29sIChSZXR1cm4pOw0KKyAgLy8NCisgIC8vIFdhaXQgZm9yIGEgcmVwbHkgdG8g b3VyIHJlcXVlc3QNCisgIC8vDQorICBTdGF0dXMgPSBYZW5TdG9yZVByb2Nlc3NNZXNzYWdlIChN ZXNzYWdlLnJlcV9pZCwgTWVzc2FnZS50eF9pZCwNCisgICAgJkJ1ZmZlclNpemUsIEJ1ZmZlcik7 DQorDQorICBpZiAoU3RhdHVzICE9IFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTKSB7DQorICAgIERF QlVHICgoREVCVUdfRVJST1IsICJYZW5TdG9yZSwgZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgcmlu ZyAoJWQpLlxuIiwNCisgICAgICAgIFN0YXR1cykpOw0KKyAgICBGcmVlUG9vbCAoQnVmZmVyKTsN CiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCiANCi0gIC8qIFJlcGx5IGlzIGVpdGhlciBlcnJv ciBvciBhbiBlY2hvIG9mIG91ciByZXF1ZXN0IG1lc3NhZ2UgdHlwZS4gKi8NCi0gIEFTU0VSVCAo KGVudW0geHNkX3NvY2ttc2dfdHlwZSlNZXNzYWdlLnR5cGUgPT0gUmVxdWVzdFR5cGUpOw0KLQ0K ICAgaWYgKFJlc3VsdFB0cikgew0KLSAgICAqUmVzdWx0UHRyID0gUmV0dXJuOw0KLSAgfSBlbHNl IHsNCi0gICAgRnJlZVBvb2wgKFJldHVybik7DQorICAgICpSZXN1bHRQdHIgPSBCdWZmZXI7DQor ICAgIGlmIChMZW5QdHIpIHsNCisgICAgICAqTGVuUHRyID0gQnVmZmVyU2l6ZTsNCisgICAgfQ0K ICAgfQ0KIA0KLSAgcmV0dXJuIFhFTlNUT1JFX1NUQVRVU19TVUNDRVNTOw0KK0Vycm9yOg0KKyAg cmV0dXJuIFN0YXR1czsNCiB9DQogDQogLyoqDQpAQCAtOTc1LDcgKzk1MSw3IEBAIFhlblN0b3Jl V2FpdFdhdGNoICgKICAgICAgIHJldHVybiBYRU5TVE9SRV9TVEFUVVNfU1VDQ0VTUzsNCiAgICAg fQ0KIA0KLSAgICBTdGF0dXMgPSBYZW5TdG9yZVByb2Nlc3NNZXNzYWdlICgpOw0KKyAgICBTdGF0 dXMgPSBYZW5TdG9yZVByb2Nlc3NNZXNzYWdlICgwLCAwLCBOVUxMLCBOVUxMKTsNCiAgICAgaWYg KFN0YXR1cyAhPSBYRU5TVE9SRV9TVEFUVVNfU1VDQ0VTUyAmJiBTdGF0dXMgIT0gWEVOU1RPUkVf U1RBVFVTX0VBR0FJTikgew0KICAgICAgIHJldHVybiBTdGF0dXM7DQogICAgIH0NCkBAIC0xMDYw LDEyICsxMDM2LDEyIEBAIFhlblN0b3JlSW5pdCAoCiAgIERFQlVHICgoRUZJX0RfSU5GTywgIlhl bkJ1c0luaXQ6IFhlbkJ1cyByaW5ncyBAJXAsIGV2ZW50IGNoYW5uZWwgJXhcbiIsDQogICAgICAg ICAgIHhzLlhlblN0b3JlLCB4cy5FdmVudENoYW5uZWwpKTsNCiANCi0gIEluaXRpYWxpemVMaXN0 SGVhZCAoJnhzLlJlcGx5TGlzdCk7DQogICBJbml0aWFsaXplTGlzdEhlYWQgKCZ4cy5SZWdpc3Rl cmVkV2F0Y2hlcyk7DQogDQotICBFZmlJbml0aWFsaXplTG9jayAoJnhzLlJlcGx5TG9jaywgVFBM X05PVElGWSk7DQogICBFZmlJbml0aWFsaXplTG9jayAoJnhzLlJlZ2lzdGVyZWRXYXRjaGVzTG9j aywgVFBMX05PVElGWSk7DQogDQorICB4cy5OZXh0UmVxdWVzdElkID0gMTsNCisNCiAgIC8qIElu aXRpYWxpemUgdGhlIHNoYXJlZCBtZW1vcnkgcmluZ3MgdG8gdGFsayB0byB4ZW5zdG9yZWQgKi8N CiAgIFN0YXR1cyA9IFhlblN0b3JlSW5pdENvbW1zICgmeHMpOw0KIA0KQEAgLTEwOTUsMTkgKzEw NzEsNiBAQCBYZW5TdG9yZURlaW5pdCAoCiAgICAgfQ0KICAgfQ0KIA0KLSAgaWYgKCFJc0xpc3RF bXB0eSAoJnhzLlJlcGx5TGlzdCkpIHsNCi0gICAgWEVOU1RPUkVfTUVTU0FHRSAqTWVzc2FnZTsN Ci0gICAgTElTVF9FTlRSWSAqRW50cnk7DQotICAgIEVudHJ5ID0gR2V0Rmlyc3ROb2RlICgmeHMu UmVwbHlMaXN0KTsNCi0gICAgd2hpbGUgKCFJc051bGwgKCZ4cy5SZXBseUxpc3QsIEVudHJ5KSkg ew0KLSAgICAgIE1lc3NhZ2UgPSBYRU5TVE9SRV9NRVNTQUdFX0ZST01fTElOSyAoRW50cnkpOw0K LSAgICAgIEVudHJ5ID0gR2V0TmV4dE5vZGUgKCZ4cy5SZXBseUxpc3QsIEVudHJ5KTsNCi0gICAg ICBSZW1vdmVFbnRyeUxpc3QgKCZNZXNzYWdlLT5MaW5rKTsNCi0gICAgICBGcmVlUG9vbCAoTWVz c2FnZS0+dS5SZXBseS5Cb2R5KTsNCi0gICAgICBGcmVlUG9vbCAoTWVzc2FnZSk7DQotICAgIH0N Ci0gIH0NCi0NCiAgIGdCUy0+Q2xvc2VFdmVudCAoeHMuRXZlbnRDaGFubmVsRXZlbnQpOw0KIA0K ICAgaWYgKHhzLlhlblN0b3JlLT5zZXJ2ZXJfZmVhdHVyZXMgJiBYRU5TVE9SRV9TRVJWRVJfRkVB VFVSRV9SRUNPTk5FQ1RJT04pIHsNCi0tIApBbnRob255IFBFUkFSRAoK