From owner-freebsd-net@FreeBSD.ORG Fri Jul 27 14:01:06 2007 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 317D916A417 for ; Fri, 27 Jul 2007 14:01:06 +0000 (UTC) (envelope-from agile.quad@gmail.com) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.239]) by mx1.freebsd.org (Postfix) with ESMTP id DFB9713C48E for ; Fri, 27 Jul 2007 14:01:05 +0000 (UTC) (envelope-from agile.quad@gmail.com) Received: by wr-out-0506.google.com with SMTP id i23so485879wra for ; Fri, 27 Jul 2007 07:01:05 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; b=XuTpJphJ9oYVe4q3HDchhwDIYqdv8PKkegfs21p5ZM3TDAe7WIXZ/nQtCQcNrzb2qt79nVPHCJQTys84iXf06XNsvBFuqVBEv/SMuQLBBlbakjsQyrxz3aiCsPPGoCTtSWu1fVKbrRj+sbhdpUyIXQnvd6N6OKKdBdR/I01sn18= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=Wxh6z0+3jvyZ8dX0Vt72Bf47cmUh79U2Xr6uTTXawVShxMMcz7ukL0Rl+i4daHs++UM61qSsnZYGRG9PZBDl4/1UYqM4iHdjQj89I3Nig0tgXZZ0O6weECpGpvTDhHjAgEGbUwgvQIjmsa/Ws2cydbg/OBn6cNDASIlKa0g1AdY= Received: by 10.78.56.19 with SMTP id e19mr741431hua.1185543327705; Fri, 27 Jul 2007 06:35:27 -0700 (PDT) Received: by 10.78.137.9 with HTTP; Fri, 27 Jul 2007 06:35:27 -0700 (PDT) Message-ID: Date: Fri, 27 Jul 2007 16:35:27 +0300 From: Oleg To: freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5712_30337467.1185543327669" X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: reincarnation of bug kern/95665: [if_tun] "ping: sendto: No buffer space available" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Jul 2007 14:01:06 -0000 ------=_Part_5712_30337467.1185543327669 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi All, I can reproduce this bug easly with tap echo server (attached here), that I was small reworked. steps (almost same): (All ip addresses/macs hardcoded in code). On first machine run echo server, on second add root@pc2# route add -net 192.168.125.1/24 ip-addr-of-first-machine and root@pc2# ping -f -n 192.168.125.2 While flood pinging, on first machine run ping for checking: root@pc1# ping 192.168.125.2 PING 192.168.125.2 (192.168.125.2): 56 data bytes 64 bytes from 192.168.125.2 : icmp_seq=0 ttl=64 time=0.554 ms 64 bytes from 192.168.125.2: icmp_seq=1 ttl=64 time=0.180 ms ... wait for a while ... ping: sendto: No buffer space available ping: sendto: No buffer space available ping: sendto: No buffer space available With best regards, Oleg Dolgov. ------=_Part_5712_30337467.1185543327669 Content-Type: application/octet-stream; name=tun_icmp_echo_reply.c Content-Transfer-Encoding: base64 X-Attachment-Id: f_f4mpfgml Content-Disposition: attachment; filename="tun_icmp_echo_reply.c" LyoKUGluZyByZXBseSBzZXJ2ZXI6LSkgdXNpbmcgVFVOIChGcmVlQlNEIDYuMCkuCgpUZXN0IG9y aWdpbmFsbHkgbWFkZSB0byB0ZXN0IHRoZSB0aHJvdXB1dCBvZiBUVU4gdXNpbmcgJ3BpbmcnIGlu IGZsb29kCnBpbmcgbW9kZS4gSG93ZXZlciB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiBGcmVl QlNEIHRoYXQgd2hlbiBzZW5kaW5nCmEgbWFzc2l2ZSBhbW91bnQgb2YgcmVxdWVzdHMgdG8gdGhl IG9wZW5lZCBUVU4gaW50ZXJmYWNlIGl0IHdpbGwgImhhbmciLgpQaW5nIHdpbGwgc2F5ICJwaW5n OiBzZW5kdG86IE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiCgpJIGhhdmUgc2VhcmNoZWQgZ29v Z2xlIGZvciB0aGlzIGVycm9yIGFuZCBtYW55IHBlb3BsZSBoYXZlIHJlcG9ydGVkIGl0CndpdGgg bm8gc29sdXRpb24gcHJlc2VudGVkLiBUaGUgcHJvYmxlbSBzZWVtIHRvIGV4aXN0IGZvciBhIG51 bWJlciBvZgpuZXR3b3JrIGRyaXZlcnMgKEkgc3VmZmVyIHRoaXMgd2l0aCB0aGUgbnZlIGRyaXZl ciBhcyB3ZWxsKS4gVGhpcyBpcwphIHNpbXBsZSB0ZXN0IHByb2dyYW0gdG8gcHJvZHVjZSB0aGlz IGJ1ZyB3aXRoIGEgVFVOIGludGVyZmFjZS4KClRoaXMgdGVzdCBhc3N1bWVzIHlvdSBoYXZlIGEg bGFuIHdpdGggdHdvIFBDcy4gVGhlIEZyZWVCU0QgYm94IGlzIFBDMS4KCiAgKy0tIExBTiAtLSsK ICB8ICAgICAgICAgfAogUEMxICAgICAgIFBDMgoKSSdtIGxhenkgc28gdG8gY29uZmlndXJlIHRo ZSBUVU4gaW50ZXJmYWNlIG9uIFBDMSBkbzoKIyBzeXNjdGwgbmV0LmluZXQuaXAuZm9yd2FyZGlu Zz0xCiMgY2F0IC9kZXYvdGFwCiMgXkMKIyBpZmNvbmZpZwoKWW91IHNob3VsZCBzZWUgYXQgbGVh c3Qgb25lIHRhcCBpbnRlcmZhY2UgbGlzdGVkLiBSZXBsYWNlIHRoZQpkZWZpbmUgVFVOX0RFVklD RSBpbiB0aGlzIGZpbGUgd2l0aCB0aGUgbGlzdGVkIGludGVyZmFjZS4gZS5nLgovZGV2L3RhcDEK CkNvbXBpbGUgdGhpcyBmaWxlIGxpa2UgdGhpczoKIyBnY2MgLW8gdGFwX2ljbXBfZWNob19yZXBs eSB0dW5faWNtcF9lY2hvX3JlcGx5LmMKClJ1biB0aGUgcHJvZ3JhbToKIyAuL3RhcF9pY21wX2Vj aG9fcmVwbHkKCkNvbmZpZ3VyZSB0aGUgVFVOIGludGVyZmFjZS4gVGhlIHJlYXNvbiBpdCdzIGRv bmUgbm93IGlzIGJlY2F1c2Ugd2hlbgp0aGUgVFVOIGRldmljZSBpcyBvcGVuZWQgYnkgdGhlIHBy b2dyYW0gdGhlIHJvdXRlIGlzIHJlbW92ZWQuCgpUaGUgSVAgYWRkcmVzcyAxMC4wLjAuNCBzaG91 bGQgYmUgcmVwbGFjZWQgYnkgdGhlIElQIGFkZHJlc3Mgb2YgdGhlCmV4dGVybmFsIGludGVyZmFj ZSBvZiBQQzEuCgojIGlmY29uZmlnIHRhcDEgaW5ldCAxMC4wLjAuNCAxOTIuMTY4LjI1NC4zMyBu ZXRtYXNrIDI1NS4yNTUuMjU1LjI1NSAKCk9uIFBDMSwgJ2lmY29uZmlnJyBzaG91bGQgc2hvdyB0 aGlzOgoKdGFwMTogZmxhZ3M9ODA1MTxVUCxQT0lOVE9QT0lOVCxSVU5OSU5HLE1VTFRJQ0FTVD4g bXR1IDE1MDAKICAgICAgICBpbmV0IDEwLjAuMC40IC0tPiAxOTIuMTY4LjI1NC4zMyBuZXRtYXNr IDB4ZmZmZmZmZmYgCiAgICAgICAgaW5ldDYgZmU4MDo6MjEzOmQ0ZmY6ZmU4MzplMzc4JXRhcDEg cHJlZml4bGVuIDY0IHNjb3BlaWQgMHg2IAogICAgICAgIE9wZW5lZCBieSBQSUQgMTI1MwoKJ25l dHN0YXQgLW5yJyBzaG91bGQgc2hvdyB0aGlzOgoKMTkyLjE2OC4yNTQuMzMgICAgIDEwLjAuMC40 ICAgICAgICAgICBVSCAgICAgICAgICAwICAgICAgICAwICAgdGFwMQoKT2theSwgbm93IHRvIHRo ZSB0ZXN0cy4gSWYgeW91IGZsb29kIHBpbmcgdGhpcyBwcm9ncmFtIGxvY2FsbHkgZnJvbQpQQzEg eW91IHdpbGwgc3VmZmVyIGZyb20gdGhlICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIiBzeW5k cm9tZQphZnRlciBzb21lIFggdGhvdXNhbmQgcGFja2V0cy4gSWYgeW91IG9uIHRoZSBvdGhlciBo YW5kIGZsb29kIHBpbmcKZnJvbSBQQzIgb3ZlciB0aGUgTEFOIGV2ZXJ5dGhpbmcgd2lsbCBiZSBk YW5keS4gUHJvYmFibHkgYmVjYXVzZSB0aGUKTEFOIGlzIHNsb3dlci4gSSBoYXZlIHNlbnQgMSww MDAsMDAwIHBhY2tldHMgdGhpcyB3YXkgd2l0aCBubyBwcm9ibGVtLgoKRG8gdGhpcyBsb2NhbGx5 OgojIHBpbmcgLWMgMTAwMDAwIC1zIDk3MiAtZiAtbiAtcSAxOTIuMTY4LjI1NC4zMwoKWW91IGNh biBydW4gdGhlICdpZnN0YXQnIHByb2dyYW0gaW4gYW5vdGhlciB0ZXJtaW5hbCB3aW5kb3cgdG8g c2VlCndoZW4gbm90aGluZyBnb2VzIHRvIHRoZSBUVU4gaW50ZXJmYWNlIGFueW1vcmUuCgpJZiB0 aGUgcGluZyBjb21tYW5kIGFib3ZlIHNlZW0gdG8gaGF2ZSBmcm96ZW4sIGRvIGEgXkMgdG8gYWJv cnQgaXQuCklmIGl0IGRvZXNuJ3QgZnJlZXplLCB1cCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdG8g c2VuZC4KCiMgcGluZyAxOTIuMTY4LjI1NC4zMwpQSU5HIDE5Mi4xNjguMjU0LjMzICgxOTIuMTY4 LjI1NC4zMyk6IDU2IGRhdGEgYnl0ZXMKcGluZzogc2VuZHRvOiBObyBidWZmZXIgc3BhY2UgYXZh aWxhYmxlCnBpbmc6IHNlbmR0bzogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQoKVm9pbGEhCgpT ZW5kaW5nIGZld2VyIHBhY2tldHMgKHNvIHBpbmcgZG9lc24ndCBoYW5nKSBjb25maXJtIHRoYXQg bm8gcGFja2V0cwphcmUgbG9zdC4gU28gSSBkb24ndCBzZWUgaG93IGFueSBidWZmZXIgc3BhY2Ug Y291bGQgYmUgdXNlZCB1cC4KCiMgcGluZyAtYyAyMDAwMCAtcyA5NzIgLWYgLW4gLXEgMTkyLjE2 OC4yNTQuMzMKUElORyAxOTIuMTY4LjI1NC4zMyAoMTkyLjE2OC4yNTQuMzMpOiA5NzIgZGF0YSBi eXRlcwoKLS0tIDE5Mi4xNjguMjU0LjMzIHBpbmcgc3RhdGlzdGljcyAtLS0KMjAwMDAgcGFja2V0 cyB0cmFuc21pdHRlZCwgMjAwMDAgcGFja2V0cyByZWNlaXZlZCwgMCUgcGFja2V0IGxvc3MKcm91 bmQtdHJpcCBtaW4vYXZnL21heC9zdGRkZXYgPSAwLjAxMy8wLjAyMC8wLjE5MS8wLjAwNCBtcwoK ClRvIHBpbmcgZnJvbSBQQzIgeW91IGhhdmUgdG8gc2V0dXAgYSByb3V0ZSB0byBQQzEgb2YgY291 cnNlIGJ1dCBJIGRvbid0CmRlc2NyaWJlIGhvdyB0byBkbyB0aGF0LgoKUmVtZW1iZXIgdGhhdCB5 b3UgaGF2ZSB0byBjb25maWd1cmUgdGhlIHRhcCBpbnRlcmZhY2Ugd2l0aCBpZmNvbmZpZwpldmVy eXRpbWUgeW91IHJlc3RhcnQgdGhpcyBwcm9ncmFtIChzaW5jZSB0aGUgcm91dGUgaXMgcmVtb3Zl ZCB3aGVuCnRoZSB0YXAgaW50ZXJmYWNlIGlzIG9wZW5lZCkuCgpTb21lIGluZm9ybWF0aW9uIGFi b3V0IFBDMSBpbiBteSBjYXNlOgpDUFU6IEFNRCBBdGhsb24odG0pIDY0IFgyIER1YWwgQ29yZSBQ cm9jZXNzb3IgMzgwMCsgKDIwMTAuMzEtTUh6IDY4Ni1jbGFzcyBDUFUpCiAgT3JpZ2luID0gIkF1 dGhlbnRpY0FNRCIgIElkID0gMHgyMGZiMSAgU3RlcHBpbmcgPSAxCiAgRmVhdHVyZXM9MHgxNzhi ZmJmZjxGUFUsVk1FLERFLFBTRSxUU0MsTVNSLFBBRSxNQ0UsQ1g4LEFQSUMsU0VQLE1UUlIsUEdF LE1DQSxDTU9WLFBBVCxQU0UzNixDTEZMVVMKSCxNTVgsRlhTUixTU0UsU1NFMixIVFQ+CiAgRmVh dHVyZXMyPTB4MTxTU0UzPgogIEFNRCBGZWF0dXJlcz0weGUyNTAwODAwPFNZU0NBTEwsTlgsTU1Y Kyw8YjI1PixMTSwzRE5vdyssM0ROb3c+CiAgSHlwZXJ0aHJlYWRpbmc6IDIgbG9naWNhbCBDUFVz CnJlYWwgbWVtb3J5ICA9IDEwNzM2NzYyODggKDEwMjMgTUIpCmF2YWlsIG1lbW9yeSA9IDEwMzcz OTM5MjAgKDk4OSBNQikKQUNQSSBBUElDIFRhYmxlOiA8TnZpZGlhIEFXUkRBQ1BJPgpGcmVlQlNE L1NNUDogTXVsdGlwcm9jZXNzb3IgU3lzdGVtIERldGVjdGVkOiAyIENQVXMKIGNwdTAgKEJTUCk6 IEFQSUMgSUQ6ICAwCiBjcHUxIChBUCk6IEFQSUMgSUQ6ICAxCiovCgojaW5jbHVkZSA8c3RkaW8u aD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8ZmNudGwuaD4KCiNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5o PgojaW5jbHVkZSA8bmV0L2lmX2FycC5oPgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBVODsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBVMTY7CnR5cGVkZWYgdW5zaWduZWQgaW50ICAgVTMyOwoKI2Rl ZmluZSBUQVBfREVWSUNFICAgInRhcDMiCiNkZWZpbmUgVEFQX01BQyAgICAgICIwMDoxMzpFQzow MDowMDpBRSIKI2RlZmluZSBUQVBfSVAgICAgICAgIjE5Mi4xNjguMTI1LjIiCgojZGVmaW5lIFRB UF9JTkVUICAgICAiMTkyLjE2OC4xMjUuMSIKI2RlZmluZSBUQVBfSU5FVF9NQUMgIjAwOjEzOkVD OjEyOjM0OjU2IgojZGVmaW5lIFRBUF9NQVNLICAgICAiMjU1LjI1NS4yNTUuMCIKI2RlZmluZSBU QVBfQkNBU1QgICAgIjE5Mi4xNjguMTI1LjI1NSIKCnR5cGVkZWYgc3RydWN0CnsKICAgIFU4ICB2 ZXJfaGRyX2xlbjsgICAgIC8qIFZlcnNpb24sIEhlYWRlciBMZW5ndGggKGluIHdvcmRzKSAqLwog ICAgVTggIHRvczsgICAgICAgICAgICAgLyogVHlwZSBvZiBTZXJ2aWNlICovCiAgICBVMTYgcGt0 X2xlbjsgICAgICAgICAvKiBQYWNrZXQgTGVuZ3RoIChpbiBieXRlcykgKi8KICAgIFUxNiBpZDsg ICAgICAgICAgICAgIC8qIElkZW50aWZpY2F0aW9uICovCiAgICBVMTYgZmxhZ3NfZnJhZ19vZmY7 ICAvKiBGbGFncywgRnJhZ21lbnQgT2Zmc2V0Ki8KICAgIFU4ICB0dGw7ICAgICAgICAgICAgIC8q IFRpbWUgdG8gTGl2ZSAqLwogICAgVTggIHByb3RvOyAgICAgICAgICAgLyogUHJvdG9jb2xsICov CiAgICBVMTYgY2tzdW07ICAgICAgICAgICAvKiBIZWFkZXIgQ2hlY2tzdW0gKi8KICAgIFUzMiBz X2FkZHI7ICAgICAgICAgIC8qIFNvdXJjZSBBZGRyZXNzICovCiAgICBVMzIgZF9hZGRyOyAgICAg ICAgICAvKiBEZXN0aW5hdGlvbiBBZGRyZXNzICovCn0gSXBIZWFkZXJfdDsKCnR5cGVkZWYgc3Ry dWN0CnsKICAgIFU4ICB0eXBlOwogICAgVTggIGNvZGU7CiAgICBVMTYgY2tzdW07CiAgICBVMTYg aWQ7CiAgICBVMTYgc2Vxbm87Cn0gSWNtcEhlYWRlcl90OwoKVTMyIElwSGVhZGVyX0dldEhlYWRl ckxlbmd0aChJcEhlYWRlcl90KiBwKTsKClUzMiBJcEhlYWRlcl9HZXRQYWNrZXRMZW5ndGgoSXBI ZWFkZXJfdCogcCk7CgpVMzIgSXBIZWFkZXJfR2V0UHJvdG9jb2xsKElwSGVhZGVyX3QqIHApOwoK dm9pZCBJcEhlYWRlcl9Td2FwQWRkcihJcEhlYWRlcl90KiBwKTsKCnZvaWQgRXRoSGVhZGVyX1N3 YXBNYWMoc3RydWN0IGV0aGVyX2hlYWRlciogcCk7Cgp2b2lkIEFycEhlYWRlcl9Td2FwQWRkcihz dHJ1Y3QgYXJwaGRyICpwKTsKClUxNiBJcENrc3VtKFUxNiogZGF0YSwgaW50IG5fYnl0ZXMpOwoK dm9pZCBIZXhEdW1wKFU4KiBwLCBpbnQgbl9ieXRlcyk7CgovKgogKiBSZWFkIGZyb20gcHJldmlv dXNseSBzZXR1cCAvZGV2L3RhcFggZGV2aWNlLCBjYWxjdWxhdGUgSUNNUCBlY2hvIHJlcGx5IGFu ZCB3cml0ZSBpdCBiYWNrLgogKi8KaW50IG1haW4gKCkKewogICAgSXBIZWFkZXJfdCogICBpcF9o ZHI7CiAgICBJY21wSGVhZGVyX3QqIGljbXBfaGRyOwogICAgVTMyIGJ1Zls0MDBdOyAgLyogU2hv dWxkIGNvdmVyIE1UVSA9IDE1MDAgKi8KICAgIFUzMiBzX2FkZHI7CiAgICBVMzIgaXBfaGRyX2xl bjsKICAgIFUzMiBpcF9wa3RfbGVuOwogICAgVTMyIGljbXBfcGt0X2xlbjsKICAgIGludCB0YXBf ZmQ7CiAgICBpbnQgbl9wa3RzID0gMDsKCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aF9oZHI7Cglz dHJ1Y3QgYXJwaGRyICphcnBfaGRyOwoKICAgIHRhcF9mZCA9IG9wZW4oIi9kZXYvIlRBUF9ERVZJ Q0UsIE9fUkRXUik7CiAgICBpZiAodGFwX2ZkID09IC0xKQogICAgewogICAgICAgIHBlcnJvcigi ZmFpbGVkIHRvIG9wZW4gL2Rldi8iIFRBUF9ERVZJQ0UgIlxuIik7CiAgICAgICAgZXhpdCgxKTsK ICAgIH0KCglpZiAoc3lzdGVtKCJpZmNvbmZpZyAiIFRBUF9ERVZJQ0UgIiBsaW5rICIgVEFQX0lO RVRfTUFDKSAhPSAwIHx8CgkJc3lzdGVtKCJpZmNvbmZpZyAiIFRBUF9ERVZJQ0UgIiBpbmV0ICIg VEFQX0lORVQgIiBuZXRtYXNrICIgVEFQX01BU0sgIiBicm9hZGNhc3QgIiBUQVBfQkNBU1QpICE9 IDApCgl7CgkJcHJpbnRmKCJjYW50IGNvbmZpZ3VyZSAiIFRBUF9ERVZJQ0UgIiBkZXZpY2VcbiIp OwoJCWV4aXQoMik7Cgl9CgogICAgLyogcGFja2V0IChwa3QpID0gaGVhZGVyIChoZHIpICsgcGF5 bG9hZCAqLwogICAgCiAgICB3aGlsZSAoKGlwX3BrdF9sZW4gPSByZWFkKHRhcF9mZCwgYnVmLCBz aXplb2YoYnVmKSkpID49IHNpemVvZihJcEhlYWRlcl90KSkKICAgIHsKCQkvL3ByaW50ZigicmVh ZGVkICVkXG4iLCBpcF9wa3RfbGVuKTsKCQlldGhfaGRyID0gKHN0cnVjdCBldGhlcl9oZWFkZXIq KSBidWY7CgkJaWYgKG50b2hzKGV0aF9oZHItPmV0aGVyX3R5cGUpID09IEVUSEVSVFlQRV9BUlAp IHsKCQkJYXJwX2hkciA9IChzdHJ1Y3QgYXJwaGRyKikgKGV0aF9oZHIrMSk7CgkJCWlmIChudG9o cyhhcnBfaGRyLT5hcl9vcCkgIT0gQVJQT1BfUkVRVUVTVCkgewoJCQkJcHJpbnRmKCJFOiB1bmtu b3duIGFycCBvcCAweCUwOFhcbiIsIGFycF9oZHItPmFyX29wKTsKCQkJCWNvbnRpbnVlOwoJCQl9 CgkJCWlmIChpbmV0X2FkZHIoVEFQX0lQKSAhPSAqKHVfbG9uZyopYXJfdHBhKGFycF9oZHIpKSB7 CgkJCQlwcmludGYoIkU6IG5vdCBteSBpcCBhZGRyZXNzICVzXG4iLCBpbmV0X250b2EoKih1X2xv bmcqKWFyX3RwYShhcnBfaGRyKSkpOwoJCQkJY29udGludWU7CgkJCX0KCQkJYXJwX2hkci0+YXJf b3AgPSBodG9ucyhBUlBPUF9SRVBMWSk7CgkJCW1lbWNweShhcl90aGEoYXJwX2hkciksIGV0aGVy X2F0b24oVEFQX01BQyksIEVUSEVSX0FERFJfTEVOKTsKCQkJQXJwSGVhZGVyX1N3YXBBZGRyKGFy cF9oZHIpOwoJCQkvL21lbWNweShldGhfaGRyLT5ldGhlcl9kaG9zdCwgZXRoZXJfYXRvbihUQVBf TUFDKSwgRVRIRVJfQUREUl9MRU4pOwoJCQlFdGhIZWFkZXJfU3dhcE1hYyhldGhfaGRyKTsKCQkJ d3JpdGUodGFwX2ZkLCBidWYsIGlwX3BrdF9sZW4pOwoJCQkvL3ByaW50ZigiYXJwIHJlcGx5IHNl bmRlZCAoJWx1KVxuIiwgaXBfcGt0X2xlbik7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAobnRvaHMo ZXRoX2hkci0+ZXRoZXJfdHlwZSkgIT0gRVRIRVJUWVBFX0lQKSB7CgkJCXByaW50ZigiRTogdW5r bm93biBwYWNrZXQgMHglMDhYXG4iLCBldGhfaGRyLT5ldGhlcl90eXBlKTsKCQkJY29udGludWU7 CgkJfQogICAgICAgIGlwX2hkciAgICAgICA9IChJcEhlYWRlcl90KikoZXRoX2hkcisxKTsKICAg ICAgICBpcF9oZHJfbGVuICAgPSBJcEhlYWRlcl9HZXRIZWFkZXJMZW5ndGgoaXBfaGRyKTsKICAg ICAgICBpY21wX2hkciAgICAgPSAoSWNtcEhlYWRlcl90KikoKGNoYXIqKWlwX2hkciArIGlwX2hk cl9sZW4qNCk7CiAgICAgICAgaWNtcF9wa3RfbGVuID0gaXBfcGt0X2xlbiAtIChpcF9oZHJfbGVu ICogNCk7CgogICAgICAgIGlmIChpcF9wa3RfbGVuIC0gRVRIRVJfSERSX0xFTiAhPSBJcEhlYWRl cl9HZXRQYWNrZXRMZW5ndGgoaXBfaGRyKSkKICAgICAgICB7CiAgICAgICAgICAgIHByaW50Zigi RTogcmVhZCBkYXRhIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBJUCBwYWNrZXQgbGVuZ3RoICglZCAl ZClcbiIsCiAgICAgICAgICAgICAgICAgICBpcF9wa3RfbGVuLCBJcEhlYWRlcl9HZXRQYWNrZXRM ZW5ndGgoaXBfaGRyKSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAK ICAgICAgICBpZiAoSXBIZWFkZXJfR2V0UHJvdG9jb2xsKGlwX2hkcikgIT0gMSkKICAgICAgICB7 CiAgICAgICAgICAgIHByaW50ZigiRTogTm8gSUNNUCBJUCBwYWNrZXQhIik7CiAgICAgICAgICAg IGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoaWNtcF9wa3RfbGVuIDwg c2l6ZW9mKCppY21wX2hkcikpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIkU6IE5vIElD TVAgZGF0YSBpbiBJUCBwYWNrZXQhXG4iKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg fQogICAgICAgIAogICAgICAgIGlmIChpY21wX2hkci0+dHlwZSAhPSA4KQogICAgICAgIHsKICAg ICAgICAgICAgcHJpbnRmKCJFOiBObyBJQ01QIGVjaG8gbWVzc2FnZSBuX3BrdHM9JWQhXG4iLCBu X3BrdHMpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIElwSGVhZGVy X1N3YXBBZGRyKGlwX2hkcik7CiAgICAgICAgCiAgICAgICAgaWNtcF9oZHItPnR5cGUgID0gMDsK ICAgICAgICBpY21wX2hkci0+Y2tzdW0gPSAwOwoKICAgICAgICBpY21wX2hkci0+Y2tzdW0gPSBJ cENrc3VtKChVMTYqKWljbXBfaGRyLCBpY21wX3BrdF9sZW4pOwoKCQlFdGhIZWFkZXJfU3dhcE1h YyhldGhfaGRyKTsKCiAgICAgICAgLyogU2VuZCBiYWNrIHBhY2tldC4gKi8KICAgICAgICB3cml0 ZSh0YXBfZmQsIGJ1ZiwgaXBfcGt0X2xlbik7CiAgICAgICAgCiAgICAgICAgbl9wa3RzKys7CiAg ICB9CiAgICAKICAgIHByaW50ZigiVGhhdCdzIGVub3VnaCBmb3IgdG9kYXkga2lkcyFcbiIpOwog ICAgCiAgICBjbG9zZSh0YXBfZmQpOwogICAgCiAgICByZXR1cm4gMDsKfQoKCi8qIEdldCBoZWFk ZXIgbGVuZ3RoIGluIDQgYnl0ZSB3b3Jkcy4gKi8KVTMyIElwSGVhZGVyX0dldEhlYWRlckxlbmd0 aChJcEhlYWRlcl90KiBwKQp7CiAgICByZXR1cm4gcC0+dmVyX2hkcl9sZW4gJiAweDBGOwp9CgpV MzIgSXBIZWFkZXJfR2V0UGFja2V0TGVuZ3RoKElwSGVhZGVyX3QqIHApCnsKICAgIHJldHVybiBu dG9ocyhwLT5wa3RfbGVuKTsKfQoKVTMyIElwSGVhZGVyX0dldFByb3RvY29sbChJcEhlYWRlcl90 KiBwKQp7CiAgICByZXR1cm4gcC0+cHJvdG87Cn0KCnZvaWQgSXBIZWFkZXJfU3dhcEFkZHIoSXBI ZWFkZXJfdCogcCkKewogICAgVTMyIHNfYWRkciA9IHAtPnNfYWRkcjsKICAgIHAtPnNfYWRkciAg PSBwLT5kX2FkZHI7CiAgICBwLT5kX2FkZHIgID0gc19hZGRyOwp9Cgp2b2lkIEV0aEhlYWRlcl9T d2FwTWFjKHN0cnVjdCBldGhlcl9oZWFkZXIqIHApCnsKCXVfY2hhciBldGhlcl9ob3N0W0VUSEVS X0FERFJfTEVOXTsKCgltZW1jcHkoZXRoZXJfaG9zdCwgICAgIHAtPmV0aGVyX2Rob3N0LCBFVEhF Ul9BRERSX0xFTik7CgltZW1jcHkocC0+ZXRoZXJfZGhvc3QsIHAtPmV0aGVyX3Nob3N0LCBFVEhF Ul9BRERSX0xFTik7CgltZW1jcHkocC0+ZXRoZXJfc2hvc3QsIGV0aGVyX2hvc3QsICAgICBFVEhF Ul9BRERSX0xFTik7Cn0KCnZvaWQgQXJwSGVhZGVyX1N3YXBBZGRyKHN0cnVjdCBhcnBoZHIgKnAp CnsKCWNhZGRyX3Qgc2hhID0gYXJfc2hhKHApOwoJY2FkZHJfdCB0aGEgPSBhcl90aGEocCk7Cglz aXplX3QgY29uc3QgdHN6ID0gcC0+YXJfaGxuICsgcC0+YXJfcGxuOwoJY2FkZHJfdCB0ID0gbWFs bG9jKHRzeik7CgltZW1jcHkodCwgc2hhLCB0c3opOwoJbWVtY3B5KHNoYSwgdGhhLCB0c3opOwoJ bWVtY3B5KHRoYSwgdCwgdHN6KTsKCWZyZWUodCk7Cn0KCnZvaWQgSGV4RHVtcChVOCogcCwgaW50 IG5fYnl0ZXMpCnsKCXdoaWxlKG5fYnl0ZXMtLSkgewoJCXByaW50ZigiJTAyWCAiLCAoaW50KSAq cCsrKTsKCX0KCXByaW50ZigiXG4iKTsKfQoKCi8qKgogKiBDaGVja3N1bSByb3V0aW5lIGZvciBJ bnRlcm5ldCBQcm90b2NvbCBmYW1pbHkgaGVhZGVycyAoQyBWZXJzaW9uKQogKgogKiBAcGFyYW0g ZGF0YSAgICAgUG9pbnRlciB0byBkYXRhIHRvIGNhbGN1bGF0ZSBjaGVja3N1bSBmb3IuCiAqIEBw YXJhbSBuX2J5dGVzICBMZW5ndGggaW4gYnl0ZXMuCiAqLwpVMTYgSXBDa3N1bShVMTYqIGRhdGEs IGludCBuX2J5dGVzKQp7CiAgICBpbnQgbmxlZnQ7CiAgICBpbnQgc3VtOwogICAgVTE2ICp3Owog ICAgdW5pb24gewogICAgICAgIFUxNiB1czsKICAgICAgICBVOCAgdWNbMl07CiAgICB9IGxhc3Q7 CiAgICBVMTYgYW5zd2VyOwoKICAgIG5sZWZ0ID0gbl9ieXRlczsKICAgIHN1bSA9IDA7CiAgICB3 ID0gZGF0YTsKCiAgICAvKgogICAgICogT3VyIGFsZ29yaXRobSBpcyBzaW1wbGUsIHVzaW5nIGEg MzIgYml0IGFjY3VtdWxhdG9yIChzdW0pLCB3ZSBhZGQKICAgICAqIHNlcXVlbnRpYWwgMTYgYml0 IHdvcmRzIHRvIGl0LCBhbmQgYXQgdGhlIGVuZCwgZm9sZCBiYWNrIGFsbCB0aGUKICAgICAqIGNh cnJ5IGJpdHMgZnJvbSB0aGUgdG9wIDE2IGJpdHMgaW50byB0aGUgbG93ZXIgMTYgYml0cy4KICAg ICAqLwogICAgd2hpbGUgKG5sZWZ0ID4gMSkKICAgIHsKICAgICAgICBzdW0gKz0gKncrKzsKICAg ICAgICBubGVmdCAtPSAyOwogICAgfQoKICAgIC8qIG1vcCB1cCBhbiBvZGQgYnl0ZSwgaWYgbmVj ZXNzYXJ5ICovCiAgICBpZiAobmxlZnQgPT0gMSkKICAgIHsKICAgICAgICBsYXN0LnVjWzBdID0g KihVOCAqKXc7CiAgICAgICAgbGFzdC51Y1sxXSA9IDA7CiAgICAgICAgc3VtICs9IGxhc3QudXM7 CiAgICB9CgogICAgLyogYWRkIGJhY2sgY2Fycnkgb3V0cyBmcm9tIHRvcCAxNiBiaXRzIHRvIGxv dyAxNiBiaXRzICovCiAgICBzdW0gPSAoc3VtID4+IDE2KSArIChzdW0gJiAweGZmZmYpOyAgICAg LyogYWRkIGhpIDE2IHRvIGxvdyAxNiAqLwogICAgc3VtICs9IChzdW0gPj4gMTYpOyAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZCBjYXJyeSAqLwogICAgYW5zd2VyID0gfnN1bTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRydW5jYXRlIHRvIDE2IGJpdHMgKi8KICAgIAogICAgcmV0dXJu KGFuc3dlcik7Cn0K ------=_Part_5712_30337467.1185543327669--