2014-09-24 11:07:06

by Strösser, Bodo

[permalink] [raw]
Subject: rpc.mountd can be blocked by a bad client

Hello,

a few days ago we had some trouble with a NFS server. The clients most of the time no longer
could mount any shares, but in rare cases they had success.

We found out, that during the times when mounts failed, rpc.mountd hung on a write() to a TCP
socket. netstat showed, that Send-Q was full and Recv-Q counted up slowly. After a long time
the write ended with an error ("TCP timeout" IIRC) and rpc.mountd worked normally for a short
while until it again hung on write() for the same reason. The problem was caused by a MTU size
configured wrong. So, one single bad client (or as much clients as the number of threads used
by rpc.mountd) can block rpc.mountd entirely.

But what will happen, if someone intentionally sends RPC requests, but doesn't read() the
answers? I wrote a small tool to test this situation. It fires DUMP requests to rpc.mountd as
fast as possible, but does not read from the socket. The result is the same as with the
problem above: rpc.mountd hangs in write() and no longer responds to other requests while no
TCP timeout breaks up this situation.

So it's quite easy to intentionally block rpc.mountd from remote.

Please CC me, I'm not on the list.

Best regards,
Bodo


2014-09-25 00:32:18

by NeilBrown

[permalink] [raw]
Subject: Re: rpc.mountd can be blocked by a bad client

On Wed, 24 Sep 2014 12:57:09 +0200 "Strösser, Bodo"
<[email protected]> wrote:

> Hello,
>
> a few days ago we had some trouble with a NFS server. The clients most of the time no longer
> could mount any shares, but in rare cases they had success.
>
> We found out, that during the times when mounts failed, rpc.mountd hung on a write() to a TCP
> socket. netstat showed, that Send-Q was full and Recv-Q counted up slowly. After a long time
> the write ended with an error ("TCP timeout" IIRC) and rpc.mountd worked normally for a short
> while until it again hung on write() for the same reason. The problem was caused by a MTU size
> configured wrong. So, one single bad client (or as much clients as the number of threads used
> by rpc.mountd) can block rpc.mountd entirely.
>
> But what will happen, if someone intentionally sends RPC requests, but doesn't read() the
> answers? I wrote a small tool to test this situation. It fires DUMP requests to rpc.mountd as
> fast as possible, but does not read from the socket. The result is the same as with the
> problem above: rpc.mountd hangs in write() and no longer responds to other requests while no
> TCP timeout breaks up this situation.
>
> So it's quite easy to intentionally block rpc.mountd from remote.

That's rather nasty.
We could possibly set the socket to be non-blocking, or we could set an alarm
just before handling a request.
Probably rpc_dispatch() in support/nfs/rpcdispatch.c would be the best place
to put the timeout.
catch SIGALRM (don't set SA_RESTART)
alarm(10);
call svc_sendreply
alarm(0);

if the alarm fires while svc_sendreply is writing to the socket it should get
an error and close the connection.

This would only fix mountd (as it is the only process to use rpc_dispatch).
Is a similar thing needed for statd I wonder?? It isn't so important.

NeilBrown

>
> Please CC me, I'm not on the list.
>
> Best regards,
> Bodo
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


Attachments:
signature.asc (828.00 B)

2014-09-25 10:22:00

by Strösser, Bodo

[permalink] [raw]
Subject: RE: rpc.mountd can be blocked by a bad client

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBOZWlsQnJvd24gW21haWx0bzpu
ZWlsYkBzdXNlLmRlXQ0KPiBTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI1LCAyMDE0IDI6MzIg
QU0NCj4gVG86IFN0csO2c3NlciwgQm9kbw0KPiBDYzogbGludXgtbmZzQHZnZXIua2VybmVsLm9y
ZzsgYmZpZWxkc0BmaWVsZHNlcy5vcmcNCj4gU3ViamVjdDogUmU6IHJwYy5tb3VudGQgY2FuIGJl
IGJsb2NrZWQgYnkgYSBiYWQgY2xpZW50DQo+IA0KPiBPbiBXZWQsIDI0IFNlcCAyMDE0IDEyOjU3
OjA5ICswMjAwICJTdHLDtnNzZXIsIEJvZG8iDQo+IDxib2RvLnN0cm9lc3NlckB0cy5mdWppdHN1
LmNvbT4gd3JvdGU6DQo+IA0KPiA+IEhlbGxvLA0KPiA+DQo+ID4gYSBmZXcgZGF5cyBhZ28gd2Ug
aGFkIHNvbWUgdHJvdWJsZSB3aXRoIGEgTkZTIHNlcnZlci4gVGhlIGNsaWVudHMgbW9zdCBvZiB0
aGUgdGltZSBubw0KPiBsb25nZXINCj4gPiBjb3VsZCBtb3VudCBhbnkgc2hhcmVzLCBidXQgaW4g
cmFyZSBjYXNlcyB0aGV5IGhhZCBzdWNjZXNzLg0KPiA+DQo+ID4gV2UgZm91bmQgb3V0LCB0aGF0
IGR1cmluZyB0aGUgdGltZXMgd2hlbiBtb3VudHMgZmFpbGVkLCBycGMubW91bnRkIGh1bmcgb24g
YSB3cml0ZSgpIHRvDQo+IGEgVENQDQo+ID4gc29ja2V0LiBuZXRzdGF0IHNob3dlZCwgdGhhdCBT
ZW5kLVEgd2FzIGZ1bGwgYW5kIFJlY3YtUSBjb3VudGVkIHVwIHNsb3dseS4gQWZ0ZXIgYSBsb25n
DQo+IHRpbWUNCj4gPiB0aGUgd3JpdGUgZW5kZWQgd2l0aCBhbiBlcnJvciAoIlRDUCB0aW1lb3V0
IiBJSVJDKSBhbmQgcnBjLm1vdW50ZCB3b3JrZWQgbm9ybWFsbHkgZm9yIGENCj4gc2hvcnQNCj4g
PiB3aGlsZSB1bnRpbCBpdCBhZ2FpbiBodW5nIG9uIHdyaXRlKCkgZm9yIHRoZSBzYW1lIHJlYXNv
bi4gVGhlIHByb2JsZW0gd2FzIGNhdXNlZCBieSBhDQo+IE1UVSBzaXplDQo+ID4gY29uZmlndXJl
ZCB3cm9uZy4gU28sIG9uZSBzaW5nbGUgYmFkIGNsaWVudCAob3IgYXMgbXVjaCBjbGllbnRzIGFz
IHRoZSBudW1iZXIgb2YgdGhyZWFkcw0KPiB1c2VkDQo+ID4gYnkgcnBjLm1vdW50ZCkgY2FuIGJs
b2NrIHJwYy5tb3VudGQgZW50aXJlbHkuDQo+ID4NCj4gPiBCdXQgd2hhdCB3aWxsIGhhcHBlbiwg
aWYgc29tZW9uZSBpbnRlbnRpb25hbGx5IHNlbmRzIFJQQyByZXF1ZXN0cywgYnV0IGRvZXNuJ3Qg
cmVhZCgpDQo+IHRoZQ0KPiA+IGFuc3dlcnM/IEkgd3JvdGUgYSBzbWFsbCB0b29sIHRvIHRlc3Qg
dGhpcyBzaXR1YXRpb24uIEl0IGZpcmVzIERVTVAgcmVxdWVzdHMgdG8NCj4gcnBjLm1vdW50ZCBh
cw0KPiA+IGZhc3QgYXMgcG9zc2libGUsIGJ1dCBkb2VzIG5vdCByZWFkIGZyb20gdGhlIHNvY2tl
dC4gVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB3aXRoIHRoZQ0KPiA+IHByb2JsZW0gYWJvdmU6
IHJwYy5tb3VudGQgaGFuZ3MgaW4gd3JpdGUoKSBhbmQgbm8gbG9uZ2VyIHJlc3BvbmRzIHRvIG90
aGVyIHJlcXVlc3RzDQo+IHdoaWxlIG5vDQo+ID4gVENQIHRpbWVvdXQgYnJlYWtzIHVwIHRoaXMg
c2l0dWF0aW9uLg0KPiA+DQo+ID4gU28gaXQncyBxdWl0ZSBlYXN5IHRvIGludGVudGlvbmFsbHkg
YmxvY2sgcnBjLm1vdW50ZCBmcm9tIHJlbW90ZS4NCj4gDQo+IFRoYXQncyByYXRoZXIgbmFzdHku
DQo+IFdlIGNvdWxkIHBvc3NpYmx5IHNldCB0aGUgc29ja2V0IHRvIGJlIG5vbi1ibG9ja2luZywg
b3Igd2UgY291bGQgc2V0IGFuIGFsYXJtDQo+IGp1c3QgYmVmb3JlIGhhbmRsaW5nIGEgcmVxdWVz
dC4NCj4gUHJvYmFibHkgcnBjX2Rpc3BhdGNoKCkgaW4gc3VwcG9ydC9uZnMvcnBjZGlzcGF0Y2gu
YyB3b3VsZCBiZSB0aGUgYmVzdCBwbGFjZQ0KPiB0byBwdXQgdGhlIHRpbWVvdXQuDQo+ICBjYXRj
aCBTSUdBTFJNIChkb24ndCBzZXQgU0FfUkVTVEFSVCkNCj4gIGFsYXJtKDEwKTsNCj4gIGNhbGwg
c3ZjX3NlbmRyZXBseQ0KPiAgYWxhcm0oMCk7DQo+IA0KDQpJIGFsc28gdGhvdWdodCBhYm91dCBj
aGFuZ2luZyB0aGUgc29ja2V0IHRvIG5vbi1ibG9ja2luZy4gQnV0IEknbSBub3Qgc3VyZTogaXMg
aXQNCnBvc3NpYmxlIHRvIGhhdmUgc3VjaCBiaWcgUlBDIHJlcGxpZXMsIHRoYXQgdGhleSBkb24n
dCBmaXQgaW50byB0aGUgc29ja2V0DQpidWZmZXI/IElmIHNvLCB3cml0ZSgpIHdvdWxkIHB1dCB0
aGUgZmlyc3QgcGFydCBpbnRvIHRoZSBidWZmZXIgYW5kIGEgc2Vjb25kDQp3cml0ZSBmb3IgdGhl
IHJlc3Qgd291bGQgZmFpbCwgYXMgcHJvYmFibHkgdGhlIGZpcnN0IHBhcnQgaXNuJ3QgYWNrZWQg
eWV0LCByaWdodD8NClNvLCBub24tYmxvY2tpbmcgbmVlZHMgdG8gYmUgY29tYmluZWQgd2l0aCBh
IGhhbmRsaW5nIG9mIGJ1ZmZlci1mdWxsIHNpdHVhdGlvbnMsDQpJIGd1ZXNzLiBTdWNoIGEgaGFu
ZGxpbmcgdG9nZXRoZXIgd2l0aCBhIHRpbWVvdXQgZm9yIHN0YXJ2aW5nIGNvbm5lY3Rpb25zIHdv
dWxkDQpiZSBhIGNsZWFuIHNvbHV0aW9uLg0KVG8gZG8gdGhhdCwgb25lIHdvdWxkIGhhdmUgdG8g
cmVwbGFjZSB0aGUgdGNwIHdyaXRlIHJvdXRpbmUgb2YgdGhlIHJwYyBsaWJyYXJ5Lg0KVGhhdCBt
ZWFucyB0byBjaGFuZ2UgdGhlIHhkcnMncyBwb2ludGVyIHRvIHRoZSB3cml0ZSBmdW5jdGlvbi4g
SSBkb24ndCBrbm93LA0Kd2hldGhlciB0aGF0IGNhbiBiZSBkb25lIGluIGEgcG9ydGFibGUgd2F5
LCB3aGljaCB3b3JrcyBhdCB0aGUgZGlmZmVyZW50IHBsYXRmb3Jtcy4NCg0KQWJvdXQgc2V0dGlu
ZyBhIGFsYXJtIHRpbWVvdXQ6IEknbSBub3Qgc3VyZSwgdGhhdCBycGNfZGlzcGF0Y2goKSBpcyB0
aGUgcmlnaHQNCnBsYWNlIGZvciBpdC4gbW91bnRkIHVzZXMgbW91bnRfZGlzcGF0Y2goKSB3aGlj
aCBoYXMgYW4gZXhpdCB2aWEgc3ZjZXJyX2F1dGgoKSwNCnRoYXQgYWdhaW4gc2VuZHMgYSByZXBs
eS4gU28gdGhlIHRpbWVvdXQgeW91IHN1Z2dlc3Qgc2hvdWxkIGJlIGluc2VydGVkIGluDQptb3Vu
dF9kaXNwYXRjaCgpLCBJIHRoaW5rLg0KT1RPSCwgYSB0aW1lb3V0IHdpbGwgc2hvcnRlbiB0aGUg
aGFuZywgYnV0IGJhZCBjbGllbnRzIGNhbiBzdGlsbCBzbG93IGRvd24gbW91bnRkDQpleHRyZW1l
bHkuDQoNCkJUVzogQUZBSUNTIG9uIExpbnV4IHdpdGggbGlidGlycGMsIHVzaW5nIHRoZSBjb250
cm9sIFNWQ0dFVF9DT05OTUFYUkVDLCB0aGUgc29ja2V0DQppbmRpcmVjdGx5IGNhbiBzZXQgdG8g
bm9uLWJsb2NraW5nLiBUaGF0IHNlZW1zIHRvIHJlc3VsdCBpbiB3cml0ZV92YygpIGRvaW5nIGEg
bWF4Lg0KMiBzZWNvbmQgbG9vcCBvZiB3cml0ZSgpIHVudGlsIGl0IGdpdmVzIHVwLg0KDQpPbmUg
b3RoZXIgcG9pbnQ6IEFGQUlDUyBvbiBMaW51eCB3aXRoIGxpYnRpcnBjIHRoZSBsaXN0ZW5pbmcg
c29ja2V0IG9mIG1vdW50ZCBpcw0KaW4gYmxvY2tpbmcgbW9kZS4gV291bGQgdGhhdCBiZSBhIHBy
b2JsZW0gd2hlbiBydW5uaW5nIG11bHRpcGxlICJ0aHJlYWRzIj8NClRoZSBjb21tZW50IGluIHN2
Y19zb2NrZXQuYy9zdmNfc29ja2V0KCksIHdoZXJlIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHNl
dCB0bw0Kbm9uLWJsb2NraW5nLCBzb3VuZHMgdmVyeSByZWFzb25hYmxlLiBCdXQgQUZBSUNTIGlm
IGxpYnRpcnBjIGlzIHVzZWQsIE9fTk9OQkxPQ0sNCmN1cnJlbnRseSBpc24ndCBzZXQuDQoNCkJv
ZG8gU3Ryb2Vzc2VyDQoNCg0KPiBpZiB0aGUgYWxhcm0gZmlyZXMgd2hpbGUgc3ZjX3NlbmRyZXBs
eSBpcyB3cml0aW5nIHRvIHRoZSBzb2NrZXQgaXQgc2hvdWxkIGdldA0KPiBhbiBlcnJvciBhbmQg
Y2xvc2UgdGhlIGNvbm5lY3Rpb24uDQo+IA0KPiBUaGlzIHdvdWxkIG9ubHkgZml4IG1vdW50ZCAo
YXMgaXQgaXMgdGhlIG9ubHkgcHJvY2VzcyB0byB1c2UgcnBjX2Rpc3BhdGNoKS4NCj4gSXMgYSBz
aW1pbGFyIHRoaW5nIG5lZWRlZCBmb3Igc3RhdGQgSSB3b25kZXI/PyAgSXQgaXNuJ3Qgc28gaW1w
b3J0YW50Lg0KPiANCj4gTmVpbEJyb3duDQo+IA0KPiA+DQo+ID4gUGxlYXNlIENDIG1lLCBJJ20g
bm90IG9uIHRoZSBsaXN0Lg0KPiA+DQo+ID4gQmVzdCByZWdhcmRzLA0KPiA+IEJvZG8NCj4gPiAt
LQ0KPiA+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1
YnNjcmliZSBsaW51eC1uZnMiIGluDQo+ID4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y
ZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8v
dmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCg0K

2014-10-09 13:53:47

by Bodo Stroesser

[permalink] [raw]
Subject: Re:rpc.mountd can be blocked by a bad client

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IFN0csO2c3NlciwgQm9kbwo+
IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjUsIDIwMTQgMTI6MjIgUE0KPiBUbzogJ05l
aWxCcm93bicKPiBDYzogbGludXgtbmZzQHZnZXIua2VybmVsLm9yZzsgYmZpZWxkc0BmaWVs
ZHNlcy5vcmcKPiBTdWJqZWN0OiBSRTogcnBjLm1vdW50ZCBjYW4gYmUgYmxvY2tlZCBieSBh
IGJhZCBjbGllbnQKPiAKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiBGcm9t
OiBOZWlsQnJvd24gW21haWx0bzpuZWlsYkBzdXNlLmRlXQo+ID4gU2VudDogVGh1cnNkYXks
IFNlcHRlbWJlciAyNSwgMjAxNCAyOjMyIEFNCj4gPiBUbzogU3Ryw7Zzc2VyLCBCb2RvCj4g
PiBDYzogbGludXgtbmZzQHZnZXIua2VybmVsLm9yZzsgYmZpZWxkc0BmaWVsZHNlcy5vcmcK
PiA+IFN1YmplY3Q6IFJlOiBycGMubW91bnRkIGNhbiBiZSBibG9ja2VkIGJ5IGEgYmFkIGNs
aWVudAo+ID4KPiA+IE9uIFdlZCwgMjQgU2VwIDIwMTQgMTI6NTc6MDkgKzAyMDAgIlN0csO2
c3NlciwgQm9kbyIKPiA+IDxib2RvLnN0cm9lc3NlckB0cy5mdWppdHN1LmNvbT4gd3JvdGU6
Cj4gPgo+ID4gPiBIZWxsbywKPiA+ID4KPiA+ID4gYSBmZXcgZGF5cyBhZ28gd2UgaGFkIHNv
bWUgdHJvdWJsZSB3aXRoIGEgTkZTIHNlcnZlci4gVGhlIGNsaWVudHMKPiA+ID4gbW9zdCBv
ZiB0aGUgdGltZSBubyBsb25nZXIgY291bGQgbW91bnQgYW55IHNoYXJlcywgYnV0IGluIHJh
cmUKPiA+ID4gY2FzZXMgdGhleSBoYWQgc3VjY2Vzcy4KPiA+ID4KPiA+ID4gV2UgZm91bmQg
b3V0LCB0aGF0IGR1cmluZyB0aGUgdGltZXMgd2hlbiBtb3VudHMgZmFpbGVkLCBycGMubW91
bnRkCj4gPiA+IGh1bmcgb24gYSB3cml0ZSgpIHRvIGEgVENQIHNvY2tldC4gbmV0c3RhdCBz
aG93ZWQsIHRoYXQgU2VuZC1RIHdhcwo+ID4gPiBmdWxsIGFuZCBSZWN2LVEgY291bnRlZCB1
cCBzbG93bHkuIEFmdGVyIGEgbG9uZyB0aW1lIHRoZSB3cml0ZQo+ID4gPiBlbmRlZCB3aXRo
IGFuIGVycm9yICgiVENQIHRpbWVvdXQiIElJUkMpIGFuZCBycGMubW91bnRkIHdvcmtlZAo+
ID4gPiBub3JtYWxseSBmb3IgYSBzaG9ydCB3aGlsZSB1bnRpbCBpdCBhZ2FpbiBodW5nIG9u
IHdyaXRlKCkgZm9yIHRoZQo+ID4gPiBzYW1lIHJlYXNvbi4KPiA+ID4gCj4gPiA+IFRoZSBw
cm9ibGVtIHdhcyBjYXVzZWQgYnkgYSBNVFUgc2l6ZSBjb25maWd1cmVkIHdyb25nLiBTbywg
b25lCj4gPiA+IHNpbmdsZSBiYWQgY2xpZW50IChvciBhcyBtdWNoIGNsaWVudHMgYXMgdGhl
IG51bWJlciBvZiB0aHJlYWRzIHVzZWQKPiA+ID4gYnkgcnBjLm1vdW50ZCkgY2FuIGJsb2Nr
IHJwYy5tb3VudGQgZW50aXJlbHkuCj4gPiA+Cj4gPiA+IEJ1dCB3aGF0IHdpbGwgaGFwcGVu
LCBpZiBzb21lb25lIGludGVudGlvbmFsbHkgc2VuZHMgUlBDIHJlcXVlc3RzLAo+ID4gPiBi
dXQgZG9lc24ndCByZWFkKCkgdGhlIGFuc3dlcnM/IEkgd3JvdGUgYSBzbWFsbCB0b29sIHRv
IHRlc3QgdGhpcwo+ID4gPiBzaXR1YXRpb24uIEl0IGZpcmVzIERVTVAgcmVxdWVzdHMgdG8g
cnBjLm1vdW50ZCBhcyBmYXN0IGFzCj4gPiA+IHBvc3NpYmxlLCBidXQgZG9lcyBub3QgcmVh
ZCBmcm9tIHRoZSBzb2NrZXQuIFRoZSByZXN1bHQgaXMgdGhlCj4gPiA+IHNhbWUgYXMgd2l0
aCB0aGUgcHJvYmxlbSBhYm92ZTogcnBjLm1vdW50ZCBoYW5ncyBpbiB3cml0ZSgpIGFuZCBu
bwo+ID4gPiBsb25nZXIgcmVzcG9uZHMgdG8gb3RoZXIgcmVxdWVzdHMgd2hpbGUgbm8gVENQ
IHRpbWVvdXQgYnJlYWtzIHVwCj4gPiA+IHRoaXMgc2l0dWF0aW9uLgo+ID4gPgo+ID4gPiBT
byBpdCdzIHF1aXRlIGVhc3kgdG8gaW50ZW50aW9uYWxseSBibG9jayBycGMubW91bnRkIGZy
b20gcmVtb3RlLgo+ID4KPiA+IFRoYXQncyByYXRoZXIgbmFzdHkuCj4gPiBXZSBjb3VsZCBw
b3NzaWJseSBzZXQgdGhlIHNvY2tldCB0byBiZSBub24tYmxvY2tpbmcsIG9yIHdlIGNvdWxk
IHNldCBhbiBhbGFybQo+ID4ganVzdCBiZWZvcmUgaGFuZGxpbmcgYSByZXF1ZXN0Lgo+ID4g
UHJvYmFibHkgcnBjX2Rpc3BhdGNoKCkgaW4gc3VwcG9ydC9uZnMvcnBjZGlzcGF0Y2guYyB3
b3VsZCBiZSB0aGUgYmVzdCBwbGFjZQo+ID4gdG8gcHV0IHRoZSB0aW1lb3V0Lgo+ID4gIGNh
dGNoIFNJR0FMUk0gKGRvbid0IHNldCBTQV9SRVNUQVJUKQo+ID4gIGFsYXJtKDEwKTsKPiA+
ICBjYWxsIHN2Y19zZW5kcmVwbHkKPiA+ICBhbGFybSgwKTsKPiA+Cj4gCj4gSSBhbHNvIHRo
b3VnaHQgYWJvdXQgY2hhbmdpbmcgdGhlIHNvY2tldCB0byBub24tYmxvY2tpbmcuIEJ1dCBJ
J20gbm90IHN1cmU6IGlzIGl0Cj4gcG9zc2libGUgdG8gaGF2ZSBzdWNoIGJpZyBSUEMgcmVw
bGllcywgdGhhdCB0aGV5IGRvbid0IGZpdCBpbnRvIHRoZSBzb2NrZXQKPiBidWZmZXI/IElm
IHNvLCB3cml0ZSgpIHdvdWxkIHB1dCB0aGUgZmlyc3QgcGFydCBpbnRvIHRoZSBidWZmZXIg
YW5kIGEgc2Vjb25kCj4gd3JpdGUgZm9yIHRoZSByZXN0IHdvdWxkIGZhaWwsIGFzIHByb2Jh
Ymx5IHRoZSBmaXJzdCBwYXJ0IGlzbid0IGFja2VkIHlldCwgcmlnaHQ/Cj4gU28sIG5vbi1i
bG9ja2luZyBuZWVkcyB0byBiZSBjb21iaW5lZCB3aXRoIGEgaGFuZGxpbmcgb2YgYnVmZmVy
LWZ1bGwgc2l0dWF0aW9ucywKPiBJIGd1ZXNzLiBTdWNoIGEgaGFuZGxpbmcgdG9nZXRoZXIg
d2l0aCBhIHRpbWVvdXQgZm9yIHN0YXJ2aW5nIGNvbm5lY3Rpb25zIHdvdWxkCj4gYmUgYSBj
bGVhbiBzb2x1dGlvbi4KPiBUbyBkbyB0aGF0LCBvbmUgd291bGQgaGF2ZSB0byByZXBsYWNl
IHRoZSB0Y3Agd3JpdGUgcm91dGluZSBvZiB0aGUgcnBjIGxpYnJhcnkuCj4gVGhhdCBtZWFu
cyB0byBjaGFuZ2UgdGhlIHhkcnMncyBwb2ludGVyIHRvIHRoZSB3cml0ZSBmdW5jdGlvbi4g
SSBkb24ndCBrbm93LAo+IHdoZXRoZXIgdGhhdCBjYW4gYmUgZG9uZSBpbiBhIHBvcnRhYmxl
IHdheSwgd2hpY2ggd29ya3MgYXQgdGhlIGRpZmZlcmVudCBwbGF0Zm9ybXMuCj4gCj4gQWJv
dXQgc2V0dGluZyBhIGFsYXJtIHRpbWVvdXQ6IEknbSBub3Qgc3VyZSwgdGhhdCBycGNfZGlz
cGF0Y2goKSBpcyB0aGUgcmlnaHQKPiBwbGFjZSBmb3IgaXQuIG1vdW50ZCB1c2VzIG1vdW50
X2Rpc3BhdGNoKCkgd2hpY2ggaGFzIGFuIGV4aXQgdmlhIHN2Y2Vycl9hdXRoKCksCj4gdGhh
dCBhZ2FpbiBzZW5kcyBhIHJlcGx5LiBTbyB0aGUgdGltZW91dCB5b3Ugc3VnZ2VzdCBzaG91
bGQgYmUgaW5zZXJ0ZWQgaW4KPiBtb3VudF9kaXNwYXRjaCgpLCBJIHRoaW5rLgo+IE9UT0gs
IGEgdGltZW91dCB3aWxsIHNob3J0ZW4gdGhlIGhhbmcsIGJ1dCBiYWQgY2xpZW50cyBjYW4g
c3RpbGwgc2xvdyBkb3duIG1vdW50ZAo+IGV4dHJlbWVseS4KPiAKPiBCVFc6IEFGQUlDUyBv
biBMaW51eCB3aXRoIGxpYnRpcnBjLCB1c2luZyB0aGUgY29udHJvbCBTVkNHRVRfQ09OTk1B
WFJFQywgdGhlIHNvY2tldAo+IGluZGlyZWN0bHkgY2FuIHNldCB0byBub24tYmxvY2tpbmcu
IFRoYXQgc2VlbXMgdG8gcmVzdWx0IGluIHdyaXRlX3ZjKCkgZG9pbmcgYSBtYXguCj4gMiBz
ZWNvbmQgbG9vcCBvZiB3cml0ZSgpIHVudGlsIGl0IGdpdmVzIHVwLgoKTWVhbndoaWxlIEkn
dmUgZm91bmQgc29tZSB0aW1lIHRvIGRvIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuCgpycGNi
aW5kIHVzZXMgdGhlIGFib3ZlIG1lbnRpb25lZCBycGNfY29udHJvbChTVkNTRVRfQ09OTk1B
WFJFQykgdG8gc3dpdGNoCnRvIG5vbmJsb2NraW5nIG1vZGUgb2YgbGlidGlycGMuIFNvIEkg
dGVzdGVkIGEgc2ltaWxhciBhdHRhY2sgdG8gcnBjYmluZC4KVGhlIG5vbmJsb2NraW5nIG1v
ZGUgc2hvd3MgdHdvIHBvc2l0aXZlIGVmZmVjdHM6Ci0gYW4gYXR0YWNrZXIgc2VuZGluZyBy
ZXF1ZXN0cyBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIHJwY2JpbmQgd2lsbCBoYXZlIG5vCiAg
c3VjY2Vzcy4gQXMgc29vbiBhcyBycGNiaW5kL2xpYnRpcnBjIGZpbmRzIG1vcmUgdGhhbiBv
bmUgcmVxdWVzdCByZWFkYWJsZQogIGF0IHRoZSBzb2NrZXQsIGl0IGNsb3NlcyB0aGUgY29u
bmVjdGlvbi4KLSBpZiB0aGUgc29ja2V0IGJ1ZmZlciBpcyBmdWxsLCB0aGUgd3JpdGUoKSBm
YWlsIHdpdGggLUVBR0FJTi4gbGlidGlycGMKICB1c2VzIGEgbG9vcCB0byByZXRyeSB0aGUg
d3JpdGUgZm9yIG1heC4gMiBzZWNvbmRzLiBUaGVuIGl0IGNsb3NlcyB0aGUKICBjb25uZWN0
aW9uLgoKVW5mb3J0dW5hdGVseSB0aGUgd3JpdGUgcmV0cnkgbG9vcCBpbiBsaWJ0aXJwYyBo
YXMgYSBidWcuIEl0IGluY3JlbWVudHMKdGhlIGxlbmd0aCBvZiBhbmQgZGVjcmVtZW50cyB0
aGUgcG9pbnRlciB0byB0aGUgcmV0cnkgYnVmZmVyIG9uIGVhY2ggZmFpbGVkCndyaXRlKCku
CkkndmUgc2VudCBhIHBhdGNoIHRvIGxpYnRpcnBjLWRldmVsIGFib3V0IDEwIGRheXMgYWdv
LCBidXQgZGlkbid0IGdldCBhCnJlc3BvbnNlIHlldC4KClJlZ2FyZGluZyBycGMubW91bnRk
LCBJJ3ZlIGZvdW5kLCB0aGF0IHVzaW5nIG11bHRpcGxlIHByb2Nlc3NlcyAoZS5nLiAtdCA0
KQpkb2Vzbid0IHdvcmsgd2VsbC4gV2hlbiB1c2luZyBsaWJ0aXJwYyBvciB3aGVuIG5vdCB1
c2luZyBsaWJ0aXJwYyBidXQgc2V0dGluZwotcCB4eHh4IG9wdGlvbiwgdGhlIGxpc3Rlbmlu
ZyBzb2NrZXRzICh0Y3AgbGlzdGVuZXIgYW5kIHVkcCBzb2NrZXQpIGFyZSBub3QKaW4gbm9u
LWJsb2NraW5nIG1vZGUuIFRodXMsIGlmIGEgc2luZ2xlIGNvbm5lY3Rpb24gcmVxdWVzdCBj
b21lcyBpbiwgYWxsCnRocmVhZHMgd2FrZSB1cCBmcm9tIHRoZSBzZWxlY3QoKSwgYnV0IG9u
bHkgb25lIGFjY2VwdCgpIHN1Y2NlZWRzLiBBbGwgb3RoZXIKdGhyZWFkcyB3aWxsIHdhaXQg
aW4gYWNjZXB0KCkgZm9yIGZ1cnRoZXIgY29ubmVjdGlvbiByZXF1ZXN0cy4KSWYgYSBSUEMt
cmVxdWVzdCBjb21lcyBpbiB2aWEgVURQLCB3aGF0IGhhcHBlbnMgaXMgdmVyeSBzaW1pbGFy
OiBhbGwgdGhyZWFkcwp3YWtlIHVwLCBvbmUgdGhyZWFkIGhhbmRsZXMgdGhlIHJlcXVlc3Qs
IGFsbCBvdGhlcnMgd2FpdCBpbiByZWFkKCkgZm9yCmZ1cnRoZXIgVURQIHJlcXVlc3RzLiAK
QXMgVENQIGNvbm5lY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBzcGVjaWZpYyB0aHJlYWRzLCBh
bGwgY29ubmVjdGlvbnMgaGFuZGxlZApieSBvbmUgdGhyZWFkIHdpbGwgYmUgYmxvY2sgYXMg
bG9uZyBhcyB0aGUgdGhyZWFkIHdhaXRzIGluIGFjY2VwdCgpIG9yIHJlYWQoKS4KVGh1cywg
SSd2ZSB3cml0dGVuIHR3byBwYXRjaGVzIChzZWUgYmVsb3cpLCB0aGF0IHNldCBhbGwgbGlz
dGVuZXJzIHRvCm5vbi1ibG9ja2luZyBpbiBzdXBwb3J0L25mcy8qCgpUaGUgdGhpcmQgcGF0
Y2ggYmVsb3cgaW5zZXJ0cyBycGNfY29udHJvbChTVkNTRVRfQ09OTk1BWFJFQykgaW50bwpu
ZnNfc3ZjX2NyZWF0ZSgpcyBpbiBzdXBwb3J0L25mcy9zdmNfY3JlYXRlLmMgZm9yIHRoZSBj
YXNlIG9mIGxpYnRpcnBjLgpUaGF0IHBhdGNoIGhhcmRlbnMgcnBjLm1vdW50IGFnYWluc3Qg
RE9TIGF0dGFja3MgKGFuZCBwcm9iYWJseSBhbHNvIHN0YXRkLAphcyBpdCBhbHNvIHVzZXMg
bmZzX3N2Y19jcmVhdGUoKSkuCgpUaGUgcGF0Y2hlcyBiZWxvdyBhcmUgZm9yIG5mcy11dGls
LTEuMy4xLCBidXQgdGhpcyB2ZXJzaW9uIGlzIHVudGVzdGVkIQooQ291bGRuJ3QgYnVpbGQg
YmVjYXVzZSBvZiBkZXBlbmRlbmNpZXMgYW5kIG5vdyBJJ20gcnVubmluZyBvdXQgb2YgdGlt
ZSkKCk15IHZlcnNpb24gb2YgdGhlIHBhdGNoZXMgZm9yIG5mcy11dGlsLTEuMi4zLTE4LjMz
LjEgaXMgdGVzdGVkIG9uIFNMRVMxMS1TUDMuClBsZWFzZSBzZWUgdGhlIHRoaXJkIHBhdGNo
IGFzIGEgUkZDIG9ubHkuIEknbSBub3Qgc3VyZSwgd2hldGhlciBzZXR0aW5nCk1BWFJFQyBt
aWdodCBoYXZlIG5lZ2F0aXZlIHNpZGUgZWZmZWN0cyBhcyBJJ20gbm90IGEgUlBDIGV4cGVy
dC4KCkJvZG8KCj4gCj4gT25lIG90aGVyIHBvaW50OiBBRkFJQ1Mgb24gTGludXggd2l0aCBs
aWJ0aXJwYyB0aGUgbGlzdGVuaW5nIHNvY2tldCBvZiBtb3VudGQgaXMKPiBpbiBibG9ja2lu
ZyBtb2RlLiBXb3VsZCB0aGF0IGJlIGEgcHJvYmxlbSB3aGVuIHJ1bm5pbmcgbXVsdGlwbGUg
InRocmVhZHMiPwo+IFRoZSBjb21tZW50IGluIHN2Y19zb2NrZXQuYy9zdmNfc29ja2V0KCks
IHdoZXJlIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHNldCB0bwo+IG5vbi1ibG9ja2luZywg
c291bmRzIHZlcnkgcmVhc29uYWJsZS4gQnV0IEFGQUlDUyBpZiBsaWJ0aXJwYyBpcyB1c2Vk
LCBPX05PTkJMT0NLCj4gY3VycmVudGx5IGlzbid0IHNldC4KPiAKPiBCb2RvIFN0cm9lc3Nl
cgo+IAo+IAo+ID4gaWYgdGhlIGFsYXJtIGZpcmVzIHdoaWxlIHN2Y19zZW5kcmVwbHkgaXMg
d3JpdGluZyB0byB0aGUgc29ja2V0IGl0IHNob3VsZCBnZXQKPiA+IGFuIGVycm9yIGFuZCBj
bG9zZSB0aGUgY29ubmVjdGlvbi4KPiA+Cj4gPiBUaGlzIHdvdWxkIG9ubHkgZml4IG1vdW50
ZCAoYXMgaXQgaXMgdGhlIG9ubHkgcHJvY2VzcyB0byB1c2UgcnBjX2Rpc3BhdGNoKS4KPiA+
IElzIGEgc2ltaWxhciB0aGluZyBuZWVkZWQgZm9yIHN0YXRkIEkgd29uZGVyPz8gIEl0IGlz
bid0IHNvIGltcG9ydGFudC4KPiA+Cj4gPiBOZWlsQnJvd24KPiA+Cj4gPiA+Cj4gPiA+IFBs
ZWFzZSBDQyBtZSwgSSdtIG5vdCBvbiB0aGUgbGlzdC4KPiA+ID4KPiA+ID4gQmVzdCByZWdh
cmRzLAo+ID4gPiBCb2RvCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQoKRnJvbTogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20+
CkRhdGU6IFRodSwgMDkgT2N0IDIwMTQgMTM6MDY6MTkgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBuZnMtdXRpbDogbW91bnRkOiBzZXQgbm9uYmxvY2tpbmcgbW9kZSBpZiBubyBsaWJ0aXJw
YwoKSWYgbW91bnRkIGlzIGJ1aWx0IHdpdGhvdXQgbGlidGlycGMgYW5kIGl0IGlzIHN0YXJ0
ZWQgdXNpbmcgIi1wIFhYWCIgb3B0aW9uLAp0aGUgdGNwIGxpc3RlbmVycyBhbmQgdGhlIHNv
Y2tldHMgd2FpdGluZyBmb3IgVURQIG1lc3NhZ2VzIGFyZSBub3QgaW4Kbm9uLWJsb2NraW5n
IG1vZGUuIFRodXMgaWYgcnVubmluZyB3aXRoIG11bHRpcGxlIHRocmVhZHMgKC10IFhYKSwK
YWxsIHRocmVhZHMgd2lsbCB3YWtlIHVwIGZyb20gc2VsZWN0IG9uIGEgY29ubmVjdGlvbiBy
ZXF1ZXN0IG9yIGEgVURQIG1lc3NhZ2UsCmJ1dCBvbmx5IG9uZSB0aHJlYWQgd2lsbCBzdWNj
ZWVkLiBBbGwgb3RoZXJzIHdpbGwgd2FpdCBvbiBhY2NlcHQoKSBvciByZWFkKCkKZm9yIHRo
ZSBuZXh0IGV2ZW50LgoKU2lnbmVkLW9mZi1ieTogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNz
ZXJAdHMuZnVqaXRzdS5jb20+Ci0tLQoKLS0tIG5mcy11dGlscy0xLjMuMS9zdXBwb3J0L2lu
Y2x1ZGUvbmZzbGliLmgJMjAxNC0xMC0wOSAxMjo1MjozMC4wMDAwMDAwMDAgKzAyMDAKKysr
IG5mcy11dGlscy0xLjMuMS9zdXBwb3J0L2luY2x1ZGUvbmZzbGliLmgJMjAxNC0xMC0wOSAx
Mjo1MzozNy4wMDAwMDAwMDAgKzAyMDAKQEAgLTE3NCw2ICsxNzQsNyBAQCB2b2lkIGNsb3Nl
YWxsKGludCBtaW4pOwogCiBpbnQJCQlzdmN0Y3Bfc29ja2V0ICh1X2xvbmcgX19udW1iZXIs
IGludCBfX3JldXNlKTsKIGludAkJCXN2Y3VkcF9zb2NrZXQgKHVfbG9uZyBfX251bWJlcik7
CitpbnQJCQlzdmNzb2NrX25vbmJsb2NrIChpbnQgX19zb2NrKTsKIAogLyogTWlzYyBzaGFy
ZWQgY29kZSBwcm90b3R5cGVzICovCiBzaXplX3QgIHN0cmxjYXQoY2hhciAqLCBjb25zdCBj
aGFyICosIHNpemVfdCk7Ci0tLSBuZnMtdXRpbHMtMS4zLjEvc3VwcG9ydC9uZnMvc3ZjX3Nv
Y2tldC5jCTIwMTQtMTAtMDkgMTI6NTY6MTQuMDAwMDAwMDAwICswMjAwCisrKyBuZnMtdXRp
bHMtMS4zLjEvc3VwcG9ydC9uZnMvc3ZjX3NvY2tldC5jCTIwMTQtMTAtMDkgMTM6MTA6NDQu
MDAwMDAwMDAwICswMjAwCkBAIC03Niw2ICs3NiwzOSBAQCBpbnQgZ2V0c2VydnBvcnQodV9s
b25nIG51bWJlciwgY29uc3QgY2hhCiAJcmV0dXJuIDA7CiB9CiAKK2ludAorc3Zjc29ja19u
b25ibG9jayhpbnQgc29jaykKK3sKKwlpbnQgZmxhZ3M7CisKKwlpZiAoc29jayA8IDApCisJ
CXJldHVybiBzb2NrOworCisJLyogVGhpcyBzb2NrZXQgbWlnaHQgYmUgc2hhcmVkIGFtb25n
IG11bHRpcGxlIHByb2Nlc3NlcworCSAqIGlmIG1vdW50ZCBpcyBydW4gbXVsdGktdGhyZWFk
ZWQuICBTbyBpdCBpcyBzYWZlc3QgdG8KKwkgKiBtYWtlIGl0IG5vbi1ibG9ja2luZywgZWxz
ZSBhbGwgdGhyZWFkcyBtaWdodCB3YWtlCisJICogb25lIHdpbGwgZ2V0IHRoZSBkYXRhLCBh
bmQgdGhlIG90aGVycyB3aWxsIGJsb2NrCisJICogaW5kZWZpbml0ZWx5LgorCSAqIEluIGFs
bCBjYXNlcywgdHJhbnNhY3Rpb24gb24gdGhpcyBzb2NrZXQgYXJlIGF0b21pYworCSAqIChh
Y2NlcHQgZm9yIFRDUCwgcGFja2V0LXJlYWQgYW5kIHBhY2tldC13cml0ZSBmb3IgVURQKQor
CSAqIHNvIE9fTk9OQkxPQ0sgd2lsbCBub3QgY29uZnVzZSB1bnByZXBhcmVkIGNvZGUgY2F1
c2luZworCSAqIGl0IHRvIGNvcnJ1cHQgbWVzc2FnZXMuCisJICogSXQgZ2VuZXJhbGx5IHNh
ZmVzdCB0byBoYXZlIE9fTk9OQkxPQ0sgd2hlbiBkb2luZyBhbiBhY2NlcHQKKwkgKiBhcyBp
ZiB3ZSBnZXQgYSBSU1QgYWZ0ZXIgdGhlIFNZTiBhbmQgYmVmb3JlIGFjY2VwdCBydW5zLAor
CSAqIHdlIGNhbiBibG9jayBkZXNwaXRlIGJlaW5nIHRvbGQgdGhlcmUgd2FzIGFuIGFjY2Vw
dGFibGUKKwkgKiBjb25uZWN0aW9uLgorCSAqLworCWlmICgoZmxhZ3MgPSBmY250bChzb2Nr
LCBGX0dFVEZMKSkgPCAwKQorCQlwZXJyb3IoXygic3ZjX3NvY2tldDogY2FuJ3QgZ2V0IHNv
Y2tldCBmbGFncyIpKTsKKwllbHNlIGlmIChmY250bChzb2NrLCBGX1NFVEZMLCBmbGFnc3xP
X05PTkJMT0NLKSA8IDApCisJCXBlcnJvcihfKCJzdmNfc29ja2V0OiBjYW4ndCBzZXQgc29j
a2V0IGZsYWdzIikpOworCWVsc2UKKwkJcmV0dXJuIHNvY2s7CisKKwkodm9pZCkgX19jbG9z
ZShzb2NrKTsKKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQKIHN2Y19zb2NrZXQgKHVf
bG9uZyBudW1iZXIsIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCByZXVzZSkKIHsKQEAg
LTExMywzOCArMTQ2LDcgQEAgc3ZjX3NvY2tldCAodV9sb25nIG51bWJlciwgaW50IHR5cGUs
IGludAogICAgICAgc29jayA9IC0xOwogICAgIH0KIAotICBpZiAoc29jayA+PSAwKQotICAg
IHsKLQkgICAgLyogVGhpcyBzb2NrZXQgbWlnaHQgYmUgc2hhcmVkIGFtb25nIG11bHRpcGxl
IHByb2Nlc3NlcwotCSAgICAgKiBpZiBtb3VudGQgaXMgcnVuIG11bHRpLXRocmVhZGVkLiAg
U28gaXQgaXMgc2FmZXN0IHRvCi0JICAgICAqIG1ha2UgaXQgbm9uLWJsb2NraW5nLCBlbHNl
IGFsbCB0aHJlYWRzIG1pZ2h0IHdha2UKLQkgICAgICogb25lIHdpbGwgZ2V0IHRoZSBkYXRh
LCBhbmQgdGhlIG90aGVycyB3aWxsIGJsb2NrCi0JICAgICAqIGluZGVmaW5pdGVseS4KLQkg
ICAgICogSW4gYWxsIGNhc2VzLCB0cmFuc2FjdGlvbiBvbiB0aGlzIHNvY2tldCBhcmUgYXRv
bWljCi0JICAgICAqIChhY2NlcHQgZm9yIFRDUCwgcGFja2V0LXJlYWQgYW5kIHBhY2tldC13
cml0ZSBmb3IgVURQKQotCSAgICAgKiBzbyBPX05PTkJMT0NLIHdpbGwgbm90IGNvbmZ1c2Ug
dW5wcmVwYXJlZCBjb2RlIGNhdXNpbmcKLQkgICAgICogaXQgdG8gY29ycnVwdCBtZXNzYWdl
cy4KLQkgICAgICogSXQgZ2VuZXJhbGx5IHNhZmVzdCB0byBoYXZlIE9fTk9OQkxPQ0sgd2hl
biBkb2luZyBhbiBhY2NlcHQKLQkgICAgICogYXMgaWYgd2UgZ2V0IGEgUlNUIGFmdGVyIHRo
ZSBTWU4gYW5kIGJlZm9yZSBhY2NlcHQgcnVucywKLQkgICAgICogd2UgY2FuIGJsb2NrIGRl
c3BpdGUgYmVpbmcgdG9sZCB0aGVyZSB3YXMgYW4gYWNjZXB0YWJsZQotCSAgICAgKiBjb25u
ZWN0aW9uLgotCSAgICAgKi8KLQlpbnQgZmxhZ3M7Ci0JaWYgKChmbGFncyA9IGZjbnRsKHNv
Y2ssIEZfR0VURkwpKSA8IDApCi0JICB7Ci0JICAgICAgcGVycm9yIChfKCJzdmNfc29ja2V0
OiBjYW4ndCBnZXQgc29ja2V0IGZsYWdzIikpOwotCSAgICAgICh2b2lkKSBfX2Nsb3NlIChz
b2NrKTsKLQkgICAgICBzb2NrID0gLTE7Ci0JICB9Ci0JZWxzZSBpZiAoZmNudGwoc29jaywg
Rl9TRVRGTCwgZmxhZ3N8T19OT05CTE9DSykgPCAwKQotCSAgewotCSAgICAgIHBlcnJvciAo
Xygic3ZjX3NvY2tldDogY2FuJ3Qgc2V0IHNvY2tldCBmbGFncyIpKTsKLQkgICAgICAodm9p
ZCkgX19jbG9zZSAoc29jayk7Ci0JICAgICAgc29jayA9IC0xOwotCSAgfQotICAgIH0KLQot
ICByZXR1cm4gc29jazsKKyAgcmV0dXJuIHN2Y3NvY2tfbm9uYmxvY2soc29jayk7CiB9CiAK
IC8qCi0tLSBuZnMtdXRpbHMtMS4zLjEvc3VwcG9ydC9uZnMvcnBjbWlzYy5jCTIwMTQtMTAt
MDggMjE6MjI6MDQuMDAwMDAwMDAwICswMjAwCisrKyBuZnMtdXRpbHMtMS4zLjEvc3VwcG9y
dC9uZnMvcnBjbWlzYy5jCTIwMTQtMTAtMDggMjE6MjI6MzYuMDAwMDAwMDAwICswMjAwCkBA
IC0xMDQsNyArMTA0LDcgQEAgbWFrZXNvY2soaW50IHBvcnQsIGludCBwcm90bykKIAkJcmV0
dXJuIC0xOwogCX0KIAotCXJldHVybiBzb2NrOworCXJldHVybiBzdmNzb2NrX25vbmJsb2Nr
KHNvY2spOwogfQogCiB2b2lkCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoKRnJvbTogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMu
ZnVqaXRzdS5jb20+CkRhdGU6IFRodSwgMDkgT2N0IDIwMTQgMTM6MDc6MzMgKzAyMDAKU3Vi
amVjdDogW1BBVENIXSBuZnMtdXRpbDogbW91bnRkOiBzZXQgbm9uYmxvY2tpbmcgbW9kZSB3
aXRoIGxpYnRpcnBjCgpJZiBtb3VudGQgaXMgYnVpbHQgd2l0aCBsaWJ0aXJwYyB0aGUgdGNw
IGxpc3RlbmVycyBhbmQgdGhlIHNvY2tldHMKd2FpdGluZyBmb3IgVURQIG1lc3NhZ2VzIGFy
ZSBub3QgaW4gbm9uLWJsb2NraW5nIG1vZGUuIFRodXMgaWYgcnVubmluZwp3aXRoIG11bHRp
cGxlIHRocmVhZHMgKC10IFhYKSwgYWxsIHRocmVhZHMgd2lsbCB3YWtlIHVwIGZyb20gc2Vs
ZWN0IG9uCmEgY29ubmVjdGlvbiByZXF1ZXN0IG9yIGEgVURQIG1lc3NhZ2UsIGJ1dCBvbmx5
IG9uZSB0aHJlYWQgd2lsbCBzdWNjZWVkLgpBbGwgb3RoZXJzIHdpbGwgd2FpdCBvbiBhY2Nl
cHQoKSBvciByZWFkKCkgZm9yIHRoZSBuZXh0IGV2ZW50LgoKU2lnbmVkLW9mZi1ieTogQm9k
byBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20+Ci0tLQoKLS0tIG5mcy11
dGlscy0xLjIuMy9zdXBwb3J0L25mcy9zdmNfY3JlYXRlLmMJMjAxNC0xMC0wOCAyMTozOTow
MS4wMDAwMDAwMDAgKzAyMDAKKysrIG5mcy11dGlscy0xLjIuMy9zdXBwb3J0L25mcy9zdmNf
Y3JlYXRlLmMJMjAxNC0xMC0wOCAyMjoyMDowMi4wMDAwMDAwMDAgKzAyMDAKQEAgLTI3Nyw2
ICsyNzcsMTIgQEAKIAkJCSIoJXMsICV1LCAlcykiLCBuYW1lLCB2ZXJzaW9uLCBuY29uZi0+
bmNfbmV0aWQpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKHN2Y3NvY2tfbm9uYmxvY2soeHBy
dC0+eHBfZmQpIDwgMCkgeworCQkvKiBjbG9zZSgpIGFscmVhZHkgZG9uZSBieSBzdmNzb2Nr
X25vbmJsb2NrKCkgKi8KKwkJeHBydC0+eHBfZmQgPSBSUENfQU5ZRkQ7CisgICAgICAgICAg
ICAgICAgU1ZDX0RFU1RST1koeHBydCk7CisJCXJldHVybiAwOworCX0KIAogCWlmICghc3Zj
X3JlZyh4cHJ0LCBwcm9ncmFtLCB2ZXJzaW9uLCBkaXNwYXRjaCwgbmNvbmYpKSB7CiAJCS8q
IHN2Y19yZWcoMykgZGVzdHJveXMgQHhwcnQgaW4gdGhpcyBjYXNlICovCkBAIC0zMzIsNiAr
MzM4LDcgQEAKIAkJaW50IGZkOwogCiAJCWZkID0gc3ZjX2NyZWF0ZV9zb2NrKGFpLT5haV9h
ZGRyLCBhaS0+YWlfYWRkcmxlbiwgbmNvbmYpOworCQlmZCA9IHN2Y3NvY2tfbm9uYmxvY2so
ZmQpOwogCQlpZiAoZmQgPT0gLTEpCiAJCQlnb3RvIG91dF9mcmVlOwogCgotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKRnJvbTogQm9kbyBT
dHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20+CkRhdGU6IFRodSwgMDkgT2N0
IDIwMTQgMTM6MDY6MTkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBuZnMtdXRpbDogbW91bnRk
OiBzZXQgbGlidGlycGMgbm9uYmxvY2tpbmcgbW9kZSB0byBhdm9pZCBET1MKClRoaXMgcGF0
Y2ggaXMgZXhwZXJpbWVudGFsLiBJbiB3b3JrcyBmaW5lIGluIHRoYXQgaXQgcmVtb3ZlcyB0
aGUgdnVsbmVyYWJpbGl0eQphZ2FpbnN0IGEgRE9TIGF0dGFjay4gcnBjLm1vdW50ZCBjYW4g
YmUgYmxvY2tlZCBieSBhIGJhZCBjbGllbnQsIHRoYXQgc2VuZHMKbWFueSBSUEMgcmVxdWVz
dHMgYnkgbmV2ZXIgcmVhZHMgdGhlIHJlc3BvbnNlcy4gVGhpcyBtaWdodCBoYXBwZW4gaW50
ZW50aW9uYWxseQpvciBjYXVzZWQgYnkgYSB3cm9uZyBuZXR3b3JrIGNvbmZpZyAoTVRVKS4K
VGhlIHBhdGNoIHN3aXRjaGVzIG9uIHRoZSBub25ibG9ja2luZyBtb2RlIG9mIGxpYnRpcnBj
LiBJbiB0aGF0IG1vZGUgd3JpdGVzIGNhbgpibG9jayBmb3IgYSBtYXguIG9mIDIgc2Vjb25k
cy4gQXR0YWNrZXIgYXJlIGZvcmNlZCB0byBzZW5kIHJlcXVlc3RzIHNsb3dlciwgYXMKbGli
dGlycGMgd2lsbCBjbG9zZSBhIGNvbm5lY3Rpb24gaWYgaXQgZmluZHMgdHdvIHJlcXVlc3Rz
IHRvIHJlYWQgYXQgdGhlIHNhbWUKdGltZS4KSSBkbyBub3Qga25vdywgd2hldGhlciBzZXR0
aW5nIE1BWFJFQyBjb3VsZCBjYXVzZSB0cm91YmxlIGUuZy4gd2l0aCBiaWcgcmVwbGllcy4K
IAoKU2lnbmVkLW9mZi1ieTogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRz
dS5jb20+Ci0tLQoKLS0tIG5mcy11dGlscy0xLjIuMy9zdXBwb3J0L25mcy9zdmNfY3JlYXRl
LmMJMjAxNC0xMC0wOSAxMjowOToxNS4wMDAwMDAwMDAgKzAyMDAKKysrIG5mcy11dGlscy0x
LjIuMy9zdXBwb3J0L25mcy9zdmNfY3JlYXRlLmMJMjAxNC0xMC0wOSAxMjoxMzozMi4wMDAw
MDAwMDAgKzAyMDAKQEAgLTQ5LDYgKzQ5LDggQEAKIAogI2lmZGVmIEhBVkVfTElCVElSUEMK
IAorI2luY2x1ZGUgPHJwYy9ycGNfY29tLmg+CisKICNkZWZpbmUgU1ZDX0NSRUFURV9YUFJU
X0NBQ0hFX1NJWkUJKDgpCiBzdGF0aWMgU1ZDWFBSVCAqc3ZjX2NyZWF0ZV94cHJ0X2NhY2hl
W1NWQ19DUkVBVEVfWFBSVF9DQUNIRV9TSVpFXSA9IHsgTlVMTCwgfTsKIApAQCAtNDAxLDYg
KzQwMyw3IEBACiAJY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBjcmVhdGVfc2lnYWN0aW9uID0g
ewogCQkuc2FfaGFuZGxlcgk9IFNJR19JR04sCiAJfTsKKwlpbnQgbWF4cmVjID0gUlBDX01B
WERBVEFTSVpFOwogCXVuc2lnbmVkIGludCB2aXNpYmxlLCB1cCwgc2VydnBvcnQ7CiAJc3Ry
dWN0IG5ldGNvbmZpZyAqbmNvbmY7CiAJdm9pZCAqaGFuZGxlcDsKQEAgLTQxMiw2ICs0MTUs
MjAgQEAKIAkgKi8KIAkodm9pZClzaWdhY3Rpb24oU0lHUElQRSwgJmNyZWF0ZV9zaWdhY3Rp
b24sIE5VTEwpOwogCisJLyoKKwkgKiBTZXR0aW5nIE1BWFJFQyBhbHNvIGVuYWJsZXMgbm9u
LWJsb2NraW5nIG1vZGUgZm9yIHRjcCBjb25uZWN0aW9ucy4KKwkgKiBUaGlzIGF2b2lkcyBE
T1MgYXR0YWNrcyBieSBhIGNsaWVudCBzZW5kaW5nIG1hbnkgcmVxdWVzdHMgYnV0IG5ldmVy
CisJICogcmVhZGluZyB0aGUgcmVwbHk6CisJICogLSBpZiBhIHNlY29uZCByZXF1ZXN0IGFs
cmVhZHkgaXMgcHJlc2VudCBmb3IgcmVhZGluZyBpbiB0aGUgc29ja2V0LAorCSAqICAgYWZ0
ZXIgdGhlIGZpcnN0IHJlcXVlc3QganVzdCB3YXMgcmVhZCwgbGlidGlycGMgd2lsbCBicmVh
ayB0aGUKKwkgKiAgIGNvbm5lY3Rpb24uIFRodXMgYW4gYXR0YWNrZXIgY2FuJ3Qgc2ltcGx5
IHNlbmQgcmVxdWVzdHMgYXMgZmFzdCBhcworCSAqICAgaGUgY2FuIHdpdGhvdXQgd2FpdGlu
ZyBmb3IgdGhlIHJlc3BvbnNlLgorCSAqIC0gaWYgdGhlIHdyaXRlIGJ1ZmZlciBvZiB0aGUg
c29ja2V0IGlzIGZ1bGwsIHRoZSBuZXh0IHdyaXRlKCkgd2lsbAorCSAqICAgZmFpbCB3aXRo
IEVBR0FJTi4gbGlidGlycGMgd2lsbCByZXRyeSB0aGUgd3JpdGUgaW4gYSBsb29wIGZvciBt
YXguCisJICogICAyIHNlY29uZHMuIElmIHdyaXRlIHN0aWxsIGZhaWxzLCB0aGUgY29ubmVj
dGlvbiB3aWxsIGJlIGNsb3NlZC4KKwkgKi8gICAKKwlycGNfY29udHJvbChSUENfU1ZDX0NP
Tk5NQVhSRUNfU0VULCAmbWF4cmVjKTsKKwogCWhhbmRsZXAgPSBzZXRuZXRjb25maWcoKTsK
IAlpZiAoaGFuZGxlcCA9PSBOVUxMKSB7CiAJCXhsb2coTF9FUlJPUiwgIkZhaWxlZCB0byBh
Y2Nlc3MgbG9jYWwgbmV0Y29uZmlnIGRhdGFiYXNlOiAlcyIsCg==



2014-11-05 05:15:15

by NeilBrown

[permalink] [raw]
Subject: Re: rpc.mountd can be blocked by a bad client


Hi Bodo,

I just discovered that you sent some patches to address this.
I found them here:
http://www.spinics.net/lists/linux-nfs/msg47235.html

but I don't remember ever seeing them (probably my fault), and they are all
in one big email message which doesn't immediately look like it contains
patches.

Could you please resend the patches to the list and separate emails. That
will make it a lot easier to review and discuss.

Thanks,
NeilBrown


Attachments:
(No filename) (811.00 B)
OpenPGP digital signature

2014-11-05 14:35:39

by Strösser, Bodo

[permalink] [raw]
Subject: RE: rpc.mountd can be blocked by a bad client

Hi Neil,

yes, I'll do.

I know, it wasn't a good idea to mix text and patches together in
one big mail. I did so, because I have been in a great hurry and
my normal environment for sending patches wasn't available ...

So, sorry for the trouble.

Best regards,
Bodo

> -----Original Message-----
> From: NeilBrown [mailto:[email protected]]
> Sent: Wednesday, November 05, 2014 6:15 AM
> To: Str?sser, Bodo
> Cc: [email protected]; [email protected]
> Subject: Re: rpc.mountd can be blocked by a bad client
>
>
> Hi Bodo,
>
> I just discovered that you sent some patches to address this.
> I found them here:
> http://www.spinics.net/lists/linux-nfs/msg47235.html
>
> but I don't remember ever seeing them (probably my fault), and they are all
> in one big email message which doesn't immediately look like it contains
> patches.
>
> Could you please resend the patches to the list and separate emails. That
> will make it a lot easier to review and discuss.
>
> Thanks,
> NeilBrown