Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Jan 2011 16:33:55 +0200
From:      Ivo Vachkov <ivo.vachkov@gmail.com>
To:        FreeBSD Net <freebsd-net@freebsd.org>
Cc:        bz@freebsd.org
Subject:   Re: Proposed patch for Port Randomization modifications according to RFC6056
Message-ID:  <AANLkTinvg5tft8xockuuV9g5QYd36ko9qO4YCvy5bkJ1@mail.gmail.com>
In-Reply-To: <4D411CC6.1090202@gont.com.ar>
References:  <AANLkTi=rF%2BCYiNG7PurPtrwn-AMT9cYEe90epGAJDwDq@mail.gmail.com> <4D411CC6.1090202@gont.com.ar>

next in thread | previous in thread | raw e-mail | index | archive | help
--0015175cb99ae421ce049ae8f559
Content-Type: text/plain; charset=UTF-8

Hello,

I would like to thank for the help and for the recommendations.

I attach second version of the patch, I proposed earlier, including
following changes:

1) All RFC6056 algorithms are implemented.
2) Both IPv4 and IPv6 stacks are modified to use the new port
randomization code.
3) There are two variables that can be modified via sysctl:
- net.inet.ip.portrange.rfc6056_algorithm - which allows the super
user to choose one out of the five possible algorithms.
- net.inet.ip.portrange.rfc6056_algorithm5_tradeoff - which allows the
super user to modify the trade-off value used in algorithm 5.
All values are explicitly checked for correctness before usage.
Default values for those variables represent current/legacy port
randomization algorithm and proposed values in the RFC itself.

Thank you very much.

Ivo Vachkov

--0015175cb99ae421ce049ae8f559
Content-Type: text/x-patch; charset=US-ASCII; 
	name="20110128-freebsd-RELENG_8-rfc6056.patch"
Content-Disposition: attachment; 
	filename="20110128-freebsd-RELENG_8-rfc6056.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gjh6hwl60

ZGlmZiAtciA0ZWEwNzdmNTQ2ZGQgc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCi0tLSBhL3NyYy9z
eXMvbmV0aW5ldC9pbl9wY2IuYwlGcmkgSmFuIDI4IDEyOjIxOjA4IDIwMTEgKzAyMDAKKysrIGIv
c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCUZyaSBKYW4gMjggMTY6MTA6MDggMjAxMSArMDIwMApA
QCAtODEsNiArODEsOCBAQAogI2luY2x1ZGUgPG5ldGlwc2VjL2tleS5oPgogI2VuZGlmIC8qIElQ
U0VDICovCiAKKyNpbmNsdWRlIDxzeXMvbWQ1Lmg+CQorCiAjaW5jbHVkZSA8c2VjdXJpdHkvbWFj
L21hY19mcmFtZXdvcmsuaD4KIAogLyoKQEAgLTEwOSw2ICsxMTEsOCBAQAogVk5FVF9ERUZJTkUo
aW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CQkvKiB0b2dnbGVkIGJ5IGlwcG9ydF90aWNrICovCiBW
TkVUX0RFRklORShpbnQsIGlwcG9ydF90Y3BhbGxvY3MpOwogc3RhdGljIFZORVRfREVGSU5FKGlu
dCwgaXBwb3J0X3RjcGxhc3Rjb3VudCk7CitWTkVUX0RFRklORSh1X2ludCwgaXBwb3J0X3JmYzYw
NTZhbGcpID0gMTsJLyogdXNlciBjb250cm9sbGVkIHZpYSBzeXNjdGwgKi8KK1ZORVRfREVGSU5F
KHVfaW50LCBpcHBvcnRfcmZjNjA1NmFsZzVfdHJhZGVvZmYpID0gNTAwOwkvKiB1c2VyIGNvbnRy
b2xsZWQgdmlhIHN5c2N0bCAqLwogCiAjZGVmaW5lCVZfaXBwb3J0X3RjcGxhc3Rjb3VudAkJVk5F
VChpcHBvcnRfdGNwbGFzdGNvdW50KQogCkBAIC0xNDEsNiArMTQ1LDY1IEBACiAKICN1bmRlZiBS
QU5HRUNISwogCisvKgorICogVXBkYXRlcyBWX2lwcG9ydF9yZmM2MDU2YWxnIHRvIHRoZSBwcm92
aWRlZCB2YWx1ZSBhbmQKKyAqIGVuc3VyZXMgaXQgaXMgaW4gdGhlIHN1cHBvcnRlZCByYW5nZSAo
MSAtIDUpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9uZXRfcmZjNjA1Nl9hbGdvcml0aG1fY2hl
Y2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwl1X2ludCBhbGdvcml0aG0gPSAqKHVfaW50ICop
YXJnMTsKKwlpbnQgZXJyb3I7CisKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZuZXRfc3lzY3Rs
X2hhbmRsZV91aW50KG9pZHAsICZhbGdvcml0aG0sIDAsIHJlcSk7CisjZWxzZQorCWVycm9yID0g
c3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmFsZ29yaXRobSwgMCwgcmVxKTsKKyNlbmRpZgorCisJ
aWYgKGVycm9yID09IDApIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKKwkJY2FzZSBJTlBfUkZD
NjA1Nl9BTEdfMToKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMjoKKwkJY2FzZSBJTlBfUkZDNjA1
Nl9BTEdfMzoKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNDoKKwkJY2FzZSBJTlBfUkZDNjA1Nl9B
TEdfNToKKwkJCVZfaXBwb3J0X3JmYzYwNTZhbGcgPSBhbGdvcml0aG07CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCX0gCQorCisJcmV0dXJuIChlcnJv
cik7Cit9CisKKy8qCisgKiBVcGRhdGVzIFZfaXBwb3J0X3JmYzYwNTZhbGc1X3RyYWRlb2ZmIHRv
IHByb3ZpZGVkIHZhbHVlCisgKiBhbmQgZW5zdXJlcyBpdCBpcyBpbiB0aGUgc3VwcG9ydGVkIHJh
bmdlICgxIC0gNjU1MzYpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9uZXRfcmZjNjA1NmFsZzVf
dHJhZGVvZmZfY2hlY2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwl1X2ludCB0cmFkZW9mZiA9
ICoodV9pbnQgKilhcmcxOworCWludCBlcnJvcjsKKworI2lmZGVmIFZJTUFHRQorCWVycm9yID0g
dm5ldF9zeXNjdGxfaGFuZGxlX3VpbnQob2lkcCwgJnRyYWRlb2ZmLCAwLCByZXEpOworI2Vsc2UK
KwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0cmFkZW9mZiwgMCwgcmVxKTsKKyNl
bmRpZgorCisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHRyYWRlb2ZmIDwgMSB8fCB0cmFkZW9m
ZiA+IDY1NTM2KQorCQkJcmV0dXJuIChFSU5WQUwpOworCQllbHNlCisJCQlWX2lwcG9ydF9yZmM2
MDU2YWxnNV90cmFkZW9mZiA9IHRyYWRlb2ZmOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQor
CiBTWVNDVExfTk9ERShfbmV0X2luZXRfaXAsIElQUFJPVE9fSVAsIHBvcnRyYW5nZSwgQ1RMRkxB
R19SVywgMCwgIklQIFBvcnRzIik7CiAKIFNZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0X2lwX3Bv
cnRyYW5nZSwgT0lEX0FVVE8sIGxvd2ZpcnN0LApAQCAtMTc0LDYgKzIzNywxNSBAQAogCSZWTkVU
X05BTUUoaXBwb3J0X3JhbmRvbXRpbWUpLCAwLAogCSJNaW5pbXVtIHRpbWUgdG8ga2VlcCBzZXF1
ZW50YWwgcG9ydCAiCiAJImFsbG9jYXRpb24gYmVmb3JlIHN3aXRjaGluZyB0byBhIHJhbmRvbSBv
bmUiKTsKK1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0X2lwX3BvcnRyYW5nZSwgT0lEX0FVVE8s
IHJmYzYwNTZfYWxnb3JpdGhtLAorCUNUTFRZUEVfVUlOVHxDVExGTEFHX1JXLCAmVk5FVF9OQU1F
KGlwcG9ydF9yZmM2MDU2YWxnKSwgMCwKKwkmc3lzY3RsX25ldF9yZmM2MDU2X2FsZ29yaXRobV9j
aGVjaywgIklVIiwgCisJIlJGQyA2MDU2IFBvcnQgcmFuZG9taXphdGlvbiBhbGdvcml0aG0iKTsK
K1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0X2lwX3BvcnRyYW5nZSwgT0lEX0FVVE8sCisJcmZj
NjA1Nl9hbGdvcml0aG01X3RyYWRlb2ZmLCBDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywKKwkmVk5F
VF9OQU1FKGlwcG9ydF9yZmM2MDU2YWxnNV90cmFkZW9mZiksIDAsCisJJnN5c2N0bF9uZXRfcmZj
NjA1NmFsZzVfdHJhZGVvZmZfY2hlY2ssICJJVSIsCisJIlJGQyA2MDU2IEFsZ29yaXRobSA1IGNv
bXB1dGF0aW9uYWwgdHJhZGUtb2ZmIik7CiAKIC8qCiAgKiBpbl9wY2IuYzogbWFuYWdlIHRoZSBQ
cm90b2NvbCBDb250cm9sIEJsb2Nrcy4KQEAgLTQ2OCwyMSArNTQwLDE3NyBAQAogCQkJbGFzdCA9
IGF1eDsKIAkJfQogCi0JCWlmIChkb3JhbmRvbSkKLQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsKLQkJ
CQkgICAgKGFyYzRyYW5kb20oKSAlIChsYXN0IC0gZmlyc3QpKTsKLQogCQljb3VudCA9IGxhc3Qg
LSBmaXJzdDsKIAotCQlkbyB7Ci0JCQlpZiAoY291bnQtLSA8IDApCS8qIGNvbXBsZXRlbHkgdXNl
ZD8gKi8KLQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOwotCQkJKysqbGFzdHBvcnQ7Ci0JCQlp
ZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKLQkJCQkqbGFzdHBvcnQg
PSBmaXJzdDsKLQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKLQkJfSB3aGlsZSAoaW5fcGNi
bG9va3VwX2xvY2FsKHBjYmluZm8sIGxhZGRyLAotCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsK
KwkJLyogCisJCSAqIEFjY29yZGluZyB0byBSRkM2MDU2IHRoZXJlIGFyZSA1IChmaXZlKSBwb3Nz
aWJsZSBhbGdvcml0aG1zCisJCSAqIGZvciByYW5kb20gcG9ydCBhbGxvY2F0aW9uLiBVc2FnZSBv
ZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtCisJCSAqIGlzIHNwZWNpZmllZCB3aXRoIHRoZSAnbmV0
LmluZXQuaXAucG9ydHJhbmdlLnJmYzYwNTZfYWxnb3JpdGhtJworCQkgKiBzeXNjdGwgdmFyaWFi
bGUuIERlZmF1bHQgdmFsdWUgaXMgMSwgd2hpY2ggcmVwcmVzZW50cyB0aGUKKwkJICogbGVnYWN5
IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24gYWxnb3JpdGhtIGluIEZyZWVCU0QuCisJCSAqLworCQlp
ZiAoZG9yYW5kb20pIHsKKwkJCXN3aXRjaCAoVl9pcHBvcnRfcmZjNjA1NmFsZykgeworCQkJY2Fz
ZSBJTlBfUkZDNjA1Nl9BTEdfNToJLyogUmFuZG9tLUluY3JlbWVudHMgUG9ydCBTZWxlY3Rpb24g
Ki8KKwkJCQlkbyB7CisJCQkJCWlmIChjb3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAq
LworCQkJCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKworCQkJCQkqbGFzdHBvcnQgPSBmaXJz
dCArICgoYXJjNHJhbmRvbSgpICUgNjU1MzYpICsgCisJCQkJCSAgICAoYXJjNHJhbmRvbSgpICUg
Vl9pcHBvcnRfcmZjNjA1NmFsZzVfdHJhZGVvZmYpICsgMSk7CisKKwkJCQkJaWYgKCpsYXN0cG9y
dCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsK
KwkJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOworCQkJCX0gd2hpbGUgKGluX3BjYmxvb2t1
cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJ
CQlicmVhazsKKwkJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzQ6CS8qIERvdWJsZS1IYXNoIFBvcnQg
U2VsZWN0aW9uIEFsZ29yaXRobSAqLworCQkJCXsKKwkJCQkJTUQ1X0NUWCBmX2N0eDsKKwkJCQkJ
TUQ1X0NUWCBnX2N0eDsKKwkJCQkJdV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJ
CQkJdV9pbnQzMl90IEdbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQkJdV9pbnQzMl90IHNlY3Jl
dF9mWzRdID0geyAwLCAwLCAwLCAwIH07CisJCQkJCXVfaW50MzJfdCBzZWNyZXRfZ1s0XSA9IHsg
MCwgMCwgMCwgMCB9OworCQkJCQl1X2ludDE2X3QgdGFibGVbMTZdOyAKKwkJCQkJdV9pbnQzMl90
IGluZGV4ID0gMDsKKwkJCQkJdV9pbnQzMl90IG9mZnNldCA9IDA7CisKKwkJCQkJc2VjcmV0X2Zb
MF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9mWzFdID0gYXJjNHJhbmRvbSgpOworCQkJ
CQlzZWNyZXRfZlsyXSA9IGFyYzRyYW5kb20oKTsKKwkJCQkJc2VjcmV0X2ZbM10gPSBhcmM0cmFu
ZG9tKCk7CisKKwkJCQkJc2VjcmV0X2dbMF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9n
WzFdID0gYXJjNHJhbmRvbSgpOworCQkJCQlzZWNyZXRfZ1syXSA9IGFyYzRyYW5kb20oKTsKKwkJ
CQkJc2VjcmV0X2dbM10gPSBhcmM0cmFuZG9tKCk7CisKKwkJCQkJZm9yIChpbmRleCA9IDA7IGlu
ZGV4IDwgc2l6ZW9mKHRhYmxlKTsgaW5kZXgrKykKKwkJCQkJCXRhYmxlW2luZGV4XSA9IGFyYzRy
YW5kb20oKSAlIDY1NTM2OworCisJCQkJCU1ENUluaXQoJmZfY3R4KTsKKwkJCQkJTUQ1VXBkYXRl
KCZmX2N0eCwgKHVfY2hhciAqKSZpbnAtPmlucF9sYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAt
PmlucF9sYWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5w
X2ZhZGRyLAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0
ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBvcnQsCisJCQkJCSAgICBzaXplb2YoaW5w
LT5pbnBfZnBvcnQpKTsKKwkJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKXNlY3JldF9m
LAorCQkJCQkgICAgc2l6ZW9mKHNlY3JldF9mKSk7CisJCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikm
RiwgJmZfY3R4KTsKKworCQkJCQlvZmZzZXQgPSAoKEZbMF0gXiBGWzFdKSBeIChGWzJdIF4gRlsz
XSkpOworCisJCQkJCU1ENUluaXQoJmdfY3R4KTsKKwkJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVf
Y2hhciAqKSZpbnAtPmlucF9sYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9sYWRkcikp
OworCQkJCQlNRDVVcGRhdGUoJmdfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2ZhZGRyLAorCQkJ
CQkgICAgc2l6ZW9mKGlucC0+aW5wX2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0ZSgmZ19jdHgsICh1
X2NoYXIgKikmaW5wLT5pbnBfZnBvcnQsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQp
KTsKKwkJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVfY2hhciAqKXNlY3JldF9nLAorCQkJCQkgICAg
c2l6ZW9mKHNlY3JldF9nKSk7CisJCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRywgJmdfY3R4KTsK
KworCQkJCQlpbmRleCA9ICgoR1swXSBeIEdbMV0pIF4gKEdbMl0gXiBHWzNdKSkgJSBzaXplb2Yo
dGFibGUpOworCisJCQkJCWRvIHsKKwkJCQkJCWlmIChjb3VudC0tIDwgMCkJLyogY29tcGxldGVs
eSB1c2VkPyAqLworCQkJCQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJCSpsYXN0
cG9ydCA9IGZpcnN0ICsgCisJCQkJCQkgICAgKG9mZnNldCArIHRhYmxlW2luZGV4XSsrKSAlIGNv
dW50OworCisJCQkJCQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkK
KwkJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0
KTsKKwkJCQkJfSB3aGlsZSAoaW5fcGNibG9va3VwX2xvY2FsKHBjYmluZm8sIGxhZGRyLAorCQkJ
CQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIElO
UF9SRkM2MDU2X0FMR18zOgkvKiBTaW1wbGUgSGFzaC1CYXNlZCBQb3J0IFNlbGVjdGlvbiBBbGdv
cml0aG0gKi8KKwkJCQl7CisJCQkJCU1ENV9DVFggZl9jdHg7CisJCQkJCXVfaW50MzJfdCBGWzRd
ID0geyAwLCAwLCAwLCAwIH07CisJCQkJCXVfaW50MzJfdCBzZWNyZXRfZls0XSA9IHsgMCwgMCwg
MCwgMCB9OworCQkJCQl1X2ludDMyX3Qgb2Zmc2V0ID0gMDsKKworCQkJCQlzZWNyZXRfZlswXSA9
IGFyYzRyYW5kb20oKTsKKwkJCQkJc2VjcmV0X2ZbMV0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNl
Y3JldF9mWzJdID0gYXJjNHJhbmRvbSgpOworCQkJCQlzZWNyZXRfZlszXSA9IGFyYzRyYW5kb20o
KTsKKworCQkJCQlNRDVJbml0KCZmX2N0eCk7CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2No
YXIgKikmaW5wLT5pbnBfbGFkZHIsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfbGFkZHIpKTsK
KwkJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKSZpbnAtPmlucF9mYWRkciwKKwkJCQkJ
ICAgIHNpemVvZihpbnAtPmlucF9mYWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9j
aGFyICopJmlucC0+aW5wX2Zwb3J0LAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0KSk7
CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKilzZWNyZXRfZiwKKwkJCQkJICAgIHNp
emVvZihzZWNyZXRfZikpOworCQkJCQlNRDVGaW5hbCgodV9jaGFyICopJkYsICZmX2N0eCk7CisK
KwkJCQkJb2Zmc2V0ID0gKChGWzBdIF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsKKworCQkJCQlk
byB7CisJCQkJCQlpZiAoY291bnQtLSA8IDApCS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJ
CQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgo
YXJjNHJhbmRvbSgpICUgNjU1MzYpICsgCisJCQkJCQkgICAgKG9mZnNldCAlIDY1NTM2KSkgJSBj
b3VudDsKKworCQkJCQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3Qp
CisJCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCQlscG9ydCA9IGh0b25zKCpsYXN0cG9y
dCk7CisJCQkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJ
CQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CQkJCQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNh
c2UgSU5QX1JGQzYwNTZfQUxHXzI6CS8qIFNpbXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3Jp
dGhtIElJICovCisJCQkJZG8geworCQkJCQlpZiAoY291bnQtLSA8IDApCS8qIGNvbXBsZXRlbHkg
dXNlZD8gKi8KKwkJCQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJKmxhc3Rwb3J0
ID0gZmlyc3QgKyAoYXJjNHJhbmRvbSgpICUgKGxhc3QgLSBmaXJzdCkpOworCisJCQkJCWlmICgq
bGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0g
Zmlyc3Q7CisJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9w
Y2Jsb29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVk
KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIElOUF9SRkM2MDU2X0FMR18xOgkvKiBTaW1wbGUgUG9y
dCBSYW5kb21pemF0aW9uIEFsZ29yaXRobSBJICovCisJCQlkZWZhdWx0OgorCQkJCSpsYXN0cG9y
dCA9IGZpcnN0ICsgKGFyYzRyYW5kb20oKSAlIChsYXN0IC0gZmlyc3QpKTsKKworCQkJCWRvIHsK
KwkJCQkJaWYgKGNvdW50LS0gPCAwKQkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCQlyZXR1
cm4gKEVBRERSTk9UQVZBSUwpOworCisJCQkJCSsrKmxhc3Rwb3J0OworCisJCQkJCWlmICgqbGFz
dHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmly
c3Q7CisJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9wY2Js
b29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7
CisJCQl9CisJCX0gZWxzZSB7CisJCQlkbyB7CisJCQkJaWYgKGNvdW50LS0gPCAwKSAgICAgICAg
LyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQor
CQkJCSsrKmxhc3Rwb3J0OworCisJCQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9y
dCA+IGxhc3QpCisJCQkJCSpsYXN0cG9ydCA9IGZpcnN0OworCQkJCWxwb3J0ID0gaHRvbnMoKmxh
c3Rwb3J0KTsKKwkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwK
KwkJCSAgICBscG9ydCwgd2lsZCwgY3JlZCkpOworCQl9CiAJfQogCSpsYWRkcnAgPSBsYWRkci5z
X2FkZHI7CiAJKmxwb3J0cCA9IGxwb3J0OwpkaWZmIC1yIDRlYTA3N2Y1NDZkZCBzcmMvc3lzL25l
dGluZXQvaW5fcGNiLmgKLS0tIGEvc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5oCUZyaSBKYW4gMjgg
MTI6MjE6MDggMjAxMSArMDIwMAorKysgYi9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmgJRnJpIEph
biAyOCAxNjoxMDowOCAyMDExICswMjAwCkBAIC00NTIsNiArNDUyLDE1IEBACiAKICNkZWZpbmUJ
SU5QX0NIRUNLX1NPQ0tBRihzbywgYWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKIAorLyoKKyAq
IFJGQzYwNTYgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29yaXRobXMKKyAqLworI2RlZmluZQlJTlBf
UkZDNjA1Nl9BTEdfMQkxCS8qIFNpbXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtIEkg
Ki8KKyNkZWZpbmUJSU5QX1JGQzYwNTZfQUxHXzIJMgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0
aW9uIEFsZ29yaXRobSBJSSAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfMwkzCS8qIFNpbXBs
ZSBIYXNoLUJhc2VkIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLworI2RlZmluZQlJTlBfUkZD
NjA1Nl9BTEdfNAk0CS8qIERvdWJsZS1IYXNoIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLwor
I2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfNQk1CS8qIFJhbmRvbS1JbmNyZW1lbnRzIFBvcnQgU2Vs
ZWN0aW9uIEFsZ29yaXRobSAqLworCiAjaWZkZWYgX0tFUk5FTAogVk5FVF9ERUNMQVJFKGludCwg
aXBwb3J0X3Jlc2VydmVkaGlnaCk7CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmVzZXJ2ZWRs
b3cpOwpAQCAtNDY2LDYgKzQ3NSw4IEBACiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmFuZG9t
dGltZSk7CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CiBWTkVUX0RFQ0xB
UkUoaW50LCBpcHBvcnRfdGNwYWxsb2NzKTsKK1ZORVRfREVDTEFSRSh1X2ludCwgaXBwb3J0X3Jm
YzYwNTZhbGcpOworVk5FVF9ERUNMQVJFKHVfaW50LCBpcHBvcnRfcmZjNjA1NmFsZzVfdHJhZGVv
ZmYpOwogCiAjZGVmaW5lCVZfaXBwb3J0X3Jlc2VydmVkaGlnaAlWTkVUKGlwcG9ydF9yZXNlcnZl
ZGhpZ2gpCiAjZGVmaW5lCVZfaXBwb3J0X3Jlc2VydmVkbG93CVZORVQoaXBwb3J0X3Jlc2VydmVk
bG93KQpAQCAtNDgwLDYgKzQ5MSw4IEBACiAjZGVmaW5lCVZfaXBwb3J0X3JhbmRvbXRpbWUJVk5F
VChpcHBvcnRfcmFuZG9tdGltZSkKICNkZWZpbmUJVl9pcHBvcnRfc3RvcHJhbmRvbQlWTkVUKGlw
cG9ydF9zdG9wcmFuZG9tKQogI2RlZmluZQlWX2lwcG9ydF90Y3BhbGxvY3MJVk5FVChpcHBvcnRf
dGNwYWxsb2NzKQorI2RlZmluZSBWX2lwcG9ydF9yZmM2MDU2YWxnCVZORVQoaXBwb3J0X3JmYzYw
NTZhbGcpCisjZGVmaW5lIFZfaXBwb3J0X3JmYzYwNTZhbGc1X3RyYWRlb2ZmCVZORVQoaXBwb3J0
X3JmYzYwNTZhbGc1X3RyYWRlb2ZmKQogCiBleHRlcm4gc3RydWN0IGNhbGxvdXQgaXBwb3J0X3Rp
Y2tfY2FsbG91dDsKIApkaWZmIC1yIDRlYTA3N2Y1NDZkZCBzcmMvc3lzL25ldGluZXQ2L2luNl9z
cmMuYwotLS0gYS9zcmMvc3lzL25ldGluZXQ2L2luNl9zcmMuYwlGcmkgSmFuIDI4IDEyOjIxOjA4
IDIwMTEgKzAyMDAKKysrIGIvc3JjL3N5cy9uZXRpbmV0Ni9pbjZfc3JjLmMJRnJpIEphbiAyOCAx
NjoxMDowOCAyMDExICswMjAwCkBAIC0xMDgsNiArMTA4LDggQEAKICNpbmNsdWRlIDxuZXRpbmV0
Ni9zY29wZTZfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+CiAKKyNpbmNsdWRlIDxz
eXMvbWQ1Lmg+CisKIHN0YXRpYyBzdHJ1Y3QgbXR4IGFkZHJzZWxfbG9jazsKICNkZWZpbmUJQURE
UlNFTF9MT0NLX0lOSVQoKQltdHhfaW5pdCgmYWRkcnNlbF9sb2NrLCAiYWRkcnNlbF9sb2NrIiwg
TlVMTCwgTVRYX0RFRikKICNkZWZpbmUJQUREUlNFTF9MT0NLKCkJCW10eF9sb2NrKCZhZGRyc2Vs
X2xvY2spCkBAIC05MTksMjMgKzkyMSwxOTUgQEAKIAkJbGFzdCA9IGF1eDsKIAl9CiAKLQlpZiAo
ZG9yYW5kb20pCi0JCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5kb20oKSAlIChsYXN0IC0g
Zmlyc3QpKTsKLQogCWNvdW50ID0gbGFzdCAtIGZpcnN0OwogCi0JZG8gewotCQlpZiAoY291bnQt
LSA8IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLwotCQkJLyogVW5kbyBhbiBhZGRyZXNzIGJp
bmQgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KLQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFk
ZHJfYW55OwotCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwkvKgorCSAqIEFjY29yZGluZyB0
byBSRkM2MDU2IHRoZXJlIGFyZSA1IChmaXZlKSBwb3NzaWJsZSBhbGdvcml0aG1zCisJICogZm9y
IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24uIFVzYWdlIG9mIGEgcGFydGljdWxhciBhbGdvcml0aG0K
KwkgKiBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgJ25ldC5pbmV0LmlwLnBvcnRyYW5nZS5yZmM2MDU2
X2FsZ29yaXRobScKKwkgKiBzeXNjdGwgdmFyaWFibGUuIERlZmF1bHQgdmFsdWUgaXMgMSwgd2hp
Y2ggcmVwcmVzZW50cyB0aGUKKwkgKiBsZWdhY3kgcmFuZG9tIHBvcnQgYWxsb2NhdGlvbiBhbGdv
cml0aG0gaW4gRnJlZUJTRC4KKwkgKi8KKwlpZiAoZG9yYW5kb20pIHsKKwkJc3dpdGNoIChWX2lw
cG9ydF9yZmM2MDU2YWxnKSB7CisJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzU6CS8qIFJhbmRvbS1J
bmNyZW1lbnRzIFBvcnQgU2VsZWN0aW9uICovCisJCQlkbyB7CisJCQkJaWYgKGNvdW50LS0gPCAw
KSB7CS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJLyogVW5kbyBhbiBhZGRyZXNzIGJpbmQg
dGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KKwkJCQkJaW5wLT5pbjZwX2xhZGRyID0gaW42YWRk
cl9hbnk7CisJCQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJCQkJfQorCisJCQkJKmxhc3Rw
b3J0ID0gZmlyc3QgKyAoKGFyYzRyYW5kb20oKSAlIDY1NTM2KSArCisJCQkJICAgIChhcmM0cmFu
ZG9tKCkgJSBWX2lwcG9ydF9yZmM2MDU2YWxnNV90cmFkZW9mZikgKyAxKTsKKworCQkJCWlmICgq
bGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQorCQkJCQkqbGFzdHBvcnQgPSBm
aXJzdDsKKwkJCQlscG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7CisJCQl9IHdoaWxlIChpbjZfcGNi
bG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFkZHIsCisJCQkgICAgbHBvcnQsIHdp
bGQsIGNyZWQpKTsKKwkJCWJyZWFrOworCQljYXNlIElOUF9SRkM2MDU2X0FMR180OiAvKiBEb3Vi
bGUtSGFzaCBQb3J0IFNlbGVjdGlvbiBBbGdvcml0aG0gKi8KKwkJCXsKKwkJCQlNRDVfQ1RYIGZf
Y3R4OworCQkJCU1ENV9DVFggZ19jdHg7CisJCQkJdV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAs
IDAgfTsKKwkJCQl1X2ludDMyX3QgR1s0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCXVfaW50MzJf
dCBzZWNyZXRfZls0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCXVfaW50MzJfdCBzZWNyZXRfZ1s0
XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCXVfaW50MTZfdCB0YWJsZVsxNl07CisJCQkJdV9pbnQz
Ml90IGluZGV4ID0gMDsKKwkJCQl1X2ludDMyX3Qgb2Zmc2V0ID0gMDsKKworCQkJCXNlY3JldF9m
WzBdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzFdID0gYXJjNHJhbmRvbSgpOworCQkJ
CXNlY3JldF9mWzJdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzNdID0gYXJjNHJhbmRv
bSgpOworCisJCQkJc2VjcmV0X2dbMF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJc2VjcmV0X2dbMV0g
PSBhcmM0cmFuZG9tKCk7CisJCQkJc2VjcmV0X2dbMl0gPSBhcmM0cmFuZG9tKCk7CisJCQkJc2Vj
cmV0X2dbM10gPSBhcmM0cmFuZG9tKCk7CisKKwkJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBz
aXplb2YodGFibGUpOyBpbmRleCsrKQorCQkJCQl0YWJsZVtpbmRleF0gPSBhcmM0cmFuZG9tKCkg
JSA2NTUzNjsKKworCQkJCU1ENUluaXQoJmZfY3R4KTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAo
dV9jaGFyICopJmlucC0+aW42cF9sYWRkciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9sYWRk
cikpOworCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZwX2ZhZGRyLAor
CQkJCSAgICBzaXplb2YoaW5wLT5pbjZwX2ZhZGRyKSk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0eCwg
KHVfY2hhciAqKSZpbnAtPmlucF9mcG9ydCwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0
KSk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKXNlY3JldF9mLAorCQkJCSAgICBz
aXplb2Yoc2VjcmV0X2YpKTsKKwkJCQlNRDVGaW5hbCgodV9jaGFyICopJkYsICZmX2N0eCk7CisK
KwkJCQlvZmZzZXQgPSAoKEZbMF0gXiBGWzFdKSBeIChGWzJdIF4gRlszXSkpOworCisJCQkJTUQ1
SW5pdCgmZ19jdHgpOworCQkJCU1ENVVwZGF0ZSgmZ19jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZw
X2xhZGRyLAorCQkJCSAgICBzaXplb2YoaW5wLT5pbjZwX2xhZGRyKSk7CisJCQkJTUQ1VXBkYXRl
KCZnX2N0eCwgKHVfY2hhciAqKSZpbnAtPmluNnBfZmFkZHIsCisJCQkJICAgIHNpemVvZihpbnAt
PmluNnBfZmFkZHIpKTsKKwkJCQlNRDVVcGRhdGUoJmdfY3R4LCAodV9jaGFyICopJmlucC0+aW5w
X2Zwb3J0LAorCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQpKTsKKwkJCQlNRDVVcGRhdGUo
JmdfY3R4LCAodV9jaGFyICopc2VjcmV0X2csCisJCQkJICAgIHNpemVvZihzZWNyZXRfZykpOwor
CQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRywgJmdfY3R4KTsKKworCQkJCWluZGV4ID0gKChHWzBd
IF4gR1sxXSkgXiAoR1syXSBeIEdbM10pKSAlIHNpemVvZih0YWJsZSk7CisKKwkJCQlkbyB7CisJ
CQkJCWlmIChjb3VudC0tIDwgMCkgewkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCQkvKiBV
bmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1heSBoYXZlIG9jY3VycmVkLiAqLworCQkJCQkJaW5w
LT5pbjZwX2xhZGRyID0gaW42YWRkcl9hbnk7CisJCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwp
OworCQkJCQl9CisKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKworCQkJCQkgICAgKG9mZnNldCAr
IHRhYmxlW2luZGV4XSsrKSAlIGNvdW50OworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8
fCAqbGFzdHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0
ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbjZfcGNibG9va3VwX2xvY2FsKHBj
YmluZm8sICZpbnAtPmluNnBfbGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJ
CQl9CisJCQlicmVhazsKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMzogLyogU2ltcGxlIEhhc2gt
QmFzZWQgUG9ydCBTZWxlY3Rpb24gQWxnb3JpdGhtICovCisJCQl7CisJCQkJTUQ1X0NUWCBmX2N0
eDsKKwkJCQl1X2ludDMyX3QgRls0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCXVfaW50MzJfdCBz
ZWNyZXRfZls0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCXVfaW50MzJfdCBvZmZzZXQgPSAwOwor
CisJCQkJc2VjcmV0X2ZbMF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJc2VjcmV0X2ZbMV0gPSBhcmM0
cmFuZG9tKCk7CisJCQkJc2VjcmV0X2ZbMl0gPSBhcmM0cmFuZG9tKCk7CisJCQkJc2VjcmV0X2Zb
M10gPSBhcmM0cmFuZG9tKCk7CisKKwkJCQlNRDVJbml0KCZmX2N0eCk7CisJCQkJTUQ1VXBkYXRl
KCZmX2N0eCwgKHVfY2hhciAqKSZpbnAtPmluNnBfbGFkZHIsCisJCQkJICAgIHNpemVvZihpbnAt
PmluNnBfbGFkZHIpKTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW42
cF9mYWRkciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9mYWRkcikpOworCQkJCU1ENVVwZGF0
ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBvcnQsCisJCQkJICAgIHNpemVvZihpbnAt
PmlucF9mcG9ydCkpOworCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKilzZWNyZXRfZiwK
KwkJCQkgICAgc2l6ZW9mKHNlY3JldF9mKSk7CisJCQkJTUQ1RmluYWwoKHVfY2hhciAqKSZGLCAm
Zl9jdHgpOworCisJCQkJb2Zmc2V0ID0gKChGWzBdIF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsK
KworCQkJCWRvIHsKKwkJCQkJaWYgKGNvdW50LS0gPCAwKSB7CS8qIGNvbXBsZXRlbHkgdXNlZD8g
Ki8KKwkJCQkJCS8qIFVuZG8gYW4gYWRkcmVzcyBiaW5kIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQu
ICovCisJCQkJCQlpbnAtPmluNnBfbGFkZHIgPSBpbjZhZGRyX2FueTsKKwkJCQkJCXJldHVybiAo
RUFERFJOT1RBVkFJTCk7CisJCQkJCX0KKworCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgoYXJj
NHJhbmRvbSgpICUgNjU1MzYpICsKKwkJCQkJICAgIChvZmZzZXQgJSA2NTUzNikpICUgY291bnQ7
CisKKwkJCQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJ
CQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOworCQkJ
CX0gd2hpbGUgKGluNl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgJmlucC0+aW42cF9sYWRkciwK
KwkJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElO
UF9SRkM2MDU2X0FMR18yOgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29yaXRobSBJ
SSAqLworCQkJZG8geworCQkJCWlmIChjb3VudC0tIDwgMCkgewkvKiBjb21wbGV0ZWx5IHVzZWQ/
ICovCisJCQkJCS8qIFVuZG8gYW4gYWRkcmVzcyBiaW5kIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQu
ICovCisJCQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJfYW55OworCQkJCQlyZXR1cm4gKEVB
RERSTk9UQVZBSUwpOworCQkJCX0KKworCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5k
b20oKSAlIChsYXN0IC0gZmlyc3QpKTsKKworCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAq
bGFzdHBvcnQgPiBsYXN0KQorCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQlscG9ydCA9IGh0
b25zKCpsYXN0cG9ydCk7CisJCQl9IHdoaWxlIChpbjZfcGNibG9va3VwX2xvY2FsKHBjYmluZm8s
ICZpbnAtPmluNnBfbGFkZHIsCisJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJCWJyZWFr
OworCQljYXNlIElOUF9SRkM2MDU2X0FMR18xOgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9u
IEFsZ29yaXRobSBJICovCisJCWRlZmF1bHQ6CisJCQkqbGFzdHBvcnQgPSBmaXJzdCArIChhcmM0
cmFuZG9tKCkgJSAobGFzdCAtIGZpcnN0KSk7CisKKwkJCWRvIHsKKwkJCQlpZiAoY291bnQtLSA8
IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmlu
ZCB0aGF0IG1heSBoYXZlIG9jY3VycmVkLiAqLworCQkJCQlpbnAtPmluNnBfbGFkZHIgPSBpbjZh
ZGRyX2FueTsKKwkJCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwkJCQl9CisKKwkJCQkrKyps
YXN0cG9ydDsKKworCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0
KQorCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQlscG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7
CisJCQl9IHdoaWxlIChpbjZfcGNibG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFk
ZHIsCisJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKIAkJfQotCQkrKypsYXN0cG9ydDsKLQkJ
aWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCi0JCQkqbGFzdHBvcnQg
PSBmaXJzdDsKLQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOwotCX0gd2hpbGUgKGluNl9wY2Js
b29rdXBfbG9jYWwocGNiaW5mbywgJmlucC0+aW42cF9sYWRkciwKLQkgICAgbHBvcnQsIHdpbGQs
IGNyZWQpKTsKKwl9IGVsc2UgeworCQlkbyB7CisJCQlpZiAoY291bnQtLSA8IDApIHsJLyogY29t
cGxldGVseSB1c2VkPyAqLworCQkJCS8qIFVuZG8gYW4gYWRkcmVzcyBiaW5kIHRoYXQgbWF5IGhh
dmUgb2NjdXJyZWQuICovCisJCQkJaW5wLT5pbjZwX2xhZGRyID0gaW42YWRkcl9hbnk7CisJCQkJ
cmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwkJCX0KKworCQkJKysqbGFzdHBvcnQ7CisKKwkJCWlm
ICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQorCQkJCSpsYXN0cG9ydCA9
IGZpcnN0OworCQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOworCQl9IHdoaWxlIChpbjZfcGNi
bG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFkZHIsCisJCSAgICBscG9ydCwgd2ls
ZCwgY3JlZCkpOworCX0KIAogCWlucC0+aW5wX2xwb3J0ID0gbHBvcnQ7CiAJaWYgKGluX3BjYmlu
c2hhc2goaW5wKSAhPSAwKSB7Cg==
--0015175cb99ae421ce049ae8f559--



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