Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Jan 2011 14:52:09 +0200
From:      Ivo Vachkov <ivo.vachkov@gmail.com>
To:        Doug Barton <dougb@freebsd.org>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>, bz@freebsd.org
Subject:   Re: Proposed patch for Port Randomization modifications according to RFC6056
Message-ID:  <AANLkTim4=xa0rfoLgt-ao30XoZkLZ1hMYzE6LsrLNcbM@mail.gmail.com>
In-Reply-To: <4D437B13.1070405@FreeBSD.org>
References:  <AANLkTi=rF%2BCYiNG7PurPtrwn-AMT9cYEe90epGAJDwDq@mail.gmail.com> <4D411CC6.1090202@gont.com.ar> <AANLkTinvg5tft8xockuuV9g5QYd36ko9qO4YCvy5bkJ1@mail.gmail.com> <4D431258.8040704@FreeBSD.org> <AANLkTimhZ_pxTGt958AX8m=%2BS=g2hqsst=GH1a99D0g1@mail.gmail.com> <4D437B13.1070405@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--00163646d5be7d227c049b23e38f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hello,

I attach the latest version of the port randomization code as a patch
against RELENG_8.

Changelog:
1) sysctl variable names are changed to:
- 'net.inet.ip.portrange.randomalg.version' - representing the
algorithm of choice.
- 'net.inet.ip.portrange.randomalg.alg5_tradeoff' - representing the
Algorithm 5 computational tradeoff value (the 'N' value in the
Algorithm 5 description in the RFC 6056).
2) Code comments are synchronized with the current variable names.

Ivo Vachkov

On Sat, Jan 29, 2011 at 4:27 AM, Doug Barton <dougb@freebsd.org> wrote:
> On 01/28/2011 11:57, Ivo Vachkov wrote:
>>
>> On Fri, Jan 28, 2011 at 9:00 PM, Doug Barton<dougb@freebsd.org> =C2=A0wr=
ote:
>
>>> How does net.inet.ip.portrange.randomalg sound? I would also suggest th=
at
>>> the second sysctl be named net.inet.ip.portrange.randomalg.alg5_tradeof=
f
>>> so
>>> that one could do 'sysctl net.inet.ip.portrange.randomalg' and see both
>>> values. But I won't quibble on that. :)
>>>
>>
>> I have no objections with this. Since this is my first attempt to
>> contribute something back to the community I decided to see how it's
>> done before. So I found:
>> net.inet.tcp.rfc1323
>> net.inet.tcp.rfc3465
>> net.inet.tcp.rfc3390
>> net.inet.tcp.rfc3042
>> which probably led me in a wrong direction :)
>
> Yeah, I had actually intended to say something to the effect of "there ar=
e
> plenty of unfortunate examples in the tree already so your doing it that =
way
> is totally understandable" but I trimmed it.
>
>> I understand your point and agree with it. However, my somewhat
>> limited understanding of the sysctl internal organization is telling
>> me that tree node does not support values. Am I wrong?
>
> You are likely correct. :) =C2=A0It's an inconvenient fact that often for=
get
> because that's not the sandbox that I usually play in.
>
>> If my reasoning
>> is correct, maybe I can create the sysctl variables with the following
>> names:
>> - net.inet.ip.portrange.randomalg (Tree Node)
>> - net.inet.ip.portrange.randomalg.alg[orithm] (Leaf Node, to store the
>> selected algorithm)
>
> I would go with "version" to increase the visual distinctiveness. I searc=
hed
> the current tree and there doesn't seem to be a clear winner for how to
> portray "this is the current N/M that is in use" but "version" seems to h=
ave
> the most representatives.
>
>> - net.inet.ip.portrange.randomalg.alg5_tradeoff (Leaf Node, to store
>> the Algorithm 5 trade-off value)
>
> I'm assuming this is the "N" value mentioned in the RFC. If so, I commend
> you on your choice of "tradeoff" to represent it. :)
>
>
> hth,
>
> Doug
>
> --
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0Nothin' ever doesn't change, but nothin' chang=
es much.
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0-- OK Go
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0Breadth of IT experience, and depth of knowled=
ge in the DNS.
> =C2=A0 =C2=A0 =C2=A0 =C2=A0Yours for the right price. =C2=A0:) =C2=A0http=
://SupersetSolutions.com/
>
>



--=20
"UNIX is basically a simple operating system, but you have to be a
genius to understand the simplicity." Dennis Ritchie

--00163646d5be7d227c049b23e38f
Content-Type: text/x-patch; charset=US-ASCII; 
	name="20110131-freebsd-RELENG_8-rfc6056.patch"
Content-Disposition: attachment; 
	filename="20110131-freebsd-RELENG_8-rfc6056.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gjldn5a20

ZGlmZiAtciAwZDY3ZjljOTgyZjcgc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCi0tLSBhL3NyYy9z
eXMvbmV0aW5ldC9pbl9wY2IuYwlNb24gSmFuIDMxIDExOjM1OjI0IDIwMTEgKzAyMDAKKysrIGIv
c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCU1vbiBKYW4gMzEgMTQ6Mjk6NTIgMjAxMSArMDIwMApA
QCAtODEsNiArODEsOCBAQAogI2luY2x1ZGUgPG5ldGlwc2VjL2tleS5oPgogI2VuZGlmIC8qIElQ
U0VDICovCiAKKyNpbmNsdWRlIDxzeXMvbWQ1Lmg+CQorCiAjaW5jbHVkZSA8c2VjdXJpdHkvbWFj
L21hY19mcmFtZXdvcmsuaD4KIAogLyoKQEAgLTEwOSw2ICsxMTEsOCBAQAogVk5FVF9ERUZJTkUo
aW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CQkvKiB0b2dnbGVkIGJ5IGlwcG9ydF90aWNrICovCiBW
TkVUX0RFRklORShpbnQsIGlwcG9ydF90Y3BhbGxvY3MpOwogc3RhdGljIFZORVRfREVGSU5FKGlu
dCwgaXBwb3J0X3RjcGxhc3Rjb3VudCk7CitWTkVUX0RFRklORSh1X2ludCwgaXBwb3J0X3JhbmRv
bWFsZ192ZXIpID0gMTsJLyogdXNlciBjb250cm9sbGVkIHZpYSBzeXNjdGwgKi8KK1ZORVRfREVG
SU5FKHVfaW50LCBpcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpID0gNTAwOwkvKiB1c2Vy
IGNvbnRyb2xsZWQgdmlhIHN5c2N0bCAqLwogCiAjZGVmaW5lCVZfaXBwb3J0X3RjcGxhc3Rjb3Vu
dAkJVk5FVChpcHBvcnRfdGNwbGFzdGNvdW50KQogCkBAIC0xNDEsNyArMTQ1LDY4IEBACiAKICN1
bmRlZiBSQU5HRUNISwogCisvKgorICogVXBkYXRlcyBWX2lwcG9ydF9yYW5kb21hbGdfdmVyIHRv
IHRoZSBwcm92aWRlZCB2YWx1ZQorICogYW5kIGVuc3VyZXMgaXQgaXMgaW4gdGhlIHN1cHBvcnRl
ZCByYW5nZSAoMSAtIDUpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9uZXRfcmFuZG9tYWxnX3Zl
cnNpb25fY2hlY2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwl1X2ludCBhbGdvcml0aG0gPSAq
KHVfaW50ICopYXJnMTsKKwlpbnQgZXJyb3I7CisKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZu
ZXRfc3lzY3RsX2hhbmRsZV91aW50KG9pZHAsICZhbGdvcml0aG0sIDAsIHJlcSk7CisjZWxzZQor
CWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmFsZ29yaXRobSwgMCwgcmVxKTsKKyNl
bmRpZgorCisJaWYgKGVycm9yID09IDApIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKKwkJY2Fz
ZSBJTlBfUkZDNjA1Nl9BTEdfMToKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMjoKKwkJY2FzZSBJ
TlBfUkZDNjA1Nl9BTEdfMzoKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNDoKKwkJY2FzZSBJTlBf
UkZDNjA1Nl9BTEdfNToKKwkJCVZfaXBwb3J0X3JhbmRvbWFsZ192ZXIgPSBhbGdvcml0aG07CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCX0gCQorCisJ
cmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBVcGRhdGVzIFZfaXBwb3J0X3JhbmRvbWFsZ19h
bGc1X3RyYWRlb2ZmIHRvIHByb3ZpZGVkIHZhbHVlCisgKiBhbmQgZW5zdXJlcyBpdCBpcyBpbiB0
aGUgc3VwcG9ydGVkIHJhbmdlICgxIC0gNjU1MzYpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9u
ZXRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmZfY2hlY2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sK
Kwl1X2ludCB0cmFkZW9mZiA9ICoodV9pbnQgKilhcmcxOworCWludCBlcnJvcjsKKworI2lmZGVm
IFZJTUFHRQorCWVycm9yID0gdm5ldF9zeXNjdGxfaGFuZGxlX3VpbnQob2lkcCwgJnRyYWRlb2Zm
LCAwLCByZXEpOworI2Vsc2UKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0cmFk
ZW9mZiwgMCwgcmVxKTsKKyNlbmRpZgorCisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHRyYWRl
b2ZmIDwgMSB8fCB0cmFkZW9mZiA+IDY1NTM2KQorCQkJcmV0dXJuIChFSU5WQUwpOworCQllbHNl
CisJCQlWX2lwcG9ydF9yYW5kb21hbGdfYWxnNV90cmFkZW9mZiA9IHRyYWRlb2ZmOworCX0KKwor
CXJldHVybiAoZXJyb3IpOworfQorCiBTWVNDVExfTk9ERShfbmV0X2luZXRfaXAsIElQUFJPVE9f
SVAsIHBvcnRyYW5nZSwgQ1RMRkxBR19SVywgMCwgIklQIFBvcnRzIik7CitTWVNDVExfTk9ERShf
bmV0X2luZXRfaXBfcG9ydHJhbmdlLCBJUFBST1RPX0lQLCByYW5kb21hbGcsIENUTEZMQUdfUlcs
IDAsIAorCSJQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtcyIpOwogCiBTWVNDVExfVk5FVF9Q
Uk9DKF9uZXRfaW5ldF9pcF9wb3J0cmFuZ2UsIE9JRF9BVVRPLCBsb3dmaXJzdCwKIAlDVExUWVBF
X0lOVHxDVExGTEFHX1JXLCAmVk5FVF9OQU1FKGlwcG9ydF9sb3dmaXJzdGF1dG8pLCAwLApAQCAt
MTc0LDYgKzIzOSwxNSBAQAogCSZWTkVUX05BTUUoaXBwb3J0X3JhbmRvbXRpbWUpLCAwLAogCSJN
aW5pbXVtIHRpbWUgdG8ga2VlcCBzZXF1ZW50YWwgcG9ydCAiCiAJImFsbG9jYXRpb24gYmVmb3Jl
IHN3aXRjaGluZyB0byBhIHJhbmRvbSBvbmUiKTsKK1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0
X2lwX3BvcnRyYW5nZV9yYW5kb21hbGcsIE9JRF9BVVRPLCB2ZXJzaW9uLAorCUNUTFRZUEVfVUlO
VHxDVExGTEFHX1JXLCAmVk5FVF9OQU1FKGlwcG9ydF9yYW5kb21hbGdfdmVyKSwgMCwKKwkmc3lz
Y3RsX25ldF9yYW5kb21hbGdfdmVyc2lvbl9jaGVjaywgIklVIiwgCisJIlJGQyA2MDU2IFBvcnQg
cmFuZG9taXphdGlvbiBhbGdvcml0aG0iKTsKK1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0X2lw
X3BvcnRyYW5nZV9yYW5kb21hbGcsIE9JRF9BVVRPLAorCWFsZzVfdHJhZGVvZmYsIENUTFRZUEVf
VUlOVHxDVExGTEFHX1JXLAorCSZWTkVUX05BTUUoaXBwb3J0X3JhbmRvbWFsZ19hbGc1X3RyYWRl
b2ZmKSwgMCwKKwkmc3lzY3RsX25ldF9yYW5kb21hbGdfYWxnNV90cmFkZW9mZl9jaGVjaywgIklV
IiwKKwkiUkZDIDYwNTYgQWxnb3JpdGhtIDUgY29tcHV0YXRpb25hbCB0cmFkZS1vZmYiKTsKIAog
LyoKICAqIGluX3BjYi5jOiBtYW5hZ2UgdGhlIFByb3RvY29sIENvbnRyb2wgQmxvY2tzLgpAQCAt
NDY4LDIxICs1NDIsMTc3IEBACiAJCQlsYXN0ID0gYXV4OwogCQl9CiAKLQkJaWYgKGRvcmFuZG9t
KQotCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKwotCQkJCSAgICAoYXJjNHJhbmRvbSgpICUgKGxhc3Qg
LSBmaXJzdCkpOwotCiAJCWNvdW50ID0gbGFzdCAtIGZpcnN0OwogCi0JCWRvIHsKLQkJCWlmIChj
b3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLwotCQkJCXJldHVybiAoRUFERFJOT1RB
VkFJTCk7Ci0JCQkrKypsYXN0cG9ydDsKLQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFz
dHBvcnQgPiBsYXN0KQotCQkJCSpsYXN0cG9ydCA9IGZpcnN0OwotCQkJbHBvcnQgPSBodG9ucygq
bGFzdHBvcnQpOwotCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIs
Ci0JCSAgICBscG9ydCwgd2lsZCwgY3JlZCkpOworCQkvKiAKKwkJICogQWNjb3JkaW5nIHRvIFJG
QyA2MDU2IHRoZXJlIGFyZSA1IChmaXZlKSBwb3NzaWJsZSBhbGdvcml0aG1zCisJCSAqIGZvciBy
YW5kb20gcG9ydCBhbGxvY2F0aW9uLiBVc2FnZSBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtCisJ
CSAqIGlzIHNwZWNpZmllZCB3aXRoIHRoZSAnbmV0LmluZXQuaXAucG9ydHJhbmdlLnJhbmRvbWFs
Zy52ZXJzaW9uJworCQkgKiBzeXNjdGwgdmFyaWFibGUuIERlZmF1bHQgdmFsdWUgaXMgMSwgd2hp
Y2ggcmVwcmVzZW50cyB0aGUKKwkJICogbGVnYWN5IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24gYWxn
b3JpdGhtIGluIEZyZWVCU0QuCisJCSAqLworCQlpZiAoZG9yYW5kb20pIHsKKwkJCXN3aXRjaCAo
Vl9pcHBvcnRfcmFuZG9tYWxnX3ZlcikgeworCQkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNToJLyog
UmFuZG9tLUluY3JlbWVudHMgUG9ydCBTZWxlY3Rpb24gKi8KKwkJCQlkbyB7CisJCQkJCWlmIChj
b3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJcmV0dXJuIChFQUREUk5P
VEFWQUlMKTsKKworCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgoYXJjNHJhbmRvbSgpICUgNjU1
MzYpICsgCisJCQkJCSAgICAoYXJjNHJhbmRvbSgpICUgVl9pcHBvcnRfcmFuZG9tYWxnX2FsZzVf
dHJhZGVvZmYpICsgMSk7CisKKwkJCQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9y
dCA+IGxhc3QpCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQkJbHBvcnQgPSBodG9ucygq
bGFzdHBvcnQpOworCQkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRk
ciwKKwkJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU5Q
X1JGQzYwNTZfQUxHXzQ6CS8qIERvdWJsZS1IYXNoIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAq
LworCQkJCXsKKwkJCQkJTUQ1X0NUWCBmX2N0eDsKKwkJCQkJTUQ1X0NUWCBnX2N0eDsKKwkJCQkJ
dV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQkJdV9pbnQzMl90IEdbNF0gPSB7
IDAsIDAsIDAsIDAgfTsKKwkJCQkJdV9pbnQzMl90IHNlY3JldF9mWzRdID0geyAwLCAwLCAwLCAw
IH07CisJCQkJCXVfaW50MzJfdCBzZWNyZXRfZ1s0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCQl1
X2ludDE2X3QgdGFibGVbMTZdOyAKKwkJCQkJdV9pbnQzMl90IGluZGV4ID0gMDsKKwkJCQkJdV9p
bnQzMl90IG9mZnNldCA9IDA7CisKKwkJCQkJc2VjcmV0X2ZbMF0gPSBhcmM0cmFuZG9tKCk7CisJ
CQkJCXNlY3JldF9mWzFdID0gYXJjNHJhbmRvbSgpOworCQkJCQlzZWNyZXRfZlsyXSA9IGFyYzRy
YW5kb20oKTsKKwkJCQkJc2VjcmV0X2ZbM10gPSBhcmM0cmFuZG9tKCk7CisKKwkJCQkJc2VjcmV0
X2dbMF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9nWzFdID0gYXJjNHJhbmRvbSgpOwor
CQkJCQlzZWNyZXRfZ1syXSA9IGFyYzRyYW5kb20oKTsKKwkJCQkJc2VjcmV0X2dbM10gPSBhcmM0
cmFuZG9tKCk7CisKKwkJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZW9mKHRhYmxlKTsg
aW5kZXgrKykKKwkJCQkJCXRhYmxlW2luZGV4XSA9IGFyYzRyYW5kb20oKSAlIDY1NTM2OworCisJ
CQkJCU1ENUluaXQoJmZfY3R4KTsKKwkJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKSZp
bnAtPmlucF9sYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9sYWRkcikpOworCQkJCQlN
RDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2ZhZGRyLAorCQkJCQkgICAgc2l6
ZW9mKGlucC0+aW5wX2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikm
aW5wLT5pbnBfZnBvcnQsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQpKTsKKwkJCQkJ
TUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKXNlY3JldF9mLAorCQkJCQkgICAgc2l6ZW9mKHNl
Y3JldF9mKSk7CisJCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRiwgJmZfY3R4KTsKKworCQkJCQlv
ZmZzZXQgPSAoKEZbMF0gXiBGWzFdKSBeIChGWzJdIF4gRlszXSkpOworCisJCQkJCU1ENUluaXQo
JmdfY3R4KTsKKwkJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVfY2hhciAqKSZpbnAtPmlucF9sYWRk
ciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9sYWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmdf
Y3R4LCAodV9jaGFyICopJmlucC0+aW5wX2ZhZGRyLAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5w
X2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0ZSgmZ19jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBv
cnQsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQpKTsKKwkJCQkJTUQ1VXBkYXRlKCZn
X2N0eCwgKHVfY2hhciAqKXNlY3JldF9nLAorCQkJCQkgICAgc2l6ZW9mKHNlY3JldF9nKSk7CisJ
CQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRywgJmdfY3R4KTsKKworCQkJCQlpbmRleCA9ICgoR1sw
XSBeIEdbMV0pIF4gKEdbMl0gXiBHWzNdKSkgJSBzaXplb2YodGFibGUpOworCisJCQkJCWRvIHsK
KwkJCQkJCWlmIChjb3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJCXJl
dHVybiAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsgCisJCQkJ
CQkgICAgKG9mZnNldCArIHRhYmxlW2luZGV4XSsrKSAlIGNvdW50OworCisJCQkJCQlpZiAoKmxh
c3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJCQkqbGFzdHBvcnQgPSBm
aXJzdDsKKwkJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQkJfSB3aGlsZSAoaW5f
cGNibG9va3VwX2xvY2FsKHBjYmluZm8sIGxhZGRyLAorCQkJCQkgICAgbHBvcnQsIHdpbGQsIGNy
ZWQpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIElOUF9SRkM2MDU2X0FMR18zOgkvKiBT
aW1wbGUgSGFzaC1CYXNlZCBQb3J0IFNlbGVjdGlvbiBBbGdvcml0aG0gKi8KKwkJCQl7CisJCQkJ
CU1ENV9DVFggZl9jdHg7CisJCQkJCXVfaW50MzJfdCBGWzRdID0geyAwLCAwLCAwLCAwIH07CisJ
CQkJCXVfaW50MzJfdCBzZWNyZXRfZls0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCQl1X2ludDMy
X3Qgb2Zmc2V0ID0gMDsKKworCQkJCQlzZWNyZXRfZlswXSA9IGFyYzRyYW5kb20oKTsKKwkJCQkJ
c2VjcmV0X2ZbMV0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9mWzJdID0gYXJjNHJhbmRv
bSgpOworCQkJCQlzZWNyZXRfZlszXSA9IGFyYzRyYW5kb20oKTsKKworCQkJCQlNRDVJbml0KCZm
X2N0eCk7CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfbGFkZHIs
CisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfbGFkZHIpKTsKKwkJCQkJTUQ1VXBkYXRlKCZmX2N0
eCwgKHVfY2hhciAqKSZpbnAtPmlucF9mYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9m
YWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2Zwb3J0
LAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0KSk7CisJCQkJCU1ENVVwZGF0ZSgmZl9j
dHgsICh1X2NoYXIgKilzZWNyZXRfZiwKKwkJCQkJICAgIHNpemVvZihzZWNyZXRfZikpOworCQkJ
CQlNRDVGaW5hbCgodV9jaGFyICopJkYsICZmX2N0eCk7CisKKwkJCQkJb2Zmc2V0ID0gKChGWzBd
IF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsKKworCQkJCQlkbyB7CisJCQkJCQlpZiAoY291bnQt
LSA8IDApCS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZB
SUwpOworCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgoYXJjNHJhbmRvbSgpICUgNjU1MzYp
ICsgCisJCQkJCQkgICAgKG9mZnNldCAlIDY1NTM2KSkgJSBjb3VudDsKKworCQkJCQkJaWYgKCps
YXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJCQkJKmxhc3Rwb3J0ID0g
Zmlyc3Q7CisJCQkJCQlscG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7CisJCQkJCX0gd2hpbGUgKGlu
X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJCQkJICAgIGxwb3J0LCB3aWxkLCBj
cmVkKSk7CQkJCQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzI6
CS8qIFNpbXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtIElJICovCisJCQkJZG8gewor
CQkJCQlpZiAoY291bnQtLSA8IDApCS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJCXJldHVy
biAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAoYXJjNHJhbmRv
bSgpICUgKGxhc3QgLSBmaXJzdCkpOworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAq
bGFzdHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0g
aHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5m
bywgbGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQkJYnJlYWs7CisJCQlj
YXNlIElOUF9SRkM2MDU2X0FMR18xOgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29y
aXRobSBJICovCisJCQlkZWZhdWx0OgorCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5k
b20oKSAlIChsYXN0IC0gZmlyc3QpKTsKKworCQkJCWRvIHsKKwkJCQkJaWYgKGNvdW50LS0gPCAw
KQkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOwor
CisJCQkJCSsrKmxhc3Rwb3J0OworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFz
dHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0gaHRv
bnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywg
bGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQl9CisJCX0gZWxzZSB7CisJ
CQlkbyB7CisJCQkJaWYgKGNvdW50LS0gPCAwKSAgICAgICAgLyogY29tcGxldGVseSB1c2VkPyAq
LworCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQorCQkJCSsrKmxhc3Rwb3J0OworCisJ
CQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJCSpsYXN0
cG9ydCA9IGZpcnN0OworCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCX0gd2hpbGUg
KGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJCSAgICBscG9ydCwgd2lsZCwg
Y3JlZCkpOworCQl9CiAJfQogCSpsYWRkcnAgPSBsYWRkci5zX2FkZHI7CiAJKmxwb3J0cCA9IGxw
b3J0OwpkaWZmIC1yIDBkNjdmOWM5ODJmNyBzcmMvc3lzL25ldGluZXQvaW5fcGNiLmgKLS0tIGEv
c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5oCU1vbiBKYW4gMzEgMTE6MzU6MjQgMjAxMSArMDIwMAor
KysgYi9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmgJTW9uIEphbiAzMSAxNDoyOTo1MiAyMDExICsw
MjAwCkBAIC00NTIsNiArNDUyLDE1IEBACiAKICNkZWZpbmUJSU5QX0NIRUNLX1NPQ0tBRihzbywg
YWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKIAorLyoKKyAqIFJGQzYwNTYgUG9ydCBSYW5kb21p
emF0aW9uIEFsZ29yaXRobXMKKyAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfMQkxCS8qIFNp
bXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtIEkgKi8KKyNkZWZpbmUJSU5QX1JGQzYw
NTZfQUxHXzIJMgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29yaXRobSBJSSAqLwor
I2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfMwkzCS8qIFNpbXBsZSBIYXNoLUJhc2VkIFBvcnQgU2Vs
ZWN0aW9uIEFsZ29yaXRobSAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfNAk0CS8qIERvdWJs
ZS1IYXNoIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9B
TEdfNQk1CS8qIFJhbmRvbS1JbmNyZW1lbnRzIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLwor
CiAjaWZkZWYgX0tFUk5FTAogVk5FVF9ERUNMQVJFKGludCwgaXBwb3J0X3Jlc2VydmVkaGlnaCk7
CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmVzZXJ2ZWRsb3cpOwpAQCAtNDY2LDYgKzQ3NSw4
IEBACiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmFuZG9tdGltZSk7CiBWTkVUX0RFQ0xBUkUo
aW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfdGNwYWxs
b2NzKTsKK1ZORVRfREVDTEFSRSh1X2ludCwgaXBwb3J0X3JhbmRvbWFsZ192ZXIpOworVk5FVF9E
RUNMQVJFKHVfaW50LCBpcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpOwogCiAjZGVmaW5l
CVZfaXBwb3J0X3Jlc2VydmVkaGlnaAlWTkVUKGlwcG9ydF9yZXNlcnZlZGhpZ2gpCiAjZGVmaW5l
CVZfaXBwb3J0X3Jlc2VydmVkbG93CVZORVQoaXBwb3J0X3Jlc2VydmVkbG93KQpAQCAtNDgwLDYg
KzQ5MSw4IEBACiAjZGVmaW5lCVZfaXBwb3J0X3JhbmRvbXRpbWUJVk5FVChpcHBvcnRfcmFuZG9t
dGltZSkKICNkZWZpbmUJVl9pcHBvcnRfc3RvcHJhbmRvbQlWTkVUKGlwcG9ydF9zdG9wcmFuZG9t
KQogI2RlZmluZQlWX2lwcG9ydF90Y3BhbGxvY3MJVk5FVChpcHBvcnRfdGNwYWxsb2NzKQorI2Rl
ZmluZSBWX2lwcG9ydF9yYW5kb21hbGdfdmVyCVZORVQoaXBwb3J0X3JhbmRvbWFsZ192ZXIpCisj
ZGVmaW5lIFZfaXBwb3J0X3JhbmRvbWFsZ19hbGc1X3RyYWRlb2ZmCVZORVQoaXBwb3J0X3JhbmRv
bWFsZ19hbGc1X3RyYWRlb2ZmKQogCiBleHRlcm4gc3RydWN0IGNhbGxvdXQgaXBwb3J0X3RpY2tf
Y2FsbG91dDsKIApkaWZmIC1yIDBkNjdmOWM5ODJmNyBzcmMvc3lzL25ldGluZXQ2L2luNl9zcmMu
YwotLS0gYS9zcmMvc3lzL25ldGluZXQ2L2luNl9zcmMuYwlNb24gSmFuIDMxIDExOjM1OjI0IDIw
MTEgKzAyMDAKKysrIGIvc3JjL3N5cy9uZXRpbmV0Ni9pbjZfc3JjLmMJTW9uIEphbiAzMSAxNDoy
OTo1MiAyMDExICswMjAwCkBAIC0xMDgsNiArMTA4LDggQEAKICNpbmNsdWRlIDxuZXRpbmV0Ni9z
Y29wZTZfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+CiAKKyNpbmNsdWRlIDxzeXMv
bWQ1Lmg+CisKIHN0YXRpYyBzdHJ1Y3QgbXR4IGFkZHJzZWxfbG9jazsKICNkZWZpbmUJQUREUlNF
TF9MT0NLX0lOSVQoKQltdHhfaW5pdCgmYWRkcnNlbF9sb2NrLCAiYWRkcnNlbF9sb2NrIiwgTlVM
TCwgTVRYX0RFRikKICNkZWZpbmUJQUREUlNFTF9MT0NLKCkJCW10eF9sb2NrKCZhZGRyc2VsX2xv
Y2spCkBAIC05MTksMjMgKzkyMSwxOTUgQEAKIAkJbGFzdCA9IGF1eDsKIAl9CiAKLQlpZiAoZG9y
YW5kb20pCi0JCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5kb20oKSAlIChsYXN0IC0gZmly
c3QpKTsKLQogCWNvdW50ID0gbGFzdCAtIGZpcnN0OwogCi0JZG8gewotCQlpZiAoY291bnQtLSA8
IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLwotCQkJLyogVW5kbyBhbiBhZGRyZXNzIGJpbmQg
dGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KLQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJf
YW55OwotCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwkvKgorCSAqIEFjY29yZGluZyB0byBS
RkMgNjA1NiB0aGVyZSBhcmUgNSAoZml2ZSkgcG9zc2libGUgYWxnb3JpdGhtcworCSAqIGZvciBy
YW5kb20gcG9ydCBhbGxvY2F0aW9uLiBVc2FnZSBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtCisJ
ICogaXMgc3BlY2lmaWVkIHdpdGggdGhlICduZXQuaW5ldC5pcC5wb3J0cmFuZ2UucmFuZG9tYWxn
LnZlcnNpb24nCisJICogc3lzY3RsIHZhcmlhYmxlLiBEZWZhdWx0IHZhbHVlIGlzIDEsIHdoaWNo
IHJlcHJlc2VudHMgdGhlCisJICogbGVnYWN5IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24gYWxnb3Jp
dGhtIGluIEZyZWVCU0QuCisJICovCisJaWYgKGRvcmFuZG9tKSB7CisJCXN3aXRjaCAoVl9pcHBv
cnRfcmFuZG9tYWxnX3ZlcikgeworCQljYXNlIElOUF9SRkM2MDU2X0FMR181OgkvKiBSYW5kb20t
SW5jcmVtZW50cyBQb3J0IFNlbGVjdGlvbiAqLworCQkJZG8geworCQkJCWlmIChjb3VudC0tIDwg
MCkgewkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCS8qIFVuZG8gYW4gYWRkcmVzcyBiaW5k
IHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQuICovCisJCQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFk
ZHJfYW55OworCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQkJCX0KKworCQkJCSpsYXN0
cG9ydCA9IGZpcnN0ICsgKChhcmM0cmFuZG9tKCkgJSA2NTUzNikgKworCQkJCSAgICAoYXJjNHJh
bmRvbSgpICUgVl9pcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpICsgMSk7CisKKwkJCQlp
ZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJKmxhc3Rwb3J0
ID0gZmlyc3Q7CisJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOworCQkJfSB3aGlsZSAoaW42
X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJICAgIGxwb3J0
LCB3aWxkLCBjcmVkKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNDogLyog
RG91YmxlLUhhc2ggUG9ydCBTZWxlY3Rpb24gQWxnb3JpdGhtICovCisJCQl7CisJCQkJTUQ1X0NU
WCBmX2N0eDsKKwkJCQlNRDVfQ1RYIGdfY3R4OworCQkJCXVfaW50MzJfdCBGWzRdID0geyAwLCAw
LCAwLCAwIH07CisJCQkJdV9pbnQzMl90IEdbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2lu
dDMyX3Qgc2VjcmV0X2ZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMyX3Qgc2VjcmV0
X2dbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDE2X3QgdGFibGVbMTZdOworCQkJCXVf
aW50MzJfdCBpbmRleCA9IDA7CisJCQkJdV9pbnQzMl90IG9mZnNldCA9IDA7CisKKwkJCQlzZWNy
ZXRfZlswXSA9IGFyYzRyYW5kb20oKTsKKwkJCQlzZWNyZXRfZlsxXSA9IGFyYzRyYW5kb20oKTsK
KwkJCQlzZWNyZXRfZlsyXSA9IGFyYzRyYW5kb20oKTsKKwkJCQlzZWNyZXRfZlszXSA9IGFyYzRy
YW5kb20oKTsKKworCQkJCXNlY3JldF9nWzBdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9n
WzFdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9nWzJdID0gYXJjNHJhbmRvbSgpOworCQkJ
CXNlY3JldF9nWzNdID0gYXJjNHJhbmRvbSgpOworCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgc2l6ZW9mKHRhYmxlKTsgaW5kZXgrKykKKwkJCQkJdGFibGVbaW5kZXhdID0gYXJjNHJhbmRv
bSgpICUgNjU1MzY7CisKKwkJCQlNRDVJbml0KCZmX2N0eCk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0
eCwgKHVfY2hhciAqKSZpbnAtPmluNnBfbGFkZHIsCisJCQkJICAgIHNpemVvZihpbnAtPmluNnBf
bGFkZHIpKTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW42cF9mYWRk
ciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9mYWRkcikpOworCQkJCU1ENVVwZGF0ZSgmZl9j
dHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBvcnQsCisJCQkJICAgIHNpemVvZihpbnAtPmlucF9m
cG9ydCkpOworCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKilzZWNyZXRfZiwKKwkJCQkg
ICAgc2l6ZW9mKHNlY3JldF9mKSk7CisJCQkJTUQ1RmluYWwoKHVfY2hhciAqKSZGLCAmZl9jdHgp
OworCisJCQkJb2Zmc2V0ID0gKChGWzBdIF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsKKworCQkJ
CU1ENUluaXQoJmdfY3R4KTsKKwkJCQlNRDVVcGRhdGUoJmdfY3R4LCAodV9jaGFyICopJmlucC0+
aW42cF9sYWRkciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9sYWRkcikpOworCQkJCU1ENVVw
ZGF0ZSgmZ19jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZwX2ZhZGRyLAorCQkJCSAgICBzaXplb2Yo
aW5wLT5pbjZwX2ZhZGRyKSk7CisJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVfY2hhciAqKSZpbnAt
PmlucF9mcG9ydCwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0KSk7CisJCQkJTUQ1VXBk
YXRlKCZnX2N0eCwgKHVfY2hhciAqKXNlY3JldF9nLAorCQkJCSAgICBzaXplb2Yoc2VjcmV0X2cp
KTsKKwkJCQlNRDVGaW5hbCgodV9jaGFyICopJkcsICZnX2N0eCk7CisKKwkJCQlpbmRleCA9ICgo
R1swXSBeIEdbMV0pIF4gKEdbMl0gXiBHWzNdKSkgJSBzaXplb2YodGFibGUpOworCisJCQkJZG8g
eworCQkJCQlpZiAoY291bnQtLSA8IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJ
LyogVW5kbyBhbiBhZGRyZXNzIGJpbmQgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KKwkJCQkJ
CWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJfYW55OworCQkJCQkJcmV0dXJuIChFQUREUk5PVEFW
QUlMKTsKKwkJCQkJfQorCisJCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsKKwkJCQkJICAgIChvZmZz
ZXQgKyB0YWJsZVtpbmRleF0rKykgJSBjb3VudDsKKworCQkJCQlpZiAoKmxhc3Rwb3J0IDwgZmly
c3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJCSpsYXN0cG9ydCA9IGZpcnN0OworCQkJCQls
cG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7CisJCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2Nh
bChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJCSAgICBscG9ydCwgd2lsZCwgY3JlZCkp
OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzM6IC8qIFNpbXBsZSBI
YXNoLUJhc2VkIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLworCQkJeworCQkJCU1ENV9DVFgg
Zl9jdHg7CisJCQkJdV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMy
X3Qgc2VjcmV0X2ZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMyX3Qgb2Zmc2V0ID0g
MDsKKworCQkJCXNlY3JldF9mWzBdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzFdID0g
YXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzJdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3Jl
dF9mWzNdID0gYXJjNHJhbmRvbSgpOworCisJCQkJTUQ1SW5pdCgmZl9jdHgpOworCQkJCU1ENVVw
ZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZwX2xhZGRyLAorCQkJCSAgICBzaXplb2Yo
aW5wLT5pbjZwX2xhZGRyKSk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKSZpbnAt
PmluNnBfZmFkZHIsCisJCQkJICAgIHNpemVvZihpbnAtPmluNnBfZmFkZHIpKTsKKwkJCQlNRDVV
cGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2Zwb3J0LAorCQkJCSAgICBzaXplb2Yo
aW5wLT5pbnBfZnBvcnQpKTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopc2VjcmV0
X2YsCisJCQkJICAgIHNpemVvZihzZWNyZXRfZikpOworCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikm
RiwgJmZfY3R4KTsKKworCQkJCW9mZnNldCA9ICgoRlswXSBeIEZbMV0pIF4gKEZbMl0gXiBGWzNd
KSk7CisKKwkJCQlkbyB7CisJCQkJCWlmIChjb3VudC0tIDwgMCkgewkvKiBjb21wbGV0ZWx5IHVz
ZWQ/ICovCisJCQkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1heSBoYXZlIG9jY3Vy
cmVkLiAqLworCQkJCQkJaW5wLT5pbjZwX2xhZGRyID0gaW42YWRkcl9hbnk7CisJCQkJCQlyZXR1
cm4gKEVBRERSTk9UQVZBSUwpOworCQkJCQl9CisKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAo
KGFyYzRyYW5kb20oKSAlIDY1NTM2KSArCisJCQkJCSAgICAob2Zmc2V0ICUgNjU1MzYpKSAlIGNv
dW50OworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQor
CQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsK
KwkJCQl9IHdoaWxlIChpbjZfcGNibG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFk
ZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz
ZSBJTlBfUkZDNjA1Nl9BTEdfMjoJLyogU2ltcGxlIFBvcnQgUmFuZG9taXphdGlvbiBBbGdvcml0
aG0gSUkgKi8KKwkJCWRvIHsKKwkJCQlpZiAoY291bnQtLSA8IDApIHsJLyogY29tcGxldGVseSB1
c2VkPyAqLworCQkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1heSBoYXZlIG9jY3Vy
cmVkLiAqLworCQkJCQlpbnAtPmluNnBfbGFkZHIgPSBpbjZhZGRyX2FueTsKKwkJCQkJcmV0dXJu
IChFQUREUk5PVEFWQUlMKTsKKwkJCQl9CisKKwkJCQkqbGFzdHBvcnQgPSBmaXJzdCArIChhcmM0
cmFuZG9tKCkgJSAobGFzdCAtIGZpcnN0KSk7CisKKwkJCQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3Qg
fHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJbHBvcnQg
PSBodG9ucygqbGFzdHBvcnQpOworCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2NhbChwY2Jp
bmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQli
cmVhazsKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMToJLyogU2ltcGxlIFBvcnQgUmFuZG9taXph
dGlvbiBBbGdvcml0aG0gSSAqLworCQlkZWZhdWx0OgorCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAo
YXJjNHJhbmRvbSgpICUgKGxhc3QgLSBmaXJzdCkpOworCisJCQlkbyB7CisJCQkJaWYgKGNvdW50
LS0gPCAwKSB7CS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJLyogVW5kbyBhbiBhZGRyZXNz
IGJpbmQgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KKwkJCQkJaW5wLT5pbjZwX2xhZGRyID0g
aW42YWRkcl9hbnk7CisJCQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJCQkJfQorCisJCQkJ
KysqbGFzdHBvcnQ7CisKKwkJCQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4g
bGFzdCkKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBv
cnQpOworCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZw
X2xhZGRyLAorCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CiAJCX0KLQkJKysqbGFzdHBvcnQ7
Ci0JCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQotCQkJKmxhc3Rw
b3J0ID0gZmlyc3Q7Ci0JCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKLQl9IHdoaWxlIChpbjZf
cGNibG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFkZHIsCi0JICAgIGxwb3J0LCB3
aWxkLCBjcmVkKSk7CisJfSBlbHNlIHsKKwkJZG8geworCQkJaWYgKGNvdW50LS0gPCAwKSB7CS8q
IGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1h
eSBoYXZlIG9jY3VycmVkLiAqLworCQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJfYW55Owor
CQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJCQl9CisKKwkJCSsrKmxhc3Rwb3J0OworCisJ
CQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkqbGFzdHBv
cnQgPSBmaXJzdDsKKwkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJfSB3aGlsZSAoaW42
X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkgICAgbHBvcnQs
IHdpbGQsIGNyZWQpKTsKKwl9CiAKIAlpbnAtPmlucF9scG9ydCA9IGxwb3J0OwogCWlmIChpbl9w
Y2JpbnNoYXNoKGlucCkgIT0gMCkgewo=
--00163646d5be7d227c049b23e38f--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTim4=xa0rfoLgt-ao30XoZkLZ1hMYzE6LsrLNcbM>