2013-02-20 13:57:09

by Bodo Stroesser

[permalink] [raw]
Subject: Re: [PATCH] sunrpc.ko: RPC cache fix races

T24gMjAgRmViIDIwMTMgMDQ6MDk6MDAgKzAxMDAgbmVpbGJAc3VzZS5kZSB3cm90ZToKCj4g
T24gMTkgRmViIDIwMTMgMTg6MDg6NDAgKzAxMDAgYnN0cm9lc3NlckB0cy5mdWppdHN1LmNv
bSB3cm90ZToKPiAKPiA+IFNlY29uZCBhdHRlbXB0IHVzaW5nIHRoZSBjb3JyZWN0IEZST00u
IFNvcnJ5IGZvciB0aGUgbm9pc2UuCj4gPiAKPiA+IAo+ID4gSGksCj4gPiAKPiA+IEkgZm91
bmQgYSBwcm9ibGVtIGluIHN1bnJwYy5rbyBvbiBhIFNMRVMxMSBTUDEgKDIuNi4zMi41OS0w
LDcuMSkgYW5kIAo+ID4gZml4ZWQgaXQgKHNlZSBmaXJzdCBwYXRjaCBpZm9yIDIuNi4zMi42
MCBiZWxvdykuCj4gPiBGb3IgdXMgdGhlIHBhdGNoIHdvcmtzIGZpbmUgKHRlc3RlZCBvbiAy
LjYuMzIuNTktMC43LjEpLgo+ID4gCj4gPiBBRkFJQ1MgZnJvbSB0aGUgY29kZSwgdGhlIHBy
b2JsZW0gc2VlbXMgdG8gcGVyc2lzdCBpbiBjdXJyZW50IGtlcm5lbCAKPiA+IHZlcnNpb25z
IGFsc28uIFRodXMsIEkgYWRkZWQgdGhlIHNlY29uZCBwYXRjaCBmb3IgMy43LjkuCj4gPiBB
cyB0aGUgc2V0dXAgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIGlzIHF1aXRlIGNvbXBsZXgs
IEkgY291bGRuJ3QgCj4gPiB0ZXN0IHRoZSBzZWNvbmQgcGF0Y2ggeWV0LiBTbyBjb25zaWRl
ciB0aGlzIG9uZSBhcyBhIFJGQy4KPiA+IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gQm9kbwo+
ID4gCj4gPiBQbGVhc2UgQ0MgbWUsIEknbSBub3Qgb24gdGhlIGxpc3QuCj4gPiAKPiA+ID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiBGcm9tOiBCb2Rv
IFN0cm9lc3NlciA8YnN0cm9lc3NlckB0cy5mdWppdHN1LmNvbT4KPiA+IERhdGU6IEZyaSwg
MDggRmViIDIwMTMKPiA+IFN1YmplY3Q6IFtQQVRDSF0gbmV0OiBzdW5ycGM6IGZpeCByYWNl
cyBpbiBSUEMgY2FjaGUKPiA+IAo+ID4gV2UgZm91bmQgdGhlIHByb2JsZW0gYW5kIHRlc3Rl
ZCB0aGUgcGF0Y2ggb24gYSBTTEVTMTEgU1AxIAo+ID4gMi42LjMyLjU5LTAuNy4xCj4gPiAK
PiA+IFRoaXMgcGF0Y2ggYXBwbGllcyB0byBsaW51eC0yLjYuMzIuNjAgKGNoYW5nZWQgbW9u
b3RvbmljX3NlY29uZHMgLS0+Cj4gPiBnZXRfc2Vjb25kcygpKQo+ID4gCj4gPiBTcG9yYWRp
Y2FsbHkgTkZTMyBSUEMgcmVxdWVzdHMgdG8gdGhlIG5mcyBzZXJ2ZXIgYXJlIGRyb3BwZWQg
ZHVlIHRvCj4gPiBjYWNoZV9jaGVjaygpIChuZXQvc3VucnBjL2NhY2hlLmMpIHJldHVybmlu
ZyAtRVRJTUVET1VUIGZvciBhbiBlbnRyeSAKPiA+IG9mIHRoZSAiYXV0aC51bml4LmdpZCIg
Y2FjaGUuCj4gPiBJbiB0aGlzIGNhc2UsIG5vIE5GUyByZXBseSBpcyBzZW50IHRvIHRoZSBj
bGllbnQuCj4gPiAKPiA+IFRoZSByZWFzb24gZm9yIHRoZSBkcm9wcGVkIHJlcXVlc3RzIGFy
ZSByYWNlcyBpbiBjYWNoZV9jaGVjaygpIHdoZW4KPiA+IGNhY2hlX21ha2VfdXBjYWxsKCkg
cmV0dXJucyAtRUlOVkFMIChiZWNhdXNlIGl0IGlzIGNhbGxlZCBmb3IgYSBjYWNoZSAKPiA+
IHdpdGhvdXQgcmVhZGVycykgYW5kIGNhY2hlX2NoZWNrKCkgdGhlcmVmb3JlIHJlZnJlc2hl
cyB0aGUgY2FjaGUgZW50cnkgCj4gPiAocnYgPT0gLUVBR0FJTikuCj4gPiAKPiA+IFRoZXJl
IGFyZSB0aHJlZSBkZXRhaWxzIHRoYXQgbmVlZCB0byBiZSBjaGFuZ2VkOgo+ID4gIDEpIGNh
Y2hlX3JldmlzaXRfcmVxdWVzdCgpIG11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgY2FjaGVf
ZnJlc2hfbG9ja2VkKCkKPiA+ICAgICBoYXMgdXBkYXRlZCB0aGUgY2FjaGUgZW50cnksIGFz
IGNhY2hlX3JldmlzaXRfcmVxdWVzdCgpIHdha2VzIHVwCj4gPiAgICAgdGhyZWFkcyB3YWl0
aW5nIGZvciB0aGUgY2FjaGUgZW50cnkgdG8gYmUgdXBkYXRlZC4KPiAKPiBUaGlzIGNlcnRh
aW5seSBzZWVtcyBjb3JyZWN0LiAgSXQgaXMgd3JvbmcgdG8gY2FsbCBjYWNoZV9yZXZpc2l0
X3JlcXVlc3QoKSBzbyBlYXJseS4KPiAKPiA+ICAgICBUaGUgZXhwbGljaXQgY2FsbCB0byBj
YWNoZV9yZXZpc2l0X3JlcXVlc3QoKSBpcyBub3QgbmVlZGVkLCBhcwo+ID4gICAgIGNhY2hl
X2ZyZXNoX3VubG9ja2VkKCkgY2FsbHMgaXQgYW55d2F5Lgo+IAo+IEJ1dCBjYWNoZV9mcmVz
aF91bmxvY2tlZCBpcyBvbmx5IGNhbGxlZCBpZiAicnYgPT0gLUVBR0FJTiIsIGhvd2V2ZXIg
d2UgYWxzbyBuZWVkIHRvIGNhbGwgaXQgaW4gdGhlIGNhc2Ugd2hlcmUgImFnZSA+IHJlZnJl
c2hfYWdlLzIiIC0gaXQgbXVzdCBhbHdheXMgYmUgY2FsbGVkIGFmdGVyIGNsZWFyaW5nIENB
Q0hFX1BFTkRJTkcuCj4gCj4gQWxzbywgY2FjaGVfZnJlc2hfdW5sb2NrZWQoKSBvbmx5IGNh
bGxzIGNhY2hlX3JldmlzaXRfcmVxdWVzdCgpIGlmIENBQ0hFX1BFTkRJTkcgaXMgc2V0LCBi
dXQgd2UgaGF2ZSBqdXN0IGNsZWFyZWQgaXQhICBTb21lIGRlZmluaXRlbHkgc29tZXRoaW5n
IHdyb25nIGhlcmUuCj4gKE5vdGUgdGhhdCBJJ20gbG9va2luZyBhdCB0aGUgU0xFUyAyLjYu
MzIgY29kZSBhdCB0aGUgbW9tZW50LCBtYWlubGluZSBpcyBhIGJpdCBkaWZmZXJlbnQpLgo+
IAo+IAo+ID4gICAgIChCdXQgaW4gY2FzZSBvZiBub3QgdXBkYXRpbmcgdGhlIGNhY2hlIGVu
dHJ5LCBjYWNoZV9yZXZpc2l0X3JlcXVlc3QoKQo+ID4gICAgIG11c3QgYmUgY2FsbGVkLiBU
aHVzLCB3ZSB1c2UgYSBmYWxsIHRocm91Z2ggaW4gdGhlICJjYXNlIikuCj4gCj4gSG1tLi4u
IEkgZG9uJ3QgbGlrZSBjYXNlIGZhbGx0aHJvdWdocyB1bmxlc3MgdGhleSBoYXZlIG5pY2Ug
YmlnIGNvbW1lbnRzOgo+ICAgICAvKiBGQUxMVEhST1VHSCAqLwo+IG9yIHNpbWlsYXIuIDot
KQo+IAo+ID4gIDIpIENBQ0hFX1BFTkRJTkcgbXVzdCBub3QgYmUgY2xlYXJlZCBiZWZvcmUg
Y2FjaGVfZnJlc2hfbG9ja2VkKCkgaGFzCj4gPiAgICAgdXBkYXRlZCB0aGUgY2FjaGUgZW50
cnksIGFzIGNhY2hlX2RlZmVyX3JlcSgpIGNhbiByZXR1cm4gd2l0aG91dCByZWFsbHkKPiA+
ICAgICBzbGVlcGluZyBpZiBpdCBkZXRlY3RzIENBQ0hFX1BFTkRJTkcgdW5zZXQuCj4gCj4g
QWdyZWVkLiAgU28gd2Ugc2hvdWxkIGxlYXZlIHRoZSBjbGVhcmluZyBvZiBDQUNIRV9QRU5E
SU5HIHRvIGNhY2hlX2ZyZXNoX3VubG9ja2VkKCkuCj4gCj4gCj4gPiAgICAgKEluIGNhc2Ug
b2Ygbm90IHVwZGF0aW5nIHRoZSBjYWNoZSBlbnRyeSBhZ2FpbiB3ZSB1c2UgdGhlIGZhbGwg
Cj4gPiB0aHJvdWdoKQo+ID4gIDMpIEltYWdpbmUgYSB0aHJlYWQgdGhhdCBjYWxscyBjYWNo
ZV9jaGVjaygpIGFuZCBnZXRzIHJ2ID0gLUVOT0VOVCBmcm9tCj4gPiAgICAgY2FjaGVfaXNf
dmFsaWQoKS4gVGhlbiBpdCBzZXRzIENBQ0hFX1BFTkRJTkdzIGFuZCBjYWxscwo+ID4gICAg
IGNhY2hlX21ha2VfdXBjYWxsKCkuCj4gPiAgICAgV2UgYXNzdW1lIHRoYXQgbWVhbndoaWxl
IGdldF9zZWNvbmRzKCkgYWR2YW5jZXMgdG8gdGhlIG5leHQKPiA+ICAgICBzZWMuIGFuZCBh
IHNlY29uZCB0aHJlYWQgYWxzbyBjYWxscyBjYWNoZV9jaGVjaygpLiBJdCBnZXRzIC1FQUdB
SU4gZnJvbQo+ID4gICAgIGNhY2hlX2lzX3ZhbGlkKCkgZm9yIHRoZSBzYW1lIGNhY2hlIGVu
dHJ5LiBBcyBDQUNIRV9QRU5ESU5HIHN0aWxsIGlzCj4gPiAgICAgc2V0LCBpdCBjYWxscyBj
YWNoZV9kZWZlcl9yZXEoKSBpbW1lZGlhdGVseSBhbmQgd2FpdHMgZm9yIGEgd2FrZXVwIGZy
b20KPiA+ICAgICB0aGUgZmlyc3QgdGhyZWFkLgo+ID4gICAgIEFmdGVyIGNhY2hlX21ha2Vf
dXBjYWxsKCkgcmV0dXJuZWQgLUVJTlZBTCwgdGhlIGZpcnN0IHRocmVhZCBkb2VzIG5vdAo+
ID4gICAgIHVwZGF0ZSB0aGUgY2FjaGUgZW50cnkgYXMgaXQgaGFkIGdvdCBydiA9IC1FTk9F
TlQsIGJ1dCB3YWtlcyB1cCB0aGUKPiA+ICAgICBzZWNvbmQgdGhyZWFkIGJ5IGNhbGxpbmcg
Y2FjaGVfcmV2aXNpdF9yZXF1ZXN0KCkuCj4gPiAgICAgVGhyZWFkIHR3byB3YWtlcyB1cCwg
Y2FsbHMgY2FjaGVfaXNfdmFsaWQoKSBhbmQgYWdhaW4gZ2V0cyAtRUFHQUlOLgo+ID4gICAg
IFRodXMsIHRoZSByZXN1bHQgb2YgdGhlIHNlY29uZCBjYWNoZV9jaGVjaygpIGlzIC1FVElN
RURPVVQgYW5kIHRoZQo+ID4gICAgIE5GUyByZXF1ZXN0IGlzIGRyb3BwZWQuCj4gCj4gWWVw
LCB0aGF0J3Mgbm90IHNvIGdvb2QuLi4uCj4gCj4gCj4gPiAgICAgVG8gc29sdmUgdGhpcywg
dGhlIGNhY2hlIGVudHJ5IG5vdyBpcyB1cGRhdGVkIG5vdCBvbmx5IGlmIHJ2ID09IC1FQUdB
SU4KPiA+ICAgICBidXQgaWYgcnYgPT0gLUVOT0VOVCBhbHNvLiBUaGlzIGlzIGEgc3VmZmlj
aWVudCB3b3JrYXJvdW5kLCBhcyB0aGUKPiA+ICAgICBmaXJzdCB0aHJlYWQgd291bGQgaGF2
ZSB0byBzdGF5IGluIGNhY2hlX2NoZWNrKCkgYmV0d2VlbiBpdHMgY2FsbCB0bwo+ID4gICAg
IGNhY2hlX2lzX3ZhbGlkKCkgYW5kIGNsZWFyaW5nIENBQ0hFX1BFTkRJTkcgZm9yIG1vcmUg
dGhhbiA2MCBzZWNvbmRzCj4gPiAgICAgdG8gYnJlYWsgdGhlIHdvcmthcm91bmQuCj4gCj4g
U3RpbGwsIGl0IGlzbid0IG5pY2UgdG8ganVzdCBoYXZlIGEgd29yay1hcm91bmQuICBJdCB3
b3VsZCBiZSBiZXN0IHRvIGhhdmUgYSBmaXguCj4gVGhlIGtleSBwcm9ibGVtIGhlcmUgaXMg
dGhhdCBjYWNoZV9pc192YWxpZCgpIGlzIHRpbWUtc2Vuc2l0aXZlLiAgVGhpcyBoYXZlIGJl
ZW4gYWRkcmVzcyBpbiBtYWlubGluZSAtIGNhY2hlX2lzX3ZhbGlkIGRvZXNuJ3QgZGVwZW5k
IG9uIHRoZSBjdXJyZW50IHRpbWUgdGhlcmUuCgpTbywgdGhlIHNvbHV0aW9uIHdvdWxkIGJl
IGEgYmFja3BvcnQgb2YgdGhlIGN1cnJlbnQgbWFpbmxpbmUgY29kZSAuLi4KCkFueXdheSwg
SSB0aGluayBmb3IgU0xFUzExIFNQMSBhbmQgMi42LjMyLjYwIHRoZSB3b3JrLWFyb3VuZCB3
b3VsZCBiZSBzdWZmaWNpZW50LgpCVFc6IGl0IGhhcyB0aGUgcG9zaXRpdmUgc2lkZSBlZmZl
Y3QsIHRoYXQgLSB3aGlsZSBhIGNhY2hlIGVudHJ5IGlzIGluIGl0cyBzZWNvbmQKaGFsZiBv
ZiBsaWZlIC0gbm8gbG9uZ2VyIGVhY2ggY2FjaGVfY2hlY2soKSB0cmllcyB0byBkbyBhIGNh
Y2hlX21ha2VfdXBjYWxsKCkuCgoKPiAKPiAKPiA+ICAgICAKPiA+IFNpZ25lZC1vZmYtYnk6
IEJvZG8gU3Ryb2Vzc2VyIDxic3Ryb2Vzc2VyQHRzLmZ1aml0c3UuY29tPgo+ID4gLS0tCj4g
PiAKPiA+IC0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYwkyMDEyLTA4LTA4IDIxOjM1OjA5LjAw
MDAwMDAwMCArMDIwMAo+ID4gKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCTIwMTMtMDItMDgg
MTQ6Mjk6NDEuMDAwMDAwMDAwICswMTAwCj4gPiBAQCAtMjMzLDE1ICsyMzMsMTQgQEAgaW50
IGNhY2hlX2NoZWNrKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldAo+ID4gIAkJaWYgKCF0ZXN0
X2FuZF9zZXRfYml0KENBQ0hFX1BFTkRJTkcsICZoLT5mbGFncykpIHsKPiA+ICAJCQlzd2l0
Y2ggKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsKPiA+ICAJCQljYXNlIC1FSU5W
QUw6Cj4gPiAtCQkJCWNsZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwo+ID4g
LQkJCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaCk7Cj4gPiAtCQkJCWlmIChydiA9PSAtRUFH
QUlOKSB7Cj4gPiArCQkJCWlmIChydiA9PSAtRUFHQUlOIHx8IHJ2ID09IC1FTk9FTlQpIHsK
PiA+ICAJCQkJCXNldF9iaXQoQ0FDSEVfTkVHQVRJVkUsICZoLT5mbGFncyk7Cj4gPiAgCQkJ
CQljYWNoZV9mcmVzaF9sb2NrZWQoaCwgZ2V0X3NlY29uZHMoKStDQUNIRV9ORVdfRVhQSVJZ
KTsKPiA+ICsJCQkJCWNsZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwo+ID4g
IAkJCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQoaCwgZGV0YWlsKTsKPiA+ICAJCQkJCXJ2ID0g
LUVOT0VOVDsKPiA+ICsJCQkJCWJyZWFrOwo+ID4gIAkJCQl9Cj4gPiAtCQkJCWJyZWFrOwo+
ID4gIAo+ID4gIAkJCWNhc2UgLUVBR0FJTjoKPiA+ICAJCQkJY2xlYXJfYml0KENBQ0hFX1BF
TkRJTkcsICZoLT5mbGFncyk7Cj4gCj4gSSBhZ3JlZSB3aXRoIHNvbWUgb2YgdGhpcy4uLi4K
PiBNYXliZToKPiAKPiAgIHN3aXRjaChjYWNoZV9tYWtlX3VwY2FsbChkZXRhaWwsIGgpKSB7
Cj4gICBjYXNlIC1FSU5WQUw6Cj4gICAgICAgICBpZiAocnYpIHsKPiAJCXNldF9iaXQoQ0FD
SEVfTkVHQVRJVkUsICZoLT5mbGFncyk7Cj4gCQljYWNoZV9mcmVzaF9sb2NrZWQoaCwgZ2V0
X3NlY29uZHMoKSArIENBQ0hFX05FV19FWFBJUlkpOwo+IAkJcnYgPSAtRU5PRU5UOwo+IAl9
Cj4gCS8qIEZBTExUSFJPVUdIICovCj4gICBjYXNlIC1FQUdBSU46Cj4gCWNhY2hlX2ZyZXNo
X3VubG9ja2VkKGgsIGRldGFpbCk7Cj4gICB9CgpJIGFncmVlLCB5b3VyIHBhdGNoIGlzIG9i
dmlvdXNseSBiZXR0ZXIgdGhhbiB0aGUgbWluZS4KQnV0IGxldCBtZSBzdWdnZXN0IG9uZSBs
aXR0bGUgY2hhbmdlOiBJIHdvdWxkIGxpa2UgdG8gc3Vic3RpdHV0ZQpjYWNoZV9mcmVzaF91
bmxvY2tlZCgpIGJ5IGNsZWFyX2JpdCgpIGFuZCBjYWNoZV9yZXZpc2l0X3JlcXVlc3QoKSwK
YXMgdGhlIGNhbGwgdG8gY2FjaGVfZGVxdWV1ZSgpIGluIGNhY2hlX2ZyZXNoX3VubG9ja2Vk
KCkgc2VlbXMgdG8KYmUgb2Jzb2xldGUgaGVyZToKCiAgIHN3aXRjaChjYWNoZV9tYWtlX3Vw
Y2FsbChkZXRhaWwsIGgpKSB7CiAgIGNhc2UgLUVJTlZBTDoKCWlmIChydikgewogCQlzZXRf
Yml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpOwogCQljYWNoZV9mcmVzaF9sb2NrZWQo
aCwgZ2V0X3NlY29uZHMoKSArIENBQ0hFX05FV19FWFBJUlkpOwoJCXJ2ID0gLUVOT0VOVDsK
IAl9CgkvKiBGQUxMVEhST1VHSCAqLwogICBjYXNlIC1FQUdBSU46CgljbGVhcl9iaXQoQ0FD
SEVfUEVORElORywgJmgtPmZsYWdzKTsKCWNhY2hlX3JldmlzaXRfcmVxdWVzdChoLCBkZXRh
aWwpOwogICB9Cgo+IAo+IFRob3VnaCBpdCBpc24ndCBnb29kIHRoYXQgY2FjaGVfZnJlc2hf
bG9ja2VkKCkgaXMgYmVpbmcgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyBhIGxvY2shICBNYXli
ZSB3ZSBzaG91bGQgaW1wb3J0IHRyeV90b19uZWdhdGVfZW50cnkoKSBmcm9tIG1haW5saW5l
LgoKT3Igc2ltcGx5IGFkZCB3cml0ZV9sb2NrKCkgYW5kIHdyaXRlX3VubG9jaygpIGFyb3Vu
ZCB0aGUgc2V0X2JpdCgpIGFuZCBjYWNoZV9mcmVzaF9sb2NrZWQoKQoKCj4gCj4gPiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4gRnJvbTogQm9kbyBT
dHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20+Cj4gPiBEYXRlOiBGcmksIDA4
IEZlYiAyMDEzCj4gPiBTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc3VucnBjOiBmaXggcmFjZXMg
aW4gUlBDIGNhY2hlCj4gPiAKPiA+IFRoaXMgcGF0Y2ggYXBwbGllcyB0byBTTEVTIDExIFNQ
MiBsaW51eC0zLjAuNTEtMC43LjkgYW5kIGFsc28gdG8gCj4gPiB2YW5pbGxhIGxpbnV4LTMu
Ny45Cj4gPiAKPiA+IEl0IGlzIHVudGVzdGVkIGFuZCBpcyBvbmx5IGJhc2VkIG9uIGEgY29k
ZSByZXZpZXcgYWZ0ZXIgd2UgYW5hbHl6ZWQgCj4gPiB0aGUgcmVhc29uIGZvciBORlMgcmVx
dWVzdHMgYmVpbmcgZHJvcHBlZCBvbiBhCj4gPiBTTEVTMTEgU1AxIChsaW51eC0yLjYuMzIu
NTktMC43LjEpCj4gPiAKPiA+IFNwb3JhZGljYWxseSBORlMzIFJQQyByZXF1ZXN0cyB0byB0
aGUgbmZzIHNlcnZlciBhcmUgZHJvcHBlZCBkdWUgdG8KPiA+IGNhY2hlX2NoZWNrKCkgKG5l
dC9zdW5ycGMvY2FjaGUuYykgcmV0dXJuaW5nIC1FVElNRURPVVQgZm9yIGFuIGVudHJ5IAo+
ID4gb2YgdGhlICJhdXRoLnVuaXguZ2lkIiBjYWNoZS4KPiA+IEluIHRoaXMgY2FzZSwgbm8g
TkZTIHJlcGx5IGlzIHNlbnQgdG8gdGhlIGNsaWVudC4KPiA+IAo+ID4gVGhlIHJlYXNvbiBm
b3IgdGhlIGRyb3BwZWQgcmVxdWVzdHMgYXJlIHJhY2VzIGluIGNhY2hlX2NoZWNrKCkgd2hl
bgo+ID4gY2FjaGVfbWFrZV91cGNhbGwoKSByZXR1cm5zIC1FSU5WQUwgKGJlY2F1c2UgaXQg
aXMgY2FsbGVkIGZvciBhIGNhY2hlIAo+ID4gd2l0aG91dCByZWFkZXJzKSBhbmQgY2FjaGVf
Y2hlY2soKSB0aGVyZWZvcmUgcmVmcmVzaGVzIHRoZSBjYWNoZSBlbnRyeSAKPiA+IChydiA9
PSAtRUFHQUlOKS4KPiA+IAo+ID4gVGhlcmUgYXJlIHR3byBkZXRhaWxzIHRoYXQgbmVlZCB0
byBiZSBjaGFuZ2VkOgo+ID4gIDEpIGNhY2hlX3JldmlzaXRfcmVxdWVzdCgpIG11c3Qgbm90
IGJlIGNhbGxlZCBiZWZvcmUgY2FjaGVfZnJlc2hfbG9ja2VkKCkKPiA+ICAgICBoYXMgdXBk
YXRlZCB0aGUgY2FjaGUgZW50cnksIGFzIGNhY2hlX3JldmlzaXRfcmVxdWVzdCgpIHdha2Vz
IHVwCj4gPiAgICAgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGUgY2FjaGUgZW50cnkgdG8gYmUg
dXBkYXRlZC4KPiA+ICAgICBUaGUgZXhwbGljaXQgY2FsbCB0byBjYWNoZV9yZXZpc2l0X3Jl
cXVlc3QoKSBpcyBub3QgbmVlZGVkLCBhcwo+ID4gICAgIGNhY2hlX2ZyZXNoX3VubG9ja2Vk
KCkgY2FsbHMgaXQgYW55d2F5Lgo+ID4gICAgIChCdXQgaW4gY2FzZSBvZiBub3QgdXBkYXRp
bmcgdGhlIGNhY2hlIGVudHJ5LCBjYWNoZV9yZXZpc2l0X3JlcXVlc3QoKQo+ID4gICAgIG11
c3QgYmUgY2FsbGVkKS4KPiA+ICAyKSBDQUNIRV9QRU5ESU5HIG11c3Qgbm90IGJlIGNsZWFy
ZWQgYmVmb3JlIGNhY2hlX2ZyZXNoX2xvY2tlZCgpIGhhcwo+ID4gICAgIHVwZGF0ZWQgdGhl
IGNhY2hlIGVudHJ5LCBhcyBjYWNoZV93YWl0X3JlcSgpIGNhbGxlZCBieQo+ID4gICAgIGNh
Y2hlX2RlZmVyX3JlcSgpIGNhbiByZXR1cm4gd2l0aG91dCByZWFsbHkgc2xlZXBpbmcgaWYg
aXQgZGV0ZWN0cwo+ID4gICAgIENBQ0hFX1BFTkRJTkcgdW5zZXQuCj4gPiAKPiA+IFNpZ25l
ZC1vZmYtYnk6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ryb2Vzc2VyQHRzLmZ1aml0c3UuY29tPgo+
ID4gLS0tCj4gPiAKPiA+IC0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYwkyMDEzLTAyLTA4IDE1
OjU2OjA3LjAwMDAwMDAwMCArMDEwMAo+ID4gKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCTIw
MTMtMDItMDggMTY6MDQ6MzIuMDAwMDAwMDAwICswMTAwCj4gPiBAQCAtMjMwLDExICsyMzAs
MTQgQEAgc3RhdGljIGludCB0cnlfdG9fbmVnYXRlX2VudHJ5KHN0cnVjdCBjYQo+ID4gIAly
diA9IGNhY2hlX2lzX3ZhbGlkKGRldGFpbCwgaCk7Cj4gPiAgCWlmIChydiAhPSAtRUFHQUlO
KSB7Cj4gPiAgCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKPiA+ICsJCWNs
ZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwo+ID4gKwkJY2FjaGVfcmV2aXNp
dF9yZXF1ZXN0KGgpOwo+IAo+IFRoaXMgc2hvdWxkIGp1c3QgYmUgY2FjaGVfZnJlc2hfdW5s
b2NrZWQoKSwgYXMgYmVsb3cuCj4gPiAgCQlyZXR1cm4gcnY7Cj4gPiAgCX0KPiA+ICAJc2V0
X2JpdChDQUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKPiA+ICAJY2FjaGVfZnJlc2hfbG9j
a2VkKGgsIHNlY29uZHNfc2luY2VfYm9vdCgpK0NBQ0hFX05FV19FWFBJUlkpOwo+ID4gIAl3
cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKPiA+ICsJY2xlYXJfYml0KENBQ0hF
X1BFTkRJTkcsICZoLT5mbGFncyk7Cj4gQ2xlYXJpbmcgdGhpcyBiaXQgaXMgd3JvbmcgIC0g
Y2FjaGVfZnJzaF91bmxvY2tlZCB3aWxsIGRvIHRoYXQuCgpZZXMuIE15IGZhdWx0LiBCdXQg
aW5zdGVhZCBvZiBzdHJpcHBpbmcgdGhlIGNsZWFyX2JpdCgpLCBJJ2QgYmV0dGVyIGxpa2UK
dG8gY2hhbmdlIHRoZSBmb2xsb3dpbmcgY2FjaGVfZnJlc2hfdW5sb2NrZWQoKSB0byBjYWNo
ZV9yZXZpc2l0X3JlcXVlc3QoKQoKPiAKPiA+ICAJY2FjaGVfZnJlc2hfdW5sb2NrZWQoaCwg
ZGV0YWlsKTsKPiA+ICAJcmV0dXJuIC1FTk9FTlQ7Cj4gPiAgfQo+IFNvIG1heWJlOgo+IAo+
IHN0YXRpYyBpbnQgdHJ5X3RvX25lZ2F0ZV9lbnRyeSguLi4uKQo+IHsKPiAJaW50IHJ2Owo+
IAo+IAl3cml0ZV9sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7Cj4gCXJ2ID0gY2FjaGVfaXNf
dmFsaWQoZGV0YWlsLCBoKTsKPiAJaWYgKHJ2ID09IC1FQUdBSU4pIHsKPiAJCXNldF9iaXQo
Q0FDSEVfTkVHQVRJVkUsICZoLT5mbGFncyk7Cj4gCQljYWNoZV9mcmVzaF9sb2NrZWQoaCwg
Li4uLik7Cj4gCQlydiA9IC1FTk9FTlQ7Cj4gCX0KPiAJd3JpdGVfdW5sb2NrKCZkZXRhaWwt
Pmhhc2hfbG9jayk7Cj4gCWNhY2hlX2ZyZXNoX3VubG9ja2VkKGgsIGRldGFpbCk7CgpGb3Ig
dGhlIHNhbWUgcmVhc29uIGFzIHdyaXR0ZW4gYWJvdmUsIEknZCBiZXR0ZXIgbGlrZQpjbGVh
cl9iaXQoKSBhbmQgY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KCkKCj4gCXJldHVybiBydjsKPiB9
Cj4gPz8/Pwo+IAo+IAo+ID4gQEAgLTI3NSw4ICsyNzgsNiBAQCBpbnQgY2FjaGVfY2hlY2so
c3RydWN0IGNhY2hlX2RldGFpbCAqZGV0Cj4gPiAgCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQo
Q0FDSEVfUEVORElORywgJmgtPmZsYWdzKSkgewo+ID4gIAkJCXN3aXRjaCAoY2FjaGVfbWFr
ZV91cGNhbGwoZGV0YWlsLCBoKSkgewo+ID4gIAkJCWNhc2UgLUVJTlZBTDoKPiA+IC0JCQkJ
Y2xlYXJfYml0KENBQ0hFX1BFTkRJTkcsICZoLT5mbGFncyk7Cj4gPiAtCQkJCWNhY2hlX3Jl
dmlzaXRfcmVxdWVzdChoKTsKPiA+ICAJCQkJcnYgPSB0cnlfdG9fbmVnYXRlX2VudHJ5KGRl
dGFpbCwgaCk7Cj4gPiAgCQkJCWJyZWFrOwo+ID4gIAkJCWNhc2UgLUVBR0FJTjoKPiAKPiBZ
ZXMsIHRob3NlIGxpbmVzIHNob3VsZCBkZWZpbml0ZWx5IGJlIHJlbW92ZWQuCj4gCj4gU28g
bWF5YmUgdGhpcyBhZ2FpbnN0IG1haW5saW5lOgo+IAo+IGRpZmYgLS1naXQgYS9uZXQvc3Vu
cnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMgaW5kZXggOWFmYTQzOS4uNzI5NjY0
NCAxMDA2NDQKPiAtLS0gYS9uZXQvc3VucnBjL2NhY2hlLmMKPiArKysgYi9uZXQvc3VucnBj
L2NhY2hlLmMKPiBAQCAtMjI4LDEyICsyMjgsMTEgQEAgc3RhdGljIGludCB0cnlfdG9fbmVn
YXRlX2VudHJ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hl
YWQgKmgKPiAgCj4gIAl3cml0ZV9sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7Cj4gIAlydiA9
IGNhY2hlX2lzX3ZhbGlkKGRldGFpbCwgaCk7Cj4gLQlpZiAocnYgIT0gLUVBR0FJTikgewo+
IC0JCXdyaXRlX3VubG9jaygmZGV0YWlsLT5oYXNoX2xvY2spOwo+IC0JCXJldHVybiBydjsK
PiArCWlmIChydiA9PSAtRUFHQUlOKSB7Cj4gKwkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwg
JmgtPmZsYWdzKTsKPiArCQljYWNoZV9mcmVzaF9sb2NrZWQoaCwgc2Vjb25kc19zaW5jZV9i
b290KCkrQ0FDSEVfTkVXX0VYUElSWSk7Cj4gKwkJcnYgPSAtRU5PRU5UOwo+ICAJfQo+IC0J
c2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKPiAtCWNhY2hlX2ZyZXNoX2xv
Y2tlZChoLCBzZWNvbmRzX3NpbmNlX2Jvb3QoKStDQUNIRV9ORVdfRVhQSVJZKTsKPiAgCXdy
aXRlX3VubG9jaygmZGV0YWlsLT5oYXNoX2xvY2spOwo+ICAJY2FjaGVfZnJlc2hfdW5sb2Nr
ZWQoaCwgZGV0YWlsKTsKPiAgCXJldHVybiAtRU5PRU5UOwo+IEBAIC0yNzUsMTMgKzI3NCwx
MCBAQCBpbnQgY2FjaGVfY2hlY2soc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLAo+ICAJ
CWlmICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpKSB7Cj4g
IAkJCXN3aXRjaCAoY2FjaGVfbWFrZV91cGNhbGwoZGV0YWlsLCBoKSkgewo+ICAJCQljYXNl
IC1FSU5WQUw6Cj4gLQkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdzKTsK
PiAtCQkJCWNhY2hlX3JldmlzaXRfcmVxdWVzdChoKTsKPiAgCQkJCXJ2ID0gdHJ5X3RvX25l
Z2F0ZV9lbnRyeShkZXRhaWwsIGgpOwo+ICAJCQkJYnJlYWs7Cj4gIAkJCWNhc2UgLUVBR0FJ
TjoKPiAtCQkJCWNsZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwo+IC0JCQkJ
Y2FjaGVfcmV2aXNpdF9yZXF1ZXN0KGgpOwo+ICsJCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQo
aCwgZGV0YWlsKTsKCkFuZCBhZ2FpbjogSSBkb24ndCBsaWtlIGl0IDstKQoKPiAgCQkJCWJy
ZWFrOwo+ICAJCQl9Cj4gIAkJfQo+IAo+IAo+IElzIHRoYXQgY29udmluY2luZz8KCk9mIGNv
dXJzZS4KCkRvIHlvdSB0aGluayBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byB1c2UgdGhl
IHNhbWUgY29kZSBzdHJ1Y3R1cmUgYXMgc3VnZ2VzdGVkIGZvciAyLjYuMzIuNjAgPwpJZiBz
bywgdGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBwYXRjaDoKCi0tLSBhL25l
dC9zdW5ycGMvY2FjaGUuYwkyMDEzLTAyLTIwIDEzOjU2OjMwLjAwMDAwMDAwMCArMDEwMAor
KysgYi9uZXQvc3VucnBjL2NhY2hlLmMJMjAxMy0wMi0yMCAxNDowNTowOC4wMDAwMDAwMDAg
KzAxMDAKQEAgLTIyMiwyMyArMjIyLDYgQEAKIAl9CiB9Cgotc3RhdGljIGludCB0cnlfdG9f
bmVnYXRlX2VudHJ5KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hl
X2hlYWQgKmgpCi17Ci0JaW50IHJ2OwotCi0Jd3JpdGVfbG9jaygmZGV0YWlsLT5oYXNoX2xv
Y2spOwotCXJ2ID0gY2FjaGVfaXNfdmFsaWQoZGV0YWlsLCBoKTsKLQlpZiAocnYgIT0gLUVB
R0FJTikgewotCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKLQkJcmV0dXJu
IHJ2OwotCX0KLQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpOwotCWNhY2hl
X2ZyZXNoX2xvY2tlZChoLCBzZWNvbmRzX3NpbmNlX2Jvb3QoKStDQUNIRV9ORVdfRVhQSVJZ
KTsKLQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKLQljYWNoZV9mcmVzaF91
bmxvY2tlZChoLCBkZXRhaWwpOwotCXJldHVybiAtRU5PRU5UOwotfQotCiAvKgogICogVGhp
cyBpcyB0aGUgZ2VuZXJpYyBjYWNoZSBtYW5hZ2VtZW50IHJvdXRpbmUgZm9yIGFsbAogICog
dGhlIGF1dGhlbnRpY2F0aW9uIGNhY2hlcy4KQEAgLTI3NSwxMCArMjU4LDE1IEBACiAJCWlm
ICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpKSB7CiAJCQlz
d2l0Y2ggKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsKIAkJCWNhc2UgLUVJTlZB
TDoKLQkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdzKTsKLQkJCQljYWNo
ZV9yZXZpc2l0X3JlcXVlc3QoaCk7Ci0JCQkJcnYgPSB0cnlfdG9fbmVnYXRlX2VudHJ5KGRl
dGFpbCwgaCk7Ci0JCQkJYnJlYWs7CisJCQkJd3JpdGVfbG9jaygmZGV0YWlsLT5oYXNoX2xv
Y2spOworCQkJCXJ2ID0gY2FjaGVfaXNfdmFsaWQoZGV0YWlsLCBoKTsKKwkJCQlpZiAocnYg
PT0gLUVBR0FJTikgeworCQkJCQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3Mp
OworCQkJCQljYWNoZV9mcmVzaF9sb2NrZWQoaCwgc2Vjb25kc19zaW5jZV9ib290KCkrQ0FD
SEVfTkVXX0VYUElSWSk7CisJCQkJCXJ2ID0gLUVOT0VOVDsKKwkJCQl9CisJCQkJd3JpdGVf
dW5sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJ
CWNhc2UgLUVBR0FJTjoKIAkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdz
KTsKIAkJCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaCk7CgoKCj4gCj4gVGhhbmtzIGEgbG90
IGZvciB5b3VyIHZlcnkgdGhvcm91Z2ggYW5hbHlzaXMhCj4gCj4gTmVpbEJyb3duCj4gCgpU
aGFuayB5b3UgZm9yIHRoZSBxdWljayByZXNwb25zZSEKCkJlc3QgcmVnYXJkcywKQm9kbwo=