Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Oct 2003 02:16:13 -0600 (CST)
From:      Mike Silbersack <silby@silby.com>
To:        freebsd-net@freebsd.org
Cc:        iedowse@freebsd.org
Subject:   Changes to PCBPORTHASH wrt TCP, review needed
Message-ID:  <20031027014854.K2023@odysseus.silby.com>

next in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-1743396347-1067242013=:2023
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <20031027020712.N2023@odysseus.silby.com>


The attached patch is rather short, but makes a substantial change in how
ports are bound, so I'd like a quick review of the code and the concept if
possible.

In short, what this patch does is remove established TCP connections from
the PCBPORTHASH table, thereby allowing their ephemeral ports to be
concurrently used by other tcp connections to other hosts/ports.

To do this, I made the following changes:

- in_pcbinshash was modified so that the "porthash" parameter determines
whether or not the inp in question is added to the pcbporthash.

- in_pcbrehash was modified so that the "remove" parameter determines
whether the inp in question will be removed from the pcbportlist when it
is rehashed in the pcbhash

- in_pcbremlists was modified to account for pcbs not necessarily being in
both hashes

- syncache_socket uses the porthash parameter to ensure that incoming tcp
connections are never added to the pcbporthash.

- tcp_connect and tcp6_connect use ins_rehash to remove the inp in
question from the pcbporthash list after the final ip/port has been
determined.  Note that the pcbhash is still consulted, so an attempt to
create a tcp socket which conflicts with an already existing connection
will be detected correctly.

One easy way to test this patch is to install http_load, set your
ephemeral port range to something in the range of 30, and have it start
testing a host.  It will quickly create TIME_WAIT sockets filling all
ephemeral ports.  Without this patch, you will be unable to create
outgoing connections; with this patch, other outgoing connections will be
fine.

Note that since the port chosen is not released from the pcbporthash table
until tcp_connect, repeated calls to bind can still reserve all ephemeral
ports; I don't believe that is going to be a common case.

So far, the only problem I can see is that in_pcbbind, being unaware of
the state of pcbhash, may return ports which collide with in-use
connections for the destination host while non-colliding ports are still
available.  I should be able to work around this potential issue with a
simple retry loop, so it's not a big concern.

Otherwise, can anyone see any problems that this change would cause?  I
believe that it would change behavior so that SO_REUSEADDR and
SO_REUSEPORT would no longer be required for daemons which restart and
attempt to listen on the same port, but I believe this to be a positive
change.  Ports used by tcp listen sockets and udp sockets should be
protected as before, so that should be ok as well.  Am I missing something
subtle?

Thanks,

Mike "Silby" Silbersack
--0-1743396347-1067242013=:2023
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="pcbporthash-change.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <20031027020653.V2023@odysseus.silby.com>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="pcbporthash-change.patch"

ZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL25ldGluZXQvaW5fcGNiLmMg
L3Vzci9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmMNCi0tLSAvdXNyL3NyYy9z
eXMub2xkL25ldGluZXQvaW5fcGNiLmMJRnJpIE9jdCAyNCAxMjowNTowMCAy
MDAzDQorKysgL3Vzci9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmMJU3VuIE9j
dCAyNiAyMToxNDozNiAyMDAzDQpAQCAtMjEyLDcgKzIxMiw3IEBADQogCSAg
ICAmaW5wLT5pbnBfbHBvcnQsIHRkKTsNCiAJaWYgKGVycm9yKQ0KIAkJcmV0
dXJuIChlcnJvcik7DQotCWlmIChpbl9wY2JpbnNoYXNoKGlucCkgIT0gMCkg
ew0KKwlpZiAoaW5fcGNiaW5zaGFzaChpbnAsIDEpICE9IDApIHsNCiAJCWlu
cC0+aW5wX2xhZGRyLnNfYWRkciA9IElOQUREUl9BTlk7DQogCQlpbnAtPmlu
cF9scG9ydCA9IDA7DQogCQlyZXR1cm4gKEVBR0FJTik7DQpAQCAtNDYwLDcg
KzQ2MCw3IEBADQogCWlmIChpbnAtPmlucF9sYWRkci5zX2FkZHIgPT0gSU5B
RERSX0FOWSAmJiBpbnAtPmlucF9scG9ydCA9PSAwKSB7DQogCQlpbnAtPmlu
cF9scG9ydCA9IGxwb3J0Ow0KIAkJaW5wLT5pbnBfbGFkZHIuc19hZGRyID0g
bGFkZHI7DQotCQlpZiAoaW5fcGNiaW5zaGFzaChpbnApICE9IDApIHsNCisJ
CWlmIChpbl9wY2JpbnNoYXNoKGlucCwgMSkgIT0gMCkgew0KIAkJCWlucC0+
aW5wX2xhZGRyLnNfYWRkciA9IElOQUREUl9BTlk7DQogCQkJaW5wLT5pbnBf
bHBvcnQgPSAwOw0KIAkJCXJldHVybiAoRUFHQUlOKTsNCkBAIC00NzIsNyAr
NDcyLDcgQEANCiAJaW5wLT5pbnBfbGFkZHIuc19hZGRyID0gbGFkZHI7DQog
CWlucC0+aW5wX2ZhZGRyLnNfYWRkciA9IGZhZGRyOw0KIAlpbnAtPmlucF9m
cG9ydCA9IGZwb3J0Ow0KLQlpbl9wY2JyZWhhc2goaW5wKTsNCisJaW5fcGNi
cmVoYXNoKGlucCwgMCk7DQogCWlmIChhbm9ucG9ydCkNCiAJCWlucC0+aW5w
X2ZsYWdzIHw9IElOUF9BTk9OUE9SVDsNCiAJcmV0dXJuICgwKTsNCkBAIC02
NTIsNyArNjUyLDcgQEANCiANCiAJaW5wLT5pbnBfZmFkZHIuc19hZGRyID0g
SU5BRERSX0FOWTsNCiAJaW5wLT5pbnBfZnBvcnQgPSAwOw0KLQlpbl9wY2Jy
ZWhhc2goaW5wKTsNCisJaW5fcGNicmVoYXNoKGlucCwgMCk7DQogCWlmIChp
bnAtPmlucF9zb2NrZXQtPnNvX3N0YXRlICYgU1NfTk9GRFJFRikNCiAJCWlu
X3BjYmRldGFjaChpbnApOw0KIH0NCkBAIC0xMDc1LDggKzEwNzUsOSBAQA0K
ICAqIEluc2VydCBQQ0Igb250byB2YXJpb3VzIGhhc2ggbGlzdHMuDQogICov
DQogaW50DQotaW5fcGNiaW5zaGFzaChpbnApDQoraW5fcGNiaW5zaGFzaChp
bnAsIHBvcnRoYXNoKQ0KIAlzdHJ1Y3QgaW5wY2IgKmlucDsNCisJaW50IHBv
cnRoYXNoOw0KIHsNCiAJc3RydWN0IGlucGNiaGVhZCAqcGNiaGFzaDsNCiAJ
c3RydWN0IGlucGNicG9ydGhlYWQgKnBjYnBvcnRoYXNoOw0KQEAgLTEwOTQs
MzAgKzEwOTUsMzQgQEANCiAJcGNiaGFzaCA9ICZwY2JpbmZvLT5oYXNoYmFz
ZVtJTlBfUENCSEFTSChoYXNoa2V5X2ZhZGRyLA0KIAkJIGlucC0+aW5wX2xw
b3J0LCBpbnAtPmlucF9mcG9ydCwgcGNiaW5mby0+aGFzaG1hc2spXTsNCiAN
Ci0JcGNicG9ydGhhc2ggPSAmcGNiaW5mby0+cG9ydGhhc2hiYXNlW0lOUF9Q
Q0JQT1JUSEFTSChpbnAtPmlucF9scG9ydCwNCi0JICAgIHBjYmluZm8tPnBv
cnRoYXNobWFzayldOw0KKwlpZiAocG9ydGhhc2gpIHsNCisJCXBjYnBvcnRo
YXNoID0gJnBjYmluZm8tPnBvcnRoYXNoYmFzZVtJTlBfUENCUE9SVEhBU0go
aW5wLT5pbnBfbHBvcnQsDQorCQkgICAgcGNiaW5mby0+cG9ydGhhc2htYXNr
KV07DQogDQotCS8qDQotCSAqIEdvIHRocm91Z2ggcG9ydCBsaXN0IGFuZCBs
b29rIGZvciBhIGhlYWQgZm9yIHRoaXMgbHBvcnQuDQotCSAqLw0KLQlMSVNU
X0ZPUkVBQ0gocGhkLCBwY2Jwb3J0aGFzaCwgcGhkX2hhc2gpIHsNCi0JCWlm
IChwaGQtPnBoZF9wb3J0ID09IGlucC0+aW5wX2xwb3J0KQ0KLQkJCWJyZWFr
Ow0KLQl9DQotCS8qDQotCSAqIElmIG5vbmUgZXhpc3RzLCBtYWxsb2Mgb25l
IGFuZCB0YWNrIGl0IG9uLg0KLQkgKi8NCi0JaWYgKHBoZCA9PSBOVUxMKSB7
DQotCQlNQUxMT0MocGhkLCBzdHJ1Y3QgaW5wY2Jwb3J0ICosIHNpemVvZihz
dHJ1Y3QgaW5wY2Jwb3J0KSwgTV9QQ0IsIE1fTk9XQUlUKTsNCisJCS8qDQor
CQkgKiBHbyB0aHJvdWdoIHBvcnQgbGlzdCBhbmQgbG9vayBmb3IgYSBoZWFk
IGZvciB0aGlzIGxwb3J0Lg0KKwkJICovDQorCQlMSVNUX0ZPUkVBQ0gocGhk
LCBwY2Jwb3J0aGFzaCwgcGhkX2hhc2gpIHsNCisJCQlpZiAocGhkLT5waGRf
cG9ydCA9PSBpbnAtPmlucF9scG9ydCkNCisJCQkJYnJlYWs7DQorCQl9DQor
CQkvKg0KKwkJICogSWYgbm9uZSBleGlzdHMsIG1hbGxvYyBvbmUgYW5kIHRh
Y2sgaXQgb24uDQorCQkgKi8NCiAJCWlmIChwaGQgPT0gTlVMTCkgew0KLQkJ
CXJldHVybiAoRU5PQlVGUyk7IC8qIFhYWCAqLw0KKwkJCU1BTExPQyhwaGQs
IHN0cnVjdCBpbnBjYnBvcnQgKiwgc2l6ZW9mKHN0cnVjdCBpbnBjYnBvcnQp
LCBNX1BDQiwgTV9OT1dBSVQpOw0KKwkJCWlmIChwaGQgPT0gTlVMTCkgew0K
KwkJCQlyZXR1cm4gKEVOT0JVRlMpOyAvKiBYWFggKi8NCisJCQl9DQorCQkJ
cGhkLT5waGRfcG9ydCA9IGlucC0+aW5wX2xwb3J0Ow0KKwkJCUxJU1RfSU5J
VCgmcGhkLT5waGRfcGNibGlzdCk7DQorCQkJTElTVF9JTlNFUlRfSEVBRChw
Y2Jwb3J0aGFzaCwgcGhkLCBwaGRfaGFzaCk7DQogCQl9DQotCQlwaGQtPnBo
ZF9wb3J0ID0gaW5wLT5pbnBfbHBvcnQ7DQotCQlMSVNUX0lOSVQoJnBoZC0+
cGhkX3BjYmxpc3QpOw0KLQkJTElTVF9JTlNFUlRfSEVBRChwY2Jwb3J0aGFz
aCwgcGhkLCBwaGRfaGFzaCk7DQorCQlpbnAtPmlucF9waGQgPSBwaGQ7DQor
CQlMSVNUX0lOU0VSVF9IRUFEKCZwaGQtPnBoZF9wY2JsaXN0LCBpbnAsIGlu
cF9wb3J0bGlzdCk7DQorCX0gZWxzZSB7DQorCQlpbnAtPmlucF9waGQgPSBO
VUxMOw0KIAl9DQotCWlucC0+aW5wX3BoZCA9IHBoZDsNCi0JTElTVF9JTlNF
UlRfSEVBRCgmcGhkLT5waGRfcGNibGlzdCwgaW5wLCBpbnBfcG9ydGxpc3Qp
Ow0KIAlMSVNUX0lOU0VSVF9IRUFEKHBjYmhhc2gsIGlucCwgaW5wX2hhc2gp
Ow0KIAlyZXR1cm4gKDApOw0KIH0NCkBAIC0xMTI5LDExICsxMTM0LDEzIEBA
DQogICogbm90IGNoYW5nZSBhZnRlciBpbl9wY2JpbnNoYXNoKCkgaGFzIGJl
ZW4gY2FsbGVkLg0KICAqLw0KIHZvaWQNCi1pbl9wY2JyZWhhc2goaW5wKQ0K
K2luX3BjYnJlaGFzaChpbnAsIHJlbW92ZSkNCiAJc3RydWN0IGlucGNiICpp
bnA7DQorCWludCByZW1vdmU7DQogew0KIAlzdHJ1Y3QgaW5wY2JoZWFkICpo
ZWFkOw0KIAl1X2ludDMyX3QgaGFzaGtleV9mYWRkcjsNCisJc3RydWN0IGlu
cGNicG9ydCAqcGhkID0gaW5wLT5pbnBfcGhkOw0KIA0KICNpZmRlZiBJTkVU
Ng0KIAlpZiAoaW5wLT5pbnBfdmZsYWcgJiBJTlBfSVBWNikNCkBAIC0xMTQ3
LDYgKzExNTQsMTUgQEANCiANCiAJTElTVF9SRU1PVkUoaW5wLCBpbnBfaGFz
aCk7DQogCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgaW5wLCBpbnBfaGFzaCk7
DQorDQorCWlmIChyZW1vdmUgJiYgcGhkKSB7DQorCQlMSVNUX1JFTU9WRShp
bnAsIGlucF9wb3J0bGlzdCk7DQorCQlpZiAoTElTVF9GSVJTVCgmcGhkLT5w
aGRfcGNibGlzdCkgPT0gTlVMTCkgew0KKwkJCUxJU1RfUkVNT1ZFKHBoZCwg
cGhkX2hhc2gpOw0KKwkJCWZyZWUocGhkLCBNX1BDQik7DQorCQl9DQorCQlp
bnAtPmlucF9waGQgPSBOVUxMOw0KKwl9DQogfQ0KIA0KIC8qDQpAQCAtMTE2
MSwxMCArMTE3NywxMiBAQA0KIAkJc3RydWN0IGlucGNicG9ydCAqcGhkID0g
aW5wLT5pbnBfcGhkOw0KIA0KIAkJTElTVF9SRU1PVkUoaW5wLCBpbnBfaGFz
aCk7DQotCQlMSVNUX1JFTU9WRShpbnAsIGlucF9wb3J0bGlzdCk7DQotCQlp
ZiAoTElTVF9GSVJTVCgmcGhkLT5waGRfcGNibGlzdCkgPT0gTlVMTCkgew0K
LQkJCUxJU1RfUkVNT1ZFKHBoZCwgcGhkX2hhc2gpOw0KLQkJCWZyZWUocGhk
LCBNX1BDQik7DQorCQlpZiAocGhkKSB7DQorCQkJTElTVF9SRU1PVkUoaW5w
LCBpbnBfcG9ydGxpc3QpOw0KKwkJCWlmIChMSVNUX0ZJUlNUKCZwaGQtPnBo
ZF9wY2JsaXN0KSA9PSBOVUxMKSB7DQorCQkJCUxJU1RfUkVNT1ZFKHBoZCwg
cGhkX2hhc2gpOw0KKwkJCQlmcmVlKHBoZCwgTV9QQ0IpOw0KKwkJCX0NCiAJ
CX0NCiAJfQ0KIAlMSVNUX1JFTU9WRShpbnAsIGlucF9saXN0KTsNCmRpZmYg
LXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9uZXRpbmV0L2luX3BjYi5oIC91c3Iv
c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5oDQotLS0gL3Vzci9zcmMvc3lzLm9s
ZC9uZXRpbmV0L2luX3BjYi5oCUZyaSBPY3QgMjQgMTI6MDU6MDAgMjAwMw0K
KysrIC91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5oCVN1biBPY3QgMjYg
MjE6MDM6MTUgMjAwMw0KQEAgLTM0MCw3ICszNDAsNyBAQA0KIAkgICAgc3Ry
dWN0IHRocmVhZCAqKTsNCiB2b2lkCWluX3BjYmRldGFjaChzdHJ1Y3QgaW5w
Y2IgKik7DQogdm9pZAlpbl9wY2JkaXNjb25uZWN0KHN0cnVjdCBpbnBjYiAq
KTsNCi1pbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5wY2IgKik7DQoraW50
CWluX3BjYmluc2hhc2goc3RydWN0IGlucGNiICosIGludCk7DQogc3RydWN0
IGlucGNiICoNCiAJaW5fcGNibG9va3VwX2xvY2FsKHN0cnVjdCBpbnBjYmlu
Zm8gKiwNCiAJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsNCkBA
IC0zNDksNyArMzQ5LDcgQEANCiAJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2lu
dCwgaW50LCBzdHJ1Y3QgaWZuZXQgKik7DQogdm9pZAlpbl9wY2Jub3RpZnlh
bGwoc3RydWN0IGlucGNiaW5mbyAqcGNiaW5mbywgc3RydWN0IGluX2FkZHIs
DQogCSAgICBpbnQsIHN0cnVjdCBpbnBjYiAqKCopKHN0cnVjdCBpbnBjYiAq
LCBpbnQpKTsNCi12b2lkCWluX3BjYnJlaGFzaChzdHJ1Y3QgaW5wY2IgKik7
DQordm9pZAlpbl9wY2JyZWhhc2goc3RydWN0IGlucGNiICosIGludCk7DQog
aW50CWluX3NldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKipuYW0sIHN0cnVjdCBpbnBjYmluZm8gKnBjYmluZm8pOw0K
IGludAlpbl9zZXRzb2NrYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICoqbmFtLCBzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvKTs7
DQogc3RydWN0IHNvY2thZGRyICoNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lz
Lm9sZC9uZXRpbmV0L3RjcF9zeW5jYWNoZS5jIC91c3Ivc3JjL3N5cy9uZXRp
bmV0L3RjcF9zeW5jYWNoZS5jDQotLS0gL3Vzci9zcmMvc3lzLm9sZC9uZXRp
bmV0L3RjcF9zeW5jYWNoZS5jCUZyaSBPY3QgMjQgMTI6MDU6MDAgMjAwMw0K
KysrIC91c3Ivc3JjL3N5cy9uZXRpbmV0L3RjcF9zeW5jYWNoZS5jCVN1biBP
Y3QgMjYgMDI6MjY6NDEgMjAwMw0KQEAgLTYwNSw3ICs2MDUsNyBAQA0KIAl9
DQogI2VuZGlmDQogCWlucC0+aW5wX2xwb3J0ID0gc2MtPnNjX2luYy5pbmNf
bHBvcnQ7DQotCWlmIChpbl9wY2JpbnNoYXNoKGlucCkgIT0gMCkgew0KKwlp
ZiAoaW5fcGNiaW5zaGFzaChpbnAsIDApICE9IDApIHsNCiAJCS8qDQogCQkg
KiBVbmRvIHRoZSBhc3NpZ25tZW50cyBhYm92ZSBpZiB3ZSBmYWlsZWQgdG8N
CiAJCSAqIHB1dCB0aGUgUENCIG9uIHRoZSBoYXNoIGxpc3RzLg0KZGlmZiAt
dSAtciAvdXNyL3NyYy9zeXMub2xkL25ldGluZXQvdGNwX3VzcnJlcS5jIC91
c3Ivc3JjL3N5cy9uZXRpbmV0L3RjcF91c3JyZXEuYw0KLS0tIC91c3Ivc3Jj
L3N5cy5vbGQvbmV0aW5ldC90Y3BfdXNycmVxLmMJRnJpIE9jdCAyNCAxMjow
NTowMCAyMDAzDQorKysgL3Vzci9zcmMvc3lzL25ldGluZXQvdGNwX3VzcnJl
cS5jCU1vbiBPY3QgMjcgMDE6NDM6NTAgMjAwMw0KQEAgLTg4Myw3ICs4ODMs
NyBAQA0KIAkJCXJldHVybiBFQUREUklOVVNFOw0KIAl9DQogCWlucC0+aW5w
X2xhZGRyID0gbGFkZHI7DQotCWluX3BjYnJlaGFzaChpbnApOw0KKwlpbl9w
Y2JyZWhhc2goaW5wLCAxKTsNCiANCiAJLyogQ29tcHV0ZSB3aW5kb3cgc2Nh
bGluZyB0byByZXF1ZXN0LiAgKi8NCiAJd2hpbGUgKHRwLT5yZXF1ZXN0X3Jf
c2NhbGUgPCBUQ1BfTUFYX1dJTlNISUZUICYmDQpAQCAtOTcyLDcgKzk3Miw3
IEBADQogCWlucC0+aW5wX2Zwb3J0ID0gc2luNi0+c2luNl9wb3J0Ow0KIAlp
ZiAoKHNpbjYtPnNpbjZfZmxvd2luZm8gJiBJUFY2X0ZMT1dJTkZPX01BU0sp
ICE9IDApDQogCQlpbnAtPmluNnBfZmxvd2luZm8gPSBzaW42LT5zaW42X2Zs
b3dpbmZvOw0KLQlpbl9wY2JyZWhhc2goaW5wKTsNCisJaW5fcGNicmVoYXNo
KGlucCwgMSk7DQogDQogCS8qIENvbXB1dGUgd2luZG93IHNjYWxpbmcgdG8g
cmVxdWVzdC4gICovDQogCXdoaWxlICh0cC0+cmVxdWVzdF9yX3NjYWxlIDwg
VENQX01BWF9XSU5TSElGVCAmJg0KZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMu
b2xkL25ldGluZXQvdWRwX3VzcnJlcS5jIC91c3Ivc3JjL3N5cy9uZXRpbmV0
L3VkcF91c3JyZXEuYw0KLS0tIC91c3Ivc3JjL3N5cy5vbGQvbmV0aW5ldC91
ZHBfdXNycmVxLmMJRnJpIE9jdCAyNCAxMjowNTowMCAyMDAzDQorKysgL3Vz
ci9zcmMvc3lzL25ldGluZXQvdWRwX3VzcnJlcS5jCVN1biBPY3QgMjYgMDI6
MTg6NDEgMjAwMw0KQEAgLTc4NCw3ICs3ODQsNyBAQA0KIAkJaWYgKGlucC0+
aW5wX2xhZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZICYmDQogCQkgICAgaW5w
LT5pbnBfbHBvcnQgPT0gMCkgew0KIAkJCWlucC0+aW5wX2xwb3J0ID0gbHBv
cnQ7DQotCQkJaWYgKGluX3BjYmluc2hhc2goaW5wKSAhPSAwKSB7DQorCQkJ
aWYgKGluX3BjYmluc2hhc2goaW5wLCAxKSAhPSAwKSB7DQogCQkJCWlucC0+
aW5wX2xwb3J0ID0gMDsNCiAJCQkJZXJyb3IgPSBFQUdBSU47DQogCQkJCWdv
dG8gcmVsZWFzZTsNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9uZXRp
bmV0Ni9pbjZfcGNiLmMgL3Vzci9zcmMvc3lzL25ldGluZXQ2L2luNl9wY2Iu
Yw0KLS0tIC91c3Ivc3JjL3N5cy5vbGQvbmV0aW5ldDYvaW42X3BjYi5jCUZy
aSBPY3QgMjQgMTI6MDQ6NTggMjAwMw0KKysrIC91c3Ivc3JjL3N5cy9uZXRp
bmV0Ni9pbjZfcGNiLmMJU3VuIE9jdCAyNiAyMTowNDo1NiAyMDAzDQpAQCAt
MjgwLDcgKzI4MCw3IEBADQogCX0NCiAJZWxzZSB7DQogCQlpbnAtPmlucF9s
cG9ydCA9IGxwb3J0Ow0KLQkJaWYgKGluX3BjYmluc2hhc2goaW5wKSAhPSAw
KSB7DQorCQlpZiAoaW5fcGNiaW5zaGFzaChpbnAsIDEpICE9IDApIHsNCiAJ
CQlpbnAtPmluNnBfbGFkZHIgPSBpbjZhZGRyX2FueTsNCiAJCQlpbnAtPmlu
cF9scG9ydCA9IDA7DQogCQkJcmV0dXJuIChFQUdBSU4pOw0KQEAgLTQwOSw3
ICs0MDksNyBAQA0KIAkJICAgIChodG9ubChpcDZfZmxvd19zZXErKykgJiBJ
UFY2X0ZMT1dMQUJFTF9NQVNLKTsNCiAjZW5kaWYNCiANCi0JaW5fcGNicmVo
YXNoKGlucCk7DQorCWluX3BjYnJlaGFzaChpbnAsIDApOw0KIAlyZXR1cm4g
KDApOw0KIH0NCiANCkBAIC00MjEsNyArNDIxLDcgQEANCiAJaW5wLT5pbnBf
ZnBvcnQgPSAwOw0KIAkvKiBjbGVhciBmbG93aW5mbyAtIGRyYWZ0LWl0b2p1
bi1pcHY2LWZsb3dsYWJlbC1hcGktMDAgKi8NCiAJaW5wLT5pbjZwX2Zsb3dp
bmZvICY9IH5JUFY2X0ZMT1dMQUJFTF9NQVNLOw0KLQlpbl9wY2JyZWhhc2go
aW5wKTsNCisJaW5fcGNicmVoYXNoKGlucCwgMCk7DQogCWlmIChpbnAtPmlu
cF9zb2NrZXQtPnNvX3N0YXRlICYgU1NfTk9GRFJFRikNCiAJCWluNl9wY2Jk
ZXRhY2goaW5wKTsNCiB9DQpkaWZmIC11IC1yIC91c3Ivc3JjL3N5cy5vbGQv
bmV0aW5ldDYvaW42X3NyYy5jIC91c3Ivc3JjL3N5cy9uZXRpbmV0Ni9pbjZf
c3JjLmMNCi0tLSAvdXNyL3NyYy9zeXMub2xkL25ldGluZXQ2L2luNl9zcmMu
YwlGcmkgT2N0IDI0IDEyOjA0OjU5IDIwMDMNCisrKyAvdXNyL3NyYy9zeXMv
bmV0aW5ldDYvaW42X3NyYy5jCVN1biBPY3QgMjYgMDI6MjA6MTMgMjAwMw0K
QEAgLTM5NCw3ICszOTQsNyBAQA0KIAl9DQogDQogCWlucC0+aW5wX2xwb3J0
ID0gbHBvcnQ7DQotCWlmIChpbl9wY2JpbnNoYXNoKGlucCkgIT0gMCkgew0K
KwlpZiAoaW5fcGNiaW5zaGFzaChpbnAsIDEpICE9IDApIHsNCiAJCWlucC0+
aW42cF9sYWRkciA9IGluNmFkZHJfYW55Ow0KIAkJaW5wLT5pbnBfbHBvcnQg
PSAwOw0KIAkJcmV0dXJuIChFQUdBSU4pOw0K

--0-1743396347-1067242013=:2023--



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