Return-Path: Received: from us-smtp-delivery-194.mimecast.com ([216.205.24.194]:31043 "EHLO us-smtp-delivery-194.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753743AbdLNTDb (ORCPT ); Thu, 14 Dec 2017 14:03:31 -0500 From: Trond Myklebust To: "chuck.lever@oracle.com" CC: "Anna.Schumaker@Netapp.com" , "linux-nfs@vger.kernel.org" Subject: Re: [PATCH v3] SUNRPC: Fix a race in the receive code path Date: Thu, 14 Dec 2017 19:03:20 +0000 Message-ID: <1513278198.5198.3.camel@primarydata.com> References: <20171204001726.5747-1-trond.myklebust@primarydata.com> <17932F80-EF03-48BA-AD6C-90A441B286EF@oracle.com> <1513253779.6553.7.camel@primarydata.com> <42B23A9B-3566-4E0F-9E3D-53BB2C39C0E9@oracle.com> In-Reply-To: <42B23A9B-3566-4E0F-9E3D-53BB2C39C0E9@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-nfs-owner@vger.kernel.org List-ID: T24gVGh1LCAyMDE3LTEyLTE0IGF0IDEwOjQ5IC0wNTAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g PiBPbiBEZWMgMTQsIDIwMTcsIGF0IDc6MTYgQU0sIFRyb25kIE15a2xlYnVzdCA8dHJvbmRteUBw cmltYXJ5ZGF0YS5jDQo+ID4gb20+IHdyb3RlOg0KPiA+IA0KPiA+IE9uIFdlZCwgMjAxNy0xMi0x MyBhdCAyMDoxMyAtMDUwMCwgQ2h1Y2sgTGV2ZXIgd3JvdGU6DQo+ID4gPiA+IE9uIERlYyAxMywg MjAxNywgYXQgNjo0MiBQTSwgQ2h1Y2sgTGV2ZXIgPGNodWNrLmxldmVyQG9yYWNsZS5jbw0KPiA+ ID4gPiBtPg0KPiA+ID4gPiB3cm90ZToNCj4gPiA+ID4gDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4g T24gRGVjIDEzLCAyMDE3LCBhdCAxMToxNCBBTSwgQ2h1Y2sgTGV2ZXIgPGNodWNrLmxldmVyQG9y YWNsZQ0KPiA+ID4gPiA+IC5jb20NCj4gPiA+ID4gPiA+IHdyb3RlOg0KPiA+ID4gPiA+IA0KPiA+ ID4gPiA+IEhpIFRyb25kLQ0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gT24gRGVjIDMsIDIwMTcs IGF0IDc6MTcgUE0sIFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXMNCj4gPiA+ID4gPiA+ IHRAcHINCj4gPiA+ID4gPiA+IGltYXJ5ZGF0YS5jb20+IHdyb3RlOg0KPiA+ID4gPiA+ID4gDQo+ ID4gPiA+ID4gPiBXZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBjYWxsIHRvIHJwY19zbGVlcF9vbigp IGluDQo+ID4gPiA+ID4gPiB4cHJ0X3RyYW5zbWl0KCkgY2Fubm90DQo+ID4gPiA+ID4gPiByYWNl IHdpdGggdGhlIGNhbGwgdG8geHBydF9jb21wbGV0ZV9ycXN0KCkuDQo+ID4gPiA+ID4gPiANCj4g PiA+ID4gPiA+IFJlcG9ydGVkLWJ5OiBDaHVjayBMZXZlciA8Y2h1Y2subGV2ZXJAb3JhY2xlLmNv bT4NCj4gPiA+ID4gPiA+IExpbms6IGh0dHBzOi8vYnVnemlsbGEubGludXgtbmZzLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9MzE3DQo+ID4gPiA+ID4gPiBGaXhlczogY2U3YzI1MmE4Yzc0ICgiU1VOUlBD OiBBZGQgYSBzZXBhcmF0ZSBzcGlubG9jayB0bw0KPiA+ID4gPiA+ID4gcHJvdGVjdC4uIikNCj4g PiA+ID4gPiA+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgNC4xNCsNCj4gPiA+ID4gPiA+ IFJldmlld2VkLWJ5OiBDaHVjayBMZXZlciA8Y2h1Y2subGV2ZXJAb3JhY2xlLmNvbT4NCj4gPiA+ ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QHBy aW1hcnlkYXRhDQo+ID4gPiA+ID4gPiAuY29tDQo+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4g DQo+ID4gPiA+ID4gPiAtLS0NCj4gPiA+ID4gPiA+IG5ldC9zdW5ycGMveHBydC5jIHwgMjYgKysr KysrKysrKysrKysrKystLS0tLS0tLS0NCj4gPiA+ID4gPiA+IDEgZmlsZSBjaGFuZ2VkLCAxNyBp bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYw0KPiA+ID4g PiA+ID4gaW5kZXggMzMzYjlkNjk3YWU1Li41ZTQyNzhlOWNlMzcgMTAwNjQ0DQo+ID4gPiA+ID4g PiAtLS0gYS9uZXQvc3VucnBjL3hwcnQuYw0KPiA+ID4gPiA+ID4gKysrIGIvbmV0L3N1bnJwYy94 cHJ0LmMNCj4gPiA+ID4gPiA+IEBAIC0xMDI0LDYgKzEwMjQsNyBAQCB2b2lkIHhwcnRfdHJhbnNt aXQoc3RydWN0IHJwY190YXNrDQo+ID4gPiA+ID4gPiAqdGFzaykNCj4gPiA+ID4gPiA+IAl9IGVs c2UgaWYgKCFyZXEtPnJxX2J5dGVzX3NlbnQpDQo+ID4gPiA+ID4gPiAJCXJldHVybjsNCj4gPiA+ ID4gPiA+IA0KPiA+ID4gPiA+ID4gKwlyZXEtPnJxX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29u bmVjdF9jb29raWU7DQo+ID4gPiA+ID4gPiAJcmVxLT5ycV94dGltZSA9IGt0aW1lX2dldCgpOw0K PiA+ID4gPiA+ID4gCXN0YXR1cyA9IHhwcnQtPm9wcy0+c2VuZF9yZXF1ZXN0KHRhc2spOw0KPiA+ ID4gPiA+ID4gCXRyYWNlX3hwcnRfdHJhbnNtaXQoeHBydCwgcmVxLT5ycV94aWQsIHN0YXR1cyk7 DQo+ID4gPiA+ID4gPiBAQCAtMTA0NywyMCArMTA0OCwyNyBAQCB2b2lkIHhwcnRfdHJhbnNtaXQo c3RydWN0IHJwY190YXNrDQo+ID4gPiA+ID4gPiAqdGFzaykNCj4gPiA+ID4gPiA+IAl4cHJ0LT5z dGF0LmJrbG9nX3UgKz0geHBydC0+YmFja2xvZy5xbGVuOw0KPiA+ID4gPiA+ID4gCXhwcnQtPnN0 YXQuc2VuZGluZ191ICs9IHhwcnQtPnNlbmRpbmcucWxlbjsNCj4gPiA+ID4gPiA+IAl4cHJ0LT5z dGF0LnBlbmRpbmdfdSArPSB4cHJ0LT5wZW5kaW5nLnFsZW47DQo+ID4gPiA+ID4gPiArCXNwaW5f dW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7DQo+ID4gPiA+ID4gPiANCj4gPiA+ID4g PiA+IC0JLyogRG9uJ3QgcmFjZSB3aXRoIGRpc2Nvbm5lY3QgKi8NCj4gPiA+ID4gPiA+IC0JaWYg KCF4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSkNCj4gPiA+ID4gPiA+IC0JCXRhc2stPnRrX3N0YXR1cyA9 IC1FTk9UQ09OTjsNCj4gPiA+ID4gPiA+IC0JZWxzZSB7DQo+ID4gPiA+ID4gPiArCWlmIChycGNf cmVwbHlfZXhwZWN0ZWQodGFzaykgJiYgIVJFQURfT05DRShyZXEtDQo+ID4gPiA+ID4gPiA+IHJx X3JlcGx5X2J5dGVzX3JlY3ZkKSkgew0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiAJCS8qDQo+ ID4gPiA+ID4gPiAtCQkgKiBTbGVlcCBvbiB0aGUgcGVuZGluZyBxdWV1ZSBzaW5jZQ0KPiA+ID4g PiA+ID4gLQkJICogd2UncmUgZXhwZWN0aW5nIGEgcmVwbHkuDQo+ID4gPiA+ID4gPiArCQkgKiBT bGVlcCBvbiB0aGUgcGVuZGluZyBxdWV1ZSBpZiB3ZSdyZQ0KPiA+ID4gPiA+ID4gZXhwZWN0aW5n IGEgcmVwbHkuDQo+ID4gPiA+ID4gPiArCQkgKiBUaGUgc3BpbmxvY2sgZW5zdXJlcyBhdG9taWNp dHkgYmV0d2Vlbg0KPiA+ID4gPiA+ID4gdGhlDQo+ID4gPiA+ID4gPiB0ZXN0IG9mDQo+ID4gPiA+ ID4gPiArCQkgKiByZXEtPnJxX3JlcGx5X2J5dGVzX3JlY3ZkLCBhbmQgdGhlIGNhbGwNCj4gPiA+ ID4gPiA+IHRvDQo+ID4gPiA+ID4gPiBycGNfc2xlZXBfb24oKS4NCj4gPiA+ID4gPiA+IAkJICov DQo+ID4gPiA+ID4gPiAtCQlpZiAoIXJlcS0+cnFfcmVwbHlfYnl0ZXNfcmVjdmQgJiYNCj4gPiA+ ID4gPiA+IHJwY19yZXBseV9leHBlY3RlZCh0YXNrKSkNCj4gPiA+ID4gPiA+ICsJCXNwaW5fbG9j aygmeHBydC0+cmVjdl9sb2NrKTsNCj4gPiA+ID4gPiA+ICsJCWlmICghcmVxLT5ycV9yZXBseV9i eXRlc19yZWN2ZCkgew0KPiA+ID4gPiA+ID4gCQkJcnBjX3NsZWVwX29uKCZ4cHJ0LT5wZW5kaW5n LCB0YXNrLA0KPiA+ID4gPiA+ID4geHBydF90aW1lcik7DQo+ID4gPiA+ID4gPiAtCQlyZXEtPnJx X2Nvbm5lY3RfY29va2llID0geHBydC0NCj4gPiA+ID4gPiA+ID5jb25uZWN0X2Nvb2tpZTsNCj4g PiA+ID4gPiA+ICsJCQkvKg0KPiA+ID4gPiA+ID4gKwkJCSAqIFNlbmQgYW4gZXh0cmEgcXVldWUg d2FrZXVwIGNhbGwNCj4gPiA+ID4gPiA+IGlmDQo+ID4gPiA+ID4gPiB0aGUNCj4gPiA+ID4gPiA+ ICsJCQkgKiBjb25uZWN0aW9uIHdhcyBkcm9wcGVkIGluIGNhc2UNCj4gPiA+ID4gPiA+IHRoZQ0K PiA+ID4gPiA+ID4gY2FsbCB0bw0KPiA+ID4gPiA+ID4gKwkJCSAqIHJwY19zbGVlcF9vbigpIHJh Y2VkLg0KPiA+ID4gPiA+ID4gKwkJCSAqLw0KPiA+ID4gPiA+ID4gKwkJCWlmICgheHBydF9jb25u ZWN0ZWQoeHBydCkpDQo+ID4gPiA+ID4gPiArCQkJCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhw DQo+ID4gPiA+ID4gPiBydCwNCj4gPiA+ID4gPiA+IC1FTk9UQ09OTik7DQo+ID4gPiA+ID4gPiAr CQl9DQo+ID4gPiA+ID4gPiArCQlzcGluX3VubG9jaygmeHBydC0+cmVjdl9sb2NrKTsNCj4gPiA+ ID4gPiA+IAl9DQo+ID4gPiA+ID4gPiAtCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRf bG9jayk7DQo+ID4gPiA+ID4gPiB9DQo+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+IHN0YXRpYyB2 b2lkIHhwcnRfYWRkX2JhY2tsb2coc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QNCj4gPiA+ ID4gPiA+IHJwY190YXNrICp0YXNrKQ0KPiA+ID4gPiA+ID4gLS0gDQo+ID4gPiA+ID4gPiAyLjE0 LjMNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBJJ3ZlIHJ1biBpbnRvIGEgcHJvYmxlbSB3aXRoIHRo aXMgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggKG9uDQo+ID4gPiA+ID4gdjQuMTUtDQo+ID4gPiA+ID4g cmMzKS4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBXaXRoIGRiZW5jaCBvbiBORlN2NC4wIChvbiBS RE1BKSBJIG5vIGxvbmdlciBzZWUgY29uc3RhbnQNCj4gPiA+ID4gPiB0aHJvdWdocHV0DQo+ID4g PiA+ID4gYW5kIGEgdGVtcG9yYXJpbHkgY2xpbWJpbmcgbGF0ZW5jeSBmb2xsb3dlZCBieSBhIHJl Y292ZXJ5LA0KPiA+ID4gPiA+IGJ1dA0KPiA+ID4gPiA+IHRoaXMNCj4gPiA+ID4gPiBjYW4gaGFw cGVuIG9uIG9jY2FzaW9uOg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IHJlbGVhc2luZyBjbGllbnRz DQo+ID4gPiA+ID4gMTYgICAgICAgNTg0ICAgMzIyLjU1IE1CL3NlYyAgd2FybXVwICAgMSBzZWMg IGxhdGVuY3kgODA3LjEyMQ0KPiA+ID4gPiA+IG1zDQo+ID4gPiA+ID4gMTYgICAgICAgNTg0ICAg MTYxLjI4IE1CL3NlYyAgd2FybXVwICAgMiBzZWMgIGxhdGVuY3kNCj4gPiA+ID4gPiAxODA3LjE3 NSBtcw0KPiA+ID4gPiA+IDE2ICAgICAgIDU4NCAgIDEwNy41MiBNQi9zZWMgIHdhcm11cCAgIDMg c2VjICBsYXRlbmN5DQo+ID4gPiA+ID4gMjgwNy4xOTggbXMNCj4gPiA+ID4gPiAxNiAgICAgICA1 ODQgICAgODAuNjQgTUIvc2VjICB3YXJtdXAgICA0IHNlYyAgbGF0ZW5jeQ0KPiA+ID4gPiA+IDM4 MDcuMjE3IG1zDQo+ID4gPiA+ID4gMTYgICAgICAgNTg0ICAgIDY0LjUxIE1CL3NlYyAgd2FybXVw ICAgNSBzZWMgIGxhdGVuY3kNCj4gPiA+ID4gPiA0ODA3LjIzNSBtcw0KPiA+ID4gPiA+IDE2ICAg ICAgIDU4NCAgICA1My43NiBNQi9zZWMgIHdhcm11cCAgIDYgc2VjICBsYXRlbmN5DQo+ID4gPiA+ ID4gNTgwNy4yNTEgbXMNCj4gPiA+ID4gPiAxNiAgICAgICA1ODQgICAgNDYuMDggTUIvc2VjICB3 YXJtdXAgICA3IHNlYyAgbGF0ZW5jeQ0KPiA+ID4gPiA+IDY4MDcuMjY5IG1zDQo+ID4gPiA+ID4g MTYgICAgICAgNTg0ICAgIDQwLjMyIE1CL3NlYyAgd2FybXVwICAgOCBzZWMgIGxhdGVuY3kNCj4g PiA+ID4gPiA3ODA3LjI4NSBtcw0KPiA+ID4gPiA+IDE2ICAgICAgIDU4NCAgICAzNS44NCBNQi9z ZWMgIHdhcm11cCAgIDkgc2VjICBsYXRlbmN5DQo+ID4gPiA+ID4gODgwNy4zMDMgbXMNCj4gPiA+ ID4gPiAxNiAgICAgICA1ODQgICAgMzIuMjYgTUIvc2VjICB3YXJtdXAgIDEwIHNlYyAgbGF0ZW5j eQ0KPiA+ID4gPiA+IDk4MDcuMzE4IG1zDQo+ID4gPiA+ID4gMTYgICAgICAgNTg0ICAgIDI5LjMy IE1CL3NlYyAgd2FybXVwICAxMSBzZWMgIGxhdGVuY3kNCj4gPiA+ID4gPiAxMDgwNy4zMzQNCj4g PiA+ID4gPiBtcw0KPiA+ID4gPiA+IDE2ICAgICAgIDU4NCAgICAyNi44OCBNQi9zZWMgIHdhcm11 cCAgMTIgc2VjICBsYXRlbmN5DQo+ID4gPiA+ID4gMTE4MDcuMzU1DQo+ID4gPiA+ID4gbXMNCj4g PiA+ID4gPiAxNiAgICAgICA1ODQgICAgMjQuODEgTUIvc2VjICB3YXJtdXAgIDEzIHNlYyAgbGF0 ZW5jeQ0KPiA+ID4gPiA+IDEyODA3LjM3Mg0KPiA+ID4gPiA+IG1zDQo+ID4gPiA+ID4gMTYgICAg ICAgNTg0ICAgIDIzLjA0IE1CL3NlYyAgd2FybXVwICAxNCBzZWMgIGxhdGVuY3kNCj4gPiA+ID4g PiAxMzgwNy4zODcNCj4gPiA+ID4gPiBtcw0KPiA+ID4gPiA+IDE2ICAgICAgIDU4NCAgICAyMS41 MCBNQi9zZWMgIHdhcm11cCAgMTUgc2VjICBsYXRlbmN5DQo+ID4gPiA+ID4gMTQ4MDcuNDA2DQo+ ID4gPiA+ID4gbXMNCj4gPiA+ID4gPiAxNiAgICAgICA1ODQgICAgMjAuMTYgTUIvc2VjICB3YXJt dXAgIDE2IHNlYyAgbGF0ZW5jeQ0KPiA+ID4gPiA+IDE1ODA3LjQyMw0KPiA+ID4gPiA+IG1zDQo+ ID4gPiA+ID4gDQo+ID4gPiA+ID4gTm8gcmVjb3ZlcnkuIFRoZSBsYXRlbmN5IG51bWJlciBrZWVw cyBjbGltYmluZywgYW5kDQo+ID4gPiA+ID4gdGhyb3VnaHB1dA0KPiA+ID4gPiA+IGRyb3BzLg0K PiA+ID4gPiA+IA0KPiA+ID4gPiA+ICJrZXJuZWw6IG5mczogc2VydmVyIGtsaW10LWliIG5vdCBy ZXNwb25kaW5nLCBzdGlsbCB0cnlpbmciDQo+ID4gPiA+ID4gYXBwZWFycyBpbiB0aGUgY2xpZW50 J3MgL3Zhci9sb2cvbWVzc2FnZXMuDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gV2l0aG91dCB0aGlz IHBhdGNoIGFwcGxpZWQsIHRoZSBORlN2NC4wIGJlaGF2aW9yIGlzIHRoZSBzYW1lDQo+ID4gPiA+ ID4gYXMgSQ0KPiA+ID4gPiA+IHJlcG9ydGVkIHdpdGggTkZTdjM6IGV2ZXJ5IG9uY2UgaW4gYSB3 aGlsZSwgb25lIFJQQw0KPiA+ID4gPiA+IGNvbXBsZXRpb24gaXMNCj4gPiA+ID4gPiBsb3N0LCBi dXQgd2hlbiB0aGUgdGltZXIgZmlyZXMsIHRoZSBjbGllbnQgbm90aWNlcyB0aGUgcmVwbHkNCj4g PiA+ID4gPiBhY3R1YWxseSBkaWQgYXJyaXZlIGFuZCB0aGUgUlBDIGNvbXBsZXRlcyBub3JtYWxs eS4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBJJ20gbG9va2luZyBpbnRvIGl0Lg0KPiA+ID4gPiAN Cj4gPiA+ID4gUm9vdCBjYXVzZToNCj4gPiA+ID4gDQo+ID4gPiA+IFRoZSB0cmFuc3BvcnQgaXMg dGVtcG9yYXJpbHkgb3V0IG9mIHJlc291cmNlcyBhbmQgcmV0dXJucw0KPiA+ID4gPiAtRU5PQlVG Uw0KPiA+ID4gPiBmcm9tIC0+c2VuZF9yZXF1ZXN0Lg0KPiA+ID4gPiANCj4gPiA+ID4gVGhlIEZT TSBzY2hlZHVsZXMgYSBkZWxheSB0aGVuIGNhbGxzIGNhbGxfdHJhbnNtaXQgYWdhaW4sIHdoaWNo DQo+ID4gPiA+IGludm9rZXMgeHBydF9wcmVwYXJlX3RyYW5zbWl0Lg0KPiA+ID4gPiANCj4gPiA+ ID4gT24gTkZTdjMgbW91bnRzLCB4cHJ0X3ByZXBhcmVfdHJhbnNtaXQgdHJpZXMgdG8gYWNxdWly ZSB0aGUNCj4gPiA+ID4gdHJhbnNwb3J0IHdyaXRlIGxvY2suDQo+ID4gPiA+IA0KPiA+ID4gPiBP biBORlN2NCBtb3VudHMsIFJQQ19UQVNLX05PX1JFVFJBTlNfVElNRU9VVCBpcyBzZXQuIFRoaXMN Cj4gPiA+ID4gY2F1c2VzDQo+ID4gPiA+IHhwcnRfcHJlcGFyZV90cmFuc21pdCB0byBzZWUgdGhh dCB0aGUgdHJhbnNwb3J0IGlzIGNvbm5lY3RlZA0KPiA+ID4gPiBhbmQNCj4gPiA+ID4gcnFfY29u bmVjdF9jb29raWUgaXMgdGhlIHNhbWUgYXMgeHBydC0+Y29ubmVjdF9jb29raWUsIHNvIGl0DQo+ ID4gPiA+IHF1ZXVlcyB0aGUgdGFzayBvbiAtPnBlbmRpbmcgYW5kIHJldHVybnMgZmFsc2UuDQo+ ID4gPiA+IA0KPiA+ID4gPiBUaGUgdHJhbnNwb3J0IG5ldmVyIHNlbmRzIHRoZSBDYWxsLCBidXQg c3RpbGwgd2FpdHMgZm9yIGENCj4gPiA+ID4gUmVwbHksDQo+ID4gPiA+IGZvcmV2ZXIuIFRoaXMg aXMgbm90IGEgYnVnIGluIHlvdXIgcGF0Y2gsIGl0IGlzIGEgcHJlLWV4aXN0aW5nDQo+ID4gPiA+ IGlzc3VlLg0KPiA+ID4gDQo+ID4gPiBTb3JyeSBmb3Igb25lIG1vcmUgcmVwbHkuLi4NCj4gPiA+ IA0KPiA+ID4gSSB0aGluayB0aGlzIGxhc3Qgc3RhdGVtZW50IGlzIGluY29ycmVjdC4gSXQgaXMg YSBidWcgaW4geW91cg0KPiA+ID4gcGF0Y2ggYWZ0ZXIgYWxsLg0KPiA+ID4gDQo+ID4gPiBJIGZv cmdvdCB0aGF0IHlvdXIgcGF0Y2ggbW92ZXMgdGhlIGxpbmUgdGhhdCBzZXRzDQo+ID4gPiANCj4g PiA+ICAgIHJlcS0+cnFfY29ubmVjdF9jb29raWUgPSB4cHJ0LT5jb25uZWN0X2Nvb2tpZTsNCj4g PiA+IA0KPiA+ID4gdG8gYmVmb3JlIHRoZSBjYWxsIHRvIC0+c2VuZF9yZXF1ZXN0LiBCdXQgcnFf Y29ubmVjdF9jb29raWUNCj4gPiA+IG11c3QgYmUgc2V0IGlmZiAtPnNlbmRfcmVxdWVzdCBpcyBz dWNjZXNzZnVsLiBNb3ZpbmcgdGhpcw0KPiA+ID4gbGluZSBzZWVtcyB0byBmaXggdGhlIGlzc3Vl Og0KPiA+ID4gDQo+ID4gPiAxMDI3ICAgICAgICAgcmVxLT5ycV94dGltZSA9IGt0aW1lX2dldCgp Ow0KPiA+ID4gMTAyOCAgICAgICAgIHN0YXR1cyA9IHhwcnQtPm9wcy0+c2VuZF9yZXF1ZXN0KHRh c2spOw0KPiA+ID4gMTAyOSAgICAgICAgIHRyYWNlX3hwcnRfdHJhbnNtaXQoeHBydCwgcmVxLT5y cV94aWQsIHN0YXR1cyk7DQo+ID4gPiAxMDMwICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7DQo+ ID4gPiAxMDMxICAgICAgICAgICAgICAgICB0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7DQo+ID4g PiAxMDMyICAgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gPiAxMDMzICAgICAgICAgfQ0KPiA+ ID4gMTAzNCAgICAgICAgIHJlcS0+cnFfY29ubmVjdF9jb29raWUgPSB4cHJ0LT5jb25uZWN0X2Nv b2tpZTsgPDw8PA0KPiA+ID4gMTAzNSAgICAgICAgIHhwcnRfaW5qZWN0X2Rpc2Nvbm5lY3QoeHBy dCk7DQo+ID4gPiANCj4gPiANCj4gPiBMZXQncyByYXRoZXIgYXBwbHkgdGhlIGF0dGFjaGVkIGZp eCAoaW5jcmVtZW50YWwgdG8gdGhlIG9yaWdpbmFsDQo+ID4gcGF0Y2gNCj4gPiBhbmQgaW50ZW5k ZWQgdG8gYmUgYXBwbGllZCB1c2luZyAnZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2gnKS4gVGhlDQo+ ID4gcmVhc29uDQo+ID4gZm9yIHdhbnRpbmcgdG8gc2V0IHRoZSBjb25uZWN0IGNvb2tpZSBiZWZv cmUgd2UgY2FsbCBzZW5kX3JlcXVlc3QoKQ0KPiA+IGlzDQo+ID4gdG8gYXZvaWQgcmFjZXMgd2l0 aCBkaXNjb25uZWN0cyB0aGF0IGhhcHBlbiBpbW1lZGlhdGVseSBhZnRlciB3ZQ0KPiA+IHNlbnQN Cj4gPiB0aGUgZGF0YSAoYnV0IGJlZm9yZSB3ZSBnZXQgcm91bmQgdG8gc2V0dGluZyB0aGUgY29v a2llKS4NCj4gPiANCj4gPiA4PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gRnJvbSAzMjZjMTI3MjdiMTc5ZDVjMmZkNDJmMzc0YTRj MGUyZDU2ZWU5MGM1IE1vbiBTZXAgMTcgMDA6MDA6MDANCj4gPiAyMDAxDQo+ID4gRnJvbTogVHJv bmQgTXlrbGVidXN0IDx0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KPiA+IERhdGU6 IFRodSwgMTQgRGVjIDIwMTcgMDc6MDU6MjcgLTA1MDANCj4gPiBTdWJqZWN0OiBbUEFUQ0hdIGZp eHVwISBTVU5SUEM6IEZpeCBhIHJhY2UgaW4gdGhlIHJlY2VpdmUgY29kZSBwYXRoDQo+ID4gDQo+ ID4gLS0tDQo+ID4gbmV0L3N1bnJwYy94cHJ0LmMgfCAzICsrLQ0KPiA+IDEgZmlsZSBjaGFuZ2Vk LCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEv bmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYw0KPiA+IGluZGV4IDVlNDI3OGU5 Y2UzNy4uMmNmNGNmMjFhODc4IDEwMDY0NA0KPiA+IC0tLSBhL25ldC9zdW5ycGMveHBydC5jDQo+ ID4gKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMNCj4gPiBAQCAtMTAyMSwxMCArMTAyMSwxMSBAQCB2 b2lkIHhwcnRfdHJhbnNtaXQoc3RydWN0IHJwY190YXNrICp0YXNrKQ0KPiA+IAkJCS8qIFR1cm4g b2ZmIGF1dG9kaXNjb25uZWN0ICovDQo+ID4gCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygm eHBydC0+dGltZXIpOw0KPiA+IAkJfQ0KPiA+ICsJCWlmICghcmVxLT5ycV9ieXRlc19zZW50KQ0K PiA+ICsJCQlyZXEtPnJxX2Nvbm5lY3RfY29va2llID0geHBydC0NCj4gPiA+Y29ubmVjdF9jb29r aWU7DQo+ID4gCX0gZWxzZSBpZiAoIXJlcS0+cnFfYnl0ZXNfc2VudCkNCj4gPiAJCXJldHVybjsN Cj4gPiANCj4gPiAtCXJlcS0+cnFfY29ubmVjdF9jb29raWUgPSB4cHJ0LT5jb25uZWN0X2Nvb2tp ZTsNCj4gPiAJcmVxLT5ycV94dGltZSA9IGt0aW1lX2dldCgpOw0KPiA+IAlzdGF0dXMgPSB4cHJ0 LT5vcHMtPnNlbmRfcmVxdWVzdCh0YXNrKTsNCj4gPiAJdHJhY2VfeHBydF90cmFuc21pdCh4cHJ0 LCByZXEtPnJxX3hpZCwgc3RhdHVzKTsNCj4gPiAtLSANCj4gPiAyLjE0LjMNCj4gDQo+IFRlc3Rl ZCB3aXRoIGEgY2xpZW50IHRoYXQgcmV0dXJucyAtRU5PQlVGUyBmcm9tIC0+c2VuZF9yZXF1ZXN0 DQo+IHdpdGggYSBsaXR0bGUgZXh0cmEgZnJlcXVlbmN5Lg0KPiANCj4gVGhpcyBkb2Vzbid0IGFw cGVhciB0byBhZGRyZXNzIHRoZSBwcm9ibGVtLiBUaGUgdHJhbnNwb3J0DQo+IGRlYWRsb2NrcyBh cyBiZWZvcmUgd2hlbiBzZW5kX3JlcXVlc3QoKSBmYWlscyB0byBzZW5kIHRoZSBSUEMuDQoNCkRv ZXMgdGhlIFJETUEgY29kZSB1cGRhdGUgdGhlIGNvbm5lY3QgY29va2llIHdoZW4gdGhlIGNvbm5l Y3Rpb24NCmJyZWFrcz8gSXQgbG9va3MgdG8gbWUgYXMgaWYgaXQgb25seSBkb2VzIHRoYXQgd2hl biB0aGUgY29ubmVjdGlvbiBpcw0KcmUtZXN0YWJsaXNoZWQuIFdlIHJlYWxseSB3YW50IGJvdGgu DQoNCj4gSSBpbWFnaW5lIHRoaXMgaXNzdWUgY291bGQgYWxzbyBpbXBhY3Qgd3JpdGUgYnVmZmVy IGV4aGF1c3Rpb24NCj4gb24gVENQLg0KDQpTZWUgbmV0L3N1bnJwYy94cHJ0c29jay5jOnhzX3Rj cF9zdGF0ZV9jaGFuZ2UoKQ0KDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xp ZW50IG1haW50YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEu Y29tDQo=