From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jia Yu Subject: Re: [PATCH] net/bonding: fix buf corruption in merging un-transmitted packets Date: Mon, 20 Aug 2018 07:02:44 +0000 Message-ID: <840D57E3-E0E2-45B0-B449-91DFCD63C837@vmware.com> References: <1534551009-16550-1-git-send-email-jyu@vmware.com> <29C69F93-9D89-4528-A645-78E6C34E8CB5@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "dev@dpdk.org" , Declan Doherty , Chas Williams To: Chas Williams <3chas3@gmail.com> Return-path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0069.outbound.protection.outlook.com [104.47.36.69]) by dpdk.org (Postfix) with ESMTP id 333A22BCD for ; Mon, 20 Aug 2018 09:13:11 +0200 (CEST) In-Reply-To: Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgQ2hhcywNCg0KQ291bGQgeW91IGhlbHAgdG8gcmV2aWV3IHRoZSB2MiBvZiB0aGUgcGF0Y2g/ IEkgaGF2ZSBhZGRyZXNzZWQgdGhlIOKAnEZpeGVz4oCdIHJlcXVpcmVtZW50IGluIGNvbW1pdCBt ZXNzYWdlLCBhbmQgbW9kaWZpZWQgc2xhdmVfdHhfZmFpbF9jb3VudOKAmXMgZGVmaW5pdGlvbi4N Cg0KVGhhbmtzLA0KSmlhDQoNCkZyb206IENoYXMgV2lsbGlhbXMgPDNjaGFzM0BnbWFpbC5jb20+ DQpEYXRlOiBTdW5kYXksIEF1Z3VzdCAxOSwgMjAxOCBhdCA1OjA3IFBNDQpUbzogSmlhIFl1IDxq eXVAdm13YXJlLmNvbT4NCkNjOiAiZGV2QGRwZGsub3JnIiA8ZGV2QGRwZGsub3JnPiwgRGVjbGFu IERvaGVydHkgPGRlY2xhbi5kb2hlcnR5QGludGVsLmNvbT4sIENoYXMgV2lsbGlhbXMgPGNoYXMz QGF0dC5jb20+DQpTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0hdIG5ldC9ib25kaW5nOiBm aXggYnVmIGNvcnJ1cHRpb24gaW4gbWVyZ2luZyB1bi10cmFuc21pdHRlZCBwYWNrZXRzDQoNCg0K DQpPbiBTdW4sIEF1ZyAxOSwgMjAxOCBhdCA2OjE5IFBNIEppYSBZdSA8anl1QHZtd2FyZS5jb208 bWFpbHRvOmp5dUB2bXdhcmUuY29tPj4gd3JvdGU6DQpIaSBDaGFzLA0KDQpUaGFua3MgZm9yIHJl dmlld2luZyB0aGUgY2hhbmdlLg0KDQpPdXIgYXBwbGljYXRpb24gY3Jhc2hlZCBhZnRlciB1cGdy YWRpbmcgdG8gRFBESyAxOC4wMiwgd2hlbiBwYWNrZXQgcmF0ZSBpcyBoaWdoIGFuZCBib25kIGlz IGNvbmZpZ3VyZWQuIEl0IGhhcHBlbmVkIGJlY2F1c2UgdHhxIGNvbnRhaW5zIGludmFsaWQgbWJ1 ZiBhZGRyZXNzZXMgYWZ0ZXIgcnRlX2V0aF90eF9idXJzdCBjYWxsIChmb3IgZXhhbXBsZSwgMHgx MDAwMDAwMDAgcmVwZWF0ZWQgMTMgdGltZXMgaW4gb25lIGNvcmUgZHVtcCkuIEl0IHNlZW1zIHRo YXQgdGhlIGludmFsaWQgYWRkcmVzc2VzIGNhbWUgZnJvbSBidWYgc2hpZnQgY29kZSBiZWxvdywg c28gSSBjaGFuZ2VkIHRoaXMgcGFydCBvZiBjb2RlIHRvIGVhcmxpZXIgdmVyc2lvbi4gV2UgZG9u 4oCZdCBzZWUgY3Jhc2ggYWZ0ZXIgdGhlIGZpeC4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHRoZSBm aXggaXMgcmVhc29uYWJsZS4NCg0KV2l0aCByZXNwZWN0IHRvIGNvcnJlY3RuZXNzLCB0aGUgY29k ZSB5b3UgYXJlIGZpeGluZyBkb2VzIHNlZW0gYnJva2VuLg0KU2VlIGlubGluZSBiZWxvdy4NCg0K DQptX3RhYmxlID0gezB4N2ZkZjIzYTY4ZWMwLCAweDdmZGYyM2E2ODQwMCwgMHg3ZmRmMjNhNjZl ODAsIDB4N2ZkZjIzYTY1OTAwLA0KICAgIDB4N2ZkZjIzOTYwZTAwLCAweDEwMDAwMDAwMCA8cmVw ZWF0cyAxMyB0aW1lcz4sIDB4N2ZkZjIzOTc4NjQwLCAweDdmZGYyMzk3N2I4MCwgMHg3ZmRmMjM5 NzQ1YzAsIDB4N2ZkZjIzYTRkNjAwLCAweDdmZGYyM2E0Y2I0MCwNCiAgICAweDdmZGYyM2E3NWIw MCwgMHg3ZmRmMjNhNzQ1ODAsIDB4N2ZkZjIzOTcyNTgwLCAweDdmZGYyMzlhNzZjMCwgMHg3ZmRm MjM5YTU2ODAsIDB4N2ZkZjIzYTdhNjQwLCAweDdmZGYyM2E3OWI4MCwgMHg3ZmRmMjNhNzdiNDAs DQogICAgMHg3ZmRmMjM5NWI4MDB9DQoNCi8qIFNlbmQgcGFja2V0IGJ1cnN0IG9uIGVhY2ggc2xh dmUgZGV2aWNlICovDQogICAgZm9yIChpID0gMDsgaSA8IHNsYXZlX2NvdW50OyBpKyspIHsNCiAg ICAgICAgaWYgKHNsYXZlX25iX2J1ZnNbaV0gPT0gMCkNCiAgICAgICAgICAgIGNvbnRpbnVlOw0K DQogICAgICAgIHNsYXZlX3R4X2NvdW50ID0gcnRlX2V0aF90eF9idXJzdChzbGF2ZV9wb3J0X2lk c1tpXSwNCiAgICAgICAgICAgICAgICBiZF90eF9xLT5xdWV1ZV9pZCwgc2xhdmVfYnVmc1tpXSwN CiAgICAgICAgICAgICAgICBzbGF2ZV9uYl9idWZzW2ldKTsNCg0KQSB0eXBpY2FsIGZhaWx1cmUg aGVyZSB3b3VsZCBiZSB0byB0cmFuc21pdCBubyBwYWNrZXRzLiAgc2xhdmVfdHhfY291bnQgPSAw Lg0KDQoNCg0KDQogICAgICAgIHRvdGFsX3R4X2NvdW50ICs9IHNsYXZlX3R4X2NvdW50Ow0KDQog ICAgICAgIC8qIElmIHR4IGJ1cnN0IGZhaWxzIG1vdmUgcGFja2V0cyB0byBlbmQgb2YgYnVmcyAq Lw0KICAgICAgICBpZiAodW5saWtlbHkoc2xhdmVfdHhfY291bnQgPCBzbGF2ZV9uYl9idWZzW2ld KSkgew0KICAgICAgICAgICAgc2xhdmVfdHhfZmFpbF9jb3VudFtpXSA9IHNsYXZlX25iX2J1ZnNb aV0gLQ0KICAgICAgICAgICAgICAgICAgICBzbGF2ZV90eF9jb3VudDsNCiAgICAgICAgICAgIHRv dGFsX3R4X2ZhaWxfY291bnQgKz0gc2xhdmVfdHhfZmFpbF9jb3VudFtpXTsNCg0KICAgICAgICAg ICAgLyoNCiAgICAgICAgICAgICAqIFNoaWZ0IGJ1ZnMgdG8gYmVnaW5uaW5nIG9mIGFycmF5IHRv IGFsbG93IHJlb3JkZXJpbmcNCiAgICAgICAgICAgICAqIGxhdGVyDQogICAgICAgICAgICAgKi8N CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBzbGF2ZV90eF9mYWlsX2NvdW50W2ldOyBqKysp IHsNCiAgICAgICAgICAgICAgICBzbGF2ZV9idWZzW2ldW2pdID0NCiAgICAgICAgICAgICAgICAg ICAgc2xhdmVfYnVmc1tpXVsoc2xhdmVfdHhfY291bnQgLSAxKSArIGpdOyA8PT09PSB3aGF0IGlm IHNsYXZlX3R4X2NvdW50ID09IDAsIGogPT0gMA0KDQpBcyB5b3UgY29ycmVjdGx5IHBvaW50IG91 dCwgc2xhdmVfdHhfY291bnQgLSAxIHdvdWxkIGJlIC0xLiAgQmFkIG5ld3MuDQpTbywgeWVzLCBJ IGFncmVlIHdpdGggeW91ciBmaXguICBJbiB5b3VyIGZpeCwgeW91IG1pZ2h0IG5vdGljZSB0aGF0 DQpzbGF2ZV90eF9mYWlsX2NvdW50IGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBhcnJheS4gIEl0J3Mg bG9jYWwgdG8NCmlmICh1bmxpa2VseShzbGF2ZV90eF9jb3VudCA8IHNsYXZlX25iX2J1ZnNbaV0p KSBub3cuDQoNCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQpUaGFua3MsDQpK aWENCg0KRnJvbTogQ2hhcyBXaWxsaWFtcyA8M2NoYXMzQGdtYWlsLmNvbTxtYWlsdG86M2NoYXMz QGdtYWlsLmNvbT4+DQpEYXRlOiBTYXR1cmRheSwgQXVndXN0IDE4LCAyMDE4IGF0IDQ6NTAgUE0N ClRvOiBKaWEgWXUgPGp5dUB2bXdhcmUuY29tPG1haWx0bzpqeXVAdm13YXJlLmNvbT4+DQpDYzog ImRldkBkcGRrLm9yZzxtYWlsdG86ZGV2QGRwZGsub3JnPiIgPGRldkBkcGRrLm9yZzxtYWlsdG86 ZGV2QGRwZGsub3JnPj4sIERlY2xhbiBEb2hlcnR5IDxkZWNsYW4uZG9oZXJ0eUBpbnRlbC5jb208 bWFpbHRvOmRlY2xhbi5kb2hlcnR5QGludGVsLmNvbT4+LCBDaGFzIFdpbGxpYW1zIDxjaGFzM0Bh dHQuY29tPG1haWx0bzpjaGFzM0BhdHQuY29tPj4NClN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQ QVRDSF0gbmV0L2JvbmRpbmc6IGZpeCBidWYgY29ycnVwdGlvbiBpbiBtZXJnaW5nIHVuLXRyYW5z bWl0dGVkIHBhY2tldHMNCg0KDQoNCk9uIEZyaSwgQXVnIDE3LCAyMDE4IGF0IDk6NDYgUE0gSmlh IFl1IDxqeXVAdm13YXJlLmNvbTxtYWlsdG86anl1QHZtd2FyZS5jb20+PiB3cm90ZToNCldoZW4g Ym9uZCBzbGF2ZSBkZXZpY2VzIGNhbm5vdCB0cmFuc21pdCBhbGwgcGFja2V0cyBpbiBidWZzIGFy cmF5LA0KdHhfYnVyc3QgY2FsbGJhY2sgc2hhbGwgbWVyZ2UgdGhlIHVuLXRyYW5zbWl0dGVkIHBh Y2tldHMgYmFjayB0bw0KYnVmcyBhcnJheS4gUmVjZW50IG1lcmdlIGxvZ2ljIGludHJvZHVjZWQg YSBidWcgd2hpY2ggY2F1c2VzDQppbnZhbGlkIG1idWYgYWRkcmVzc2VzIGJlaW5nIHdyaXR0ZW4g dG8gYnVmcyBhcnJheS4NCg0KQ2FuIHlvdSBleHBhbmQgb24gdGhpcyBhIGJpdD8gIFdoYXQgd2Fz IHRoZSBjb21taXQ/DQoNCg0KV2hlbiBjYWxsZXIgZnJlZXMgdGhlIHVuLXRyYW5zbWl0dGVkIHBh Y2tldHMsIGR1ZSB0byBpbnZhbGlkIGFkZHJlc3NlcywNCmFwcGxpY2F0aW9uIHdpbGwgY3Jhc2gu DQoNClRoZSBmaXggaXMgYXZvaWQgc2hpZnRpbmcgbWJ1ZnMsIGFuZCBkaXJlY3RseSB3cml0ZSB1 bi10cmFuc21pdHRlZA0KcGFja2V0cyBiYWNrIHRvIGJ1ZnMgYXJyYXkuDQoNClNpZ25lZC1vZmYt Ynk6IEppYSBZdSA8anl1QHZtd2FyZS5jb208bWFpbHRvOmp5dUB2bXdhcmUuY29tPj4NCi0tLQ0K IGRyaXZlcnMvbmV0L2JvbmRpbmcvcnRlX2V0aF9ib25kX3BtZC5jIHwgOTggKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCsp LCA4NCBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvcnRl X2V0aF9ib25kX3BtZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRoX2JvbmRfcG1kLmMN CmluZGV4IDU4ZjczNzcuLmNjZTk3M2EgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5n L3J0ZV9ldGhfYm9uZF9wbWQuYw0KKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRoX2Jv bmRfcG1kLmMNCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9uZF9ldGhkZXZfdHhfYnVyc3RfODAyM2Fk X2Zhc3RfcXVldWUodm9pZCAqcXVldWUsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsDQogICAgICAg IHVpbnQxNl90IHNsYXZlX3R4X2NvdW50LCBzbGF2ZV90eF9mYWlsX2NvdW50W1JURV9NQVhfRVRI UE9SVFNdID0geyAwIH07DQogICAgICAgIHVpbnQxNl90IHRvdGFsX3R4X2NvdW50ID0gMCwgdG90 YWxfdHhfZmFpbF9jb3VudCA9IDA7DQoNCi0gICAgICAgdWludDE2X3QgaSwgajsNCisgICAgICAg dWludDE2X3QgaTsNCg0KICAgICAgICBpZiAodW5saWtlbHkobmJfYnVmcyA9PSAwKSkNCiAgICAg ICAgICAgICAgICByZXR1cm4gMDsNCkBAIC0zNjEsMzEgKzM2MSw5IEBAIGJvbmRfZXRoZGV2X3R4 X2J1cnN0XzgwMjNhZF9mYXN0X3F1ZXVlKHZvaWQgKnF1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKipi dWZzLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfdHhfZmFpbF9jb3VudFtpXSA9IHNs YXZlX25iX2J1ZnNbaV0gLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNsYXZlX3R4X2NvdW50Ow0KICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdHhfZmFpbF9j b3VudCArPSBzbGF2ZV90eF9mYWlsX2NvdW50W2ldOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAg ICAgLyoNCi0gICAgICAgICAgICAgICAgICAgICAgICAqIFNoaWZ0IGJ1ZnMgdG8gYmVnaW5uaW5n IG9mIGFycmF5IHRvIGFsbG93IHJlb3JkZXJpbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAq IGxhdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgICAgICAgICAgICAgICAg ICAgIGZvciAoaiA9IDA7IGogPCBzbGF2ZV90eF9mYWlsX2NvdW50W2ldOyBqKyspIHsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYnVmc1tpXVtqXSA9DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYnVmc1tpXVsoc2xhdmVfdHhfY291 bnQgLSAxKSArIGpdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg IH0NCi0gICAgICAgfQ0KLQ0KLSAgICAgICAvKg0KLSAgICAgICAgKiBJZiB0aGVyZSBhcmUgdHgg YnVyc3QgZmFpbHVyZXMgd2UgbW92ZSBwYWNrZXRzIHRvIGVuZCBvZiBidWZzIHRvDQotICAgICAg ICAqIHByZXNlcnZlIGV4cGVjdGVkIFBNRCBiZWhhdmlvdXIgb2YgYWxsIGZhaWxlZCB0cmFuc21p dHRlZCBiZWluZw0KLSAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBtYnVmIGFycmF5 DQotICAgICAgICAqLw0KLSAgICAgICBpZiAodW5saWtlbHkodG90YWxfdHhfZmFpbF9jb3VudCA+ IDApKSB7DQotICAgICAgICAgICAgICAgaW50IGJ1ZnNfaWR4ID0gbmJfYnVmcyAtIHRvdGFsX3R4 X2ZhaWxfY291bnQgLSAxOw0KLQ0KLSAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbGF2 ZV9jb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xhdmVfdHhfZmFp bF9jb3VudFtpXSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChq ID0gMDsgaiA8IHNsYXZlX3R4X2ZhaWxfY291bnRbaV07IGorKykNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWZzW2J1ZnNfaWR4KytdID0gc2xhdmVfYnVmc1tpXVtq XTsNCi0gICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgIG1l bWNweSgmYnVmc1tuYl9idWZzIC0gdG90YWxfdHhfZmFpbF9jb3VudF0sDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnNsYXZlX2J1ZnNbaV1bc2xhdmVfdHhfY291bnRdLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX3R4X2ZhaWxfY291bnRbaV0gKiBzaXplb2Yo YnVmc1swXSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQpAQCAtNzE1LDggKzY5 Myw4IEBAIGJvbmRfZXRoZGV2X3R4X2J1cnN0X3JvdW5kX3JvYmluKHZvaWQgKnF1ZXVlLCBzdHJ1 Y3QgcnRlX21idWYgKipidWZzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9m YWlsX3RvdGFsICs9IHR4X2ZhaWxfc2xhdmU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWVtY3B5KCZidWZzW25iX3BrdHMgLSB0eF9mYWlsX3RvdGFsXSwNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbGF2ZV9idWZzW2ldW251bV90 eF9zbGF2ZV0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eF9mYWlsX3NsYXZlICogc2l6ZW9mKGJ1ZnNbMF0pKTsNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzbGF2ZV9idWZzW2ldW251bV90eF9zbGF2ZV0sDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9mYWlsX3NsYXZlICogc2l6ZW9mKGJ1 ZnNbMF0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg ICAgIG51bV90eF90b3RhbCArPSBudW1fdHhfc2xhdmU7DQogICAgICAgICAgICAgICAgfQ0KQEAg LTEyMjQsNyArMTIwMiw3IEBAIGJvbmRfZXRoZGV2X3R4X2J1cnN0X2JhbGFuY2Uodm9pZCAqcXVl dWUsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsDQogICAgICAgIHVpbnQxNl90IHNsYXZlX3R4X2Nv dW50LCBzbGF2ZV90eF9mYWlsX2NvdW50W1JURV9NQVhfRVRIUE9SVFNdID0geyAwIH07DQogICAg ICAgIHVpbnQxNl90IHRvdGFsX3R4X2NvdW50ID0gMCwgdG90YWxfdHhfZmFpbF9jb3VudCA9IDA7 DQoNCi0gICAgICAgdWludDE2X3QgaSwgajsNCisgICAgICAgdWludDE2X3QgaTsNCg0KICAgICAg ICBpZiAodW5saWtlbHkobmJfYnVmcyA9PSAwKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsN CkBAIC0xMjY4LDMxICsxMjQ2LDkgQEAgYm9uZF9ldGhkZXZfdHhfYnVyc3RfYmFsYW5jZSh2b2lk ICpxdWV1ZSwgc3RydWN0IHJ0ZV9tYnVmICoqYnVmcywNCiAgICAgICAgICAgICAgICAgICAgICAg IHNsYXZlX3R4X2ZhaWxfY291bnRbaV0gPSBzbGF2ZV9uYl9idWZzW2ldIC0NCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV90eF9jb3VudDsNCiAgICAgICAgICAg ICAgICAgICAgICAgIHRvdGFsX3R4X2ZhaWxfY291bnQgKz0gc2xhdmVfdHhfZmFpbF9jb3VudFtp XTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgIC8qDQotICAgICAgICAgICAgICAgICAgICAg ICAgKiBTaGlmdCBidWZzIHRvIGJlZ2lubmluZyBvZiBhcnJheSB0byBhbGxvdyByZW9yZGVyaW5n DQotICAgICAgICAgICAgICAgICAgICAgICAgKiBsYXRlcg0KLSAgICAgICAgICAgICAgICAgICAg ICAgICovDQotICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2xhdmVfdHhf ZmFpbF9jb3VudFtpXTsgaisrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNs YXZlX2J1ZnNbaV1bal0gPQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNsYXZlX2J1ZnNbaV1bKHNsYXZlX3R4X2NvdW50IC0gMSkgKyBqXTsNCi0gICAgICAgICAgICAg ICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICB9DQotICAgICAgIH0NCi0NCi0gICAgICAgLyoN Ci0gICAgICAgICogSWYgdGhlcmUgYXJlIHR4IGJ1cnN0IGZhaWx1cmVzIHdlIG1vdmUgcGFja2V0 cyB0byBlbmQgb2YgYnVmcyB0bw0KLSAgICAgICAgKiBwcmVzZXJ2ZSBleHBlY3RlZCBQTUQgYmVo YXZpb3VyIG9mIGFsbCBmYWlsZWQgdHJhbnNtaXR0ZWQgYmVpbmcNCi0gICAgICAgICogYXQgdGhl IGVuZCBvZiB0aGUgaW5wdXQgbWJ1ZiBhcnJheQ0KLSAgICAgICAgKi8NCi0gICAgICAgaWYgKHVu bGlrZWx5KHRvdGFsX3R4X2ZhaWxfY291bnQgPiAwKSkgew0KLSAgICAgICAgICAgICAgIGludCBi dWZzX2lkeCA9IG5iX2J1ZnMgLSB0b3RhbF90eF9mYWlsX2NvdW50IC0gMTsNCi0NCi0gICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xhdmVfY291bnQ7IGkrKykgew0KLSAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHNsYXZlX3R4X2ZhaWxfY291bnRbaV0gPiAwKSB7DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBzbGF2ZV90eF9mYWlsX2NvdW50 W2ldOyBqKyspDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc1ti dWZzX2lkeCsrXSA9IHNsYXZlX2J1ZnNbaV1bal07DQotICAgICAgICAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmJ1ZnNbbmJfYnVmcyAtIHRvdGFsX3R4 X2ZhaWxfY291bnRdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbGF2ZV9idWZz W2ldW3NsYXZlX3R4X2NvdW50XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2 ZV90eF9mYWlsX2NvdW50W2ldICogc2l6ZW9mKGJ1ZnNbMF0pKTsNCiAgICAgICAgICAgICAgICB9 DQogICAgICAgIH0NCg0KQEAgLTEzMjIsNyArMTI3OCw3IEBAIGJvbmRfZXRoZGV2X3R4X2J1cnN0 XzgwMjNhZCh2b2lkICpxdWV1ZSwgc3RydWN0IHJ0ZV9tYnVmICoqYnVmcywNCiAgICAgICAgdWlu dDE2X3Qgc2xhdmVfdHhfY291bnQsIHNsYXZlX3R4X2ZhaWxfY291bnRbUlRFX01BWF9FVEhQT1JU U10gPSB7IDAgfTsNCiAgICAgICAgdWludDE2X3QgdG90YWxfdHhfY291bnQgPSAwLCB0b3RhbF90 eF9mYWlsX2NvdW50ID0gMDsNCg0KLSAgICAgICB1aW50MTZfdCBpLCBqOw0KKyAgICAgICB1aW50 MTZfdCBpOw0KDQogICAgICAgIGlmICh1bmxpa2VseShuYl9idWZzID09IDApKQ0KICAgICAgICAg ICAgICAgIHJldHVybiAwOw0KQEAgLTEzODQsMzUgKzEzNDAsOSBAQCBib25kX2V0aGRldl90eF9i dXJzdF84MDIzYWQodm9pZCAqcXVldWUsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV90eF9jb3VudDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdHhfZmFpbF9jb3VudCArPSBz bGF2ZV90eF9mYWlsX2NvdW50W2ldOw0KDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNoaWZ0IGJ1ZnMgdG8gYmVn aW5uaW5nIG9mIGFycmF5IHRvIGFsbG93DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIHJlb3JkZXJpbmcgbGF0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBzbGF2ZV90 eF9mYWlsX2NvdW50W2ldOyBqKyspDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2xhdmVfYnVmc1tpXVtqXSA9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzbGF2ZV9idWZzW2ldDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2xhdmVfdHhfY291bnQgLSAxKQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGpd Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgIH0NCi0NCi0gICAg ICAgICAgICAgICAvKg0KLSAgICAgICAgICAgICAgICAqIElmIHRoZXJlIGFyZSB0eCBidXJzdCBm YWlsdXJlcyB3ZSBtb3ZlIHBhY2tldHMgdG8gZW5kIG9mDQotICAgICAgICAgICAgICAgICogYnVm cyB0byBwcmVzZXJ2ZSBleHBlY3RlZCBQTUQgYmVoYXZpb3VyIG9mIGFsbCBmYWlsZWQNCi0gICAg ICAgICAgICAgICAgKiB0cmFuc21pdHRlZCBiZWluZyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBt YnVmIGFycmF5DQotICAgICAgICAgICAgICAgICovDQotICAgICAgICAgICAgICAgaWYgKHVubGlr ZWx5KHRvdGFsX3R4X2ZhaWxfY291bnQgPiAwKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAg aW50IGJ1ZnNfaWR4ID0gbmJfYnVmcyAtIHRvdGFsX3R4X2ZhaWxfY291bnQgLSAxOw0KLQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsYXZlX2NvdW50OyBpKyspIHsN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsYXZlX3R4X2ZhaWxfY291bnRb aV0gPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChq ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGog PCBzbGF2ZV90eF9mYWlsX2NvdW50W2ldOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaisrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWZzW2J1ZnNfaWR4KytdID0NCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYnVmc1tpXVtqXTsNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5 KCZidWZzW25iX2J1ZnMgLSB0b3RhbF90eF9mYWlsX2NvdW50XSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZzbGF2ZV9idWZzW2ldW3NsYXZlX3R4X2NvdW50XSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX3R4X2ZhaWxfY291bnRb aV0gKiBzaXplb2YoYnVmc1swXSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KLS0NCjIuNy40DQo=