[4956] in bugtraq
Linux ld.so patch
daemon@ATHENA.MIT.EDU (Alex Belits)
Mon Jul 21 09:05:49 1997
Date: Mon, 21 Jul 1997 02:01:48 -0700
Reply-To: Alex Belits <abelits@PHOBOS.ILLTEL.DENVER.CO.US>
From: Alex Belits <abelits@PHOBOS.ILLTEL.DENVER.CO.US>
X-To: linux-security@redhat.com
To: BUGTRAQ@NETSPACE.ORG
In-Reply-To: <Pine.LNX.3.95.970718055902.13722A-100000@yoshiwara.dec.net>
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.
--567214411-2105302250-869475708=:3243
Content-Type: TEXT/PLAIN; charset=US-ASCII
On Fri, 18 Jul 1997, KSR[T] wrote:
> Our advisory contained one serious piece of mis-information. The latest
> version of ld.so that we tested (1.9.2) still appeared to be
> vulnerable to this overflow.
>
> We strongly recommend that anyone running linux install the patch
> distributed with the advisory, or wait for your vendor to release
> an updated ld.so package and install that as soon as possible.
>
> The patch is available from our web site (http://www.dec.net/ksrt).
>
> We apologize for any confusion this might have caused.
>
Since other overflows were found in ld.so of both elf and a.out, I've
made a patch that converts vsprintf() into vsnprintf() and included fixed
version of the original patch and suggested fix about 11-th item in
libraries list. The patch is against ld.so 1.9.2 distribution.
--
Alex
--567214411-2105302250-869475708=:3243
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=ld-fix
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95.970721020148.3243C@phobos.illtel.denver.co.us>
Content-Description: ld.so 1.9.2 fix
ZGlmZiAtcnUgbGQuc28tMS45LjIvQ29uZmlnLm1rIGxkLnNvLTEuOS4yLWZp
eGVkL0NvbmZpZy5taw0KLS0tIGxkLnNvLTEuOS4yL0NvbmZpZy5tawlUdWUg
TWFyIDE4IDE4OjQxOjA4IDE5OTcNCisrKyBsZC5zby0xLjkuMi1maXhlZC9D
b25maWcubWsJRnJpIEp1bCAxOCAwMTowOTo0MyAxOTk3DQpAQCAtMiw3ICsy
LDcgQEANCiAjQVJDSCA9IG02OGsNCiAjQVJDSCA9IHNwYXJjDQogI0RFQlVH
ID0gdHJ1ZQ0KLSNBT1VUX1NVUFBPUlQgPSB0cnVlDQorQU9VVF9TVVBQT1JU
ID0gdHJ1ZQ0KIA0KIExEU09fQUREUiA9IDYyZjAwMDIwDQogTERTT19FTlRS
WSA9ICIweCQoTERTT19BRERSKSINCkBAIC0xOSw4ICsxOSw4IEBADQogUkFO
TElCID0gcmFubGliDQogDQogaWZlcSAoJChBUkNIKSxpMzg2KQ0KLUFPVVRD
QyA9IC91c3IvaTQ4Ni1saW51eGFvdXQvYmluL2djYw0KLSNBT1VUQ0MgPSBn
Y2MgLWIgaTQ4Ni1saW51eGFvdXQNCisjQU9VVENDID0gL3Vzci9pNDg2LWxp
bnV4YW91dC9iaW4vZ2NjDQorQU9VVENDID0gZ2NjIC1iIGk0ODYtbGludXhh
b3V0DQogQU9VVExEID0gL3Vzci9pNDg2LWxpbnV4YW91dC9iaW4vbGQgLW0g
aTM4NmxpbnV4DQogZW5kaWYNCiBpZmVxICgkKEFSQ0gpLG02OGspDQpkaWZm
IC1ydSBsZC5zby0xLjkuMi9kLWxpbmsvYm9vdDEuYyBsZC5zby0xLjkuMi1m
aXhlZC9kLWxpbmsvYm9vdDEuYw0KLS0tIGxkLnNvLTEuOS4yL2QtbGluay9i
b290MS5jCVR1ZSBNYXIgMTggMTg6MDE6MTYgMTk5Nw0KKysrIGxkLnNvLTEu
OS4yLWZpeGVkL2QtbGluay9ib290MS5jCUZyaSBKdWwgMTggMDE6MDU6MTQg
MTk5Nw0KQEAgLTExNCwxMCArMTE0LDEyIEBADQogDQogI2RlZmluZSBBTExP
V19aRVJPX1BMVEdPVA0KIA0KKyNkZWZpbmUgRUxGX0xEU09fSU1BR0UgIi9s
aWIvbGQtbGludXguc28uMSINCisNCiBzdGF0aWMgY2hhciAqIF9kbF9tYWxs
b2NfYWRkciwgKl9kbF9tbWFwX3plcm87DQogY2hhciAqIF9kbF9saWJyYXJ5
X3BhdGggPSAwOyAvKiBXaGVyZSB3ZSBsb29rIGZvciBsaWJyYXJpZXMgKi8N
CiBjaGFyICpfZGxfcHJlbG9hZCA9IDA7IC8qIFRoaW5ncyB0byBiZSBsb2Fk
ZWQgYmVmb3JlIHRoZSBsaWJzLiAqLw0KLWNoYXIgKl9kbF9wcm9nbmFtZSA9
ICIvbGliL2xkLWxpbnV4LnNvLjEiOw0KK2NoYXIgKl9kbF9wcm9nbmFtZSA9
IEVMRl9MRFNPX0lNQUdFOw0KIHN0YXRpYyBjaGFyICogX2RsX25vdF9sYXp5
ID0gMDsNCiBzdGF0aWMgY2hhciAqIF9kbF93YXJuID0gMDsgLyogVXNlZCBi
eSBsZGQgKi8NCiBzdGF0aWMgY2hhciAqIF9kbF90cmFjZV9sb2FkZWRfb2Jq
ZWN0cyA9IDA7DQpAQCAtMTcxLDYgKzE3Myw0NSBAQA0KICNlbmRpZg0KIA0K
IC8qDQorICoJU3RvcCBhcmd2MCBvdmVyZmxvd2luZyB2c3ByaW50ZiwgYnV0
IGFsc28gdHJ5IHRvIHN0b3AgZmFsc2UgcG9zaXRpdmVzDQorICoJV2Ugb2Jl
eSB0aGUgZm9sbG93aW5nIHJ1bGUNCisgKg0KKyAqCUlmIG5hbWVzaXplIDwg
MjU2ICBrZWVwDQorICoJSWYgbmFtZSBmcm9tIGxhc3QgLyA8IDI1NiB1c2Ug
dGhhdA0KKyAqCWVsc2UgdXNlIEVMRl9MRFNPX0lNQUdFDQorICoNCisgKglU
aGlzIGVuc3VyZXMgL3ZlcnkvbG9uZy9zdHVwaWQvbmZzL3BhdGgvd2Uvb2Z0
ZW4vZ2V0L2Zvb2JhcmNtZA0KKyAqCWNvbWVzIG91dCBhdCBsZWFzdCBhcy4g
IA0KKyAqDQorICoJZm9vYmFyY21kOiBzb21lZXJyb3INCisgKg0KKyAqCUV2
ZW4gaWYgd2UgZml4IHZzcHJpbnRmIHRvIGJlIHZzbnByaW50ZiAod2hpY2gg
d2Ugc2hvdWxkKSwgdGhpcw0KKyAqCW91Z2h0IHRvIGJlIGtlcHQgdG8gaGVs
cCBtYWtlIHJlYWwgc2l6ZSBsaW1pdGVkIGVycm9ycyBjbGVhcmVyLg0KKyAq
Lw0KKyANCitzdGF0aWMgY2hhciAqYXJndl9yZW1hcChjaGFyICpwdHIpDQor
ew0KKwljaGFyICp0bXA7DQorCWlmKHN0cmxlbihwdHIpPDI1NikNCisJCXJl
dHVybiBwdHI7DQorCWlmKCEqcHRyKQ0KKwkJcmV0dXJuIHB0cjsNCisJdG1w
PXB0citzdHJsZW4ocHRyKS0xOw0KKwkvKg0KKwkgKglXYWxrIGJhY2sgZG93
biB0aGUgY2hhaW4gdW50aWwgd2UgZmluZCBhIHNsYXNoDQorCSAqLw0KKwl3
aGlsZSh0bXA+PXB0ciAmJiAqdG1wIT0nLycpDQorCQl0bXAtLTsNCisJLyoN
CisJICoJTm8gc2xhc2gsIG9yIHRvbyBsb25nIGFmdGVyIHNsYXNoIGFuZCBJ
bSBub3QgcGxheWluZyBzbyBueWFoDQorCSAqLw0KKwlpZigqdG1wIT0nLycp
DQorCQlyZXR1cm4gRUxGX0xEU09fSU1BR0U7DQorCWlmKHN0cmxlbih0bXAp
PjI1NikJLyogTm90IG9mZiBieSAxIC4uIHN0cmxlbiBpbmNsdWRlcyB0aGUg
LyAqLw0KKwkJcmV0dXJuIEVMRl9MRFNPX0lNQUdFOw0KKwlyZXR1cm4gdG1w
KzE7DQorfQ0KKy8qDQogICogVGhpcyBzdHViIGZ1bmN0aW9uIGlzIHVzZWQg
Ynkgc29tZSBkZWJ1Z2dlcnMuICBUaGUgaWRlYSBpcyB0aGF0IHRoZXkNCiAg
KiBjYW4gc2V0IGFuIGludGVybmFsIGJyZWFrcG9pbnQgb24gaXQsIHNvIHRo
YXQgd2UgYXJlIG5vdGlmaWVkIHdoZW4gdGhlDQogICogYWRkcmVzcyBtYXBw
aW5nIGlzIGNoYW5nZWQgaW4gc29tZSB3YXkuDQpAQCAtNTA3LDcgKzU0OCw3
IEBADQogICB9DQogDQogICBpZiAoYXJndlswXSkNCi0gICAgX2RsX3Byb2du
YW1lID0gYXJndlswXTsNCisgICAgX2RsX3Byb2duYW1lID0gYXJndl9yZW1h
cChhcmd2WzBdKTsNCiANCiAgIC8qIE5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBv
dXQgd2hhdCBraW5kIG9mIG9wdGlvbnMgYXJlIHNlbGVjdGVkLg0KICAgIE5v
dGUgdGhhdCBmb3IgU1VJRCBwcm9ncmFtcyB3ZSBpZ25vcmUgdGhlIHNldHRp
bmdzIGluIExEX0xJQlJBUllfUEFUSCAqLw0KT25seSBpbiBsZC5zby0xLjku
Mi1maXhlZC9kLWxpbms6IGJvb3QxLmMub3JpZw0KT25seSBpbiBsZC5zby0x
LjkuMi9kLWxpbms6IGxkLWxpbnV4LnNvDQpPbmx5IGluIGxkLnNvLTEuOS4y
L2QtbGluay9saWJkbDogbGliZGwuc28NCmRpZmYgLXJ1IGxkLnNvLTEuOS4y
L2QtbGluay92c3ByaW50Zi5jIGxkLnNvLTEuOS4yLWZpeGVkL2QtbGluay92
c3ByaW50Zi5jDQotLS0gbGQuc28tMS45LjIvZC1saW5rL3ZzcHJpbnRmLmMJ
V2VkIE9jdCAgOSAxMjoxNzoyMSAxOTk2DQorKysgbGQuc28tMS45LjItZml4
ZWQvZC1saW5rL3ZzcHJpbnRmLmMJTW9uIEp1bCAyMSAwMToxNjozNSAxOTk3
DQpAQCAtMTI3LDExICsxMjcsMTMgQEANCiAJaW50IHF1YWxpZmllcjsJCS8q
ICdoJywgJ2wnLCBvciAnTCcgZm9yIGludGVnZXIgZmllbGRzICovDQogDQog
CWNoYXIgYnVmWzEwMjRdOw0KKwljaGFyICplbmRidWY7DQogCXZhX2xpc3Qo
YXJncyk7DQogDQogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQorCWVuZGJ1Zj1i
dWYrMTAyMzsNCiANCi0JZm9yIChzdHI9YnVmIDsgKmZtdCA7ICsrZm10KSB7
DQorCSBmb3IgKHN0cj1idWYgOyAqZm10ICYmIHN0ciA8IGVuZGJ1ZiA7ICsr
Zm10KSB7DQogCQlpZiAoKmZtdCAhPSAnJScpIHsNCiAJCQkqc3RyKysgPSAq
Zm10Ow0KIAkJCWNvbnRpbnVlOw0KQEAgLTE5MSwxMCArMTkzLDExIEBADQog
CQlzd2l0Y2ggKCpmbXQpIHsNCiAJCWNhc2UgJ2MnOg0KIAkJCWlmICghKGZs
YWdzICYgTEVGVCkpDQotCQkJCXdoaWxlICgtLWZpZWxkX3dpZHRoID4gMCkN
CisJCQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwICYmIHN0ciA8IGVuZGJ1
ZikNCiAJCQkJCSpzdHIrKyA9ICcgJzsNCi0JCQkqc3RyKysgPSAodW5zaWdu
ZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7DQotCQkJd2hpbGUgKC0tZmll
bGRfd2lkdGggPiAwKQ0KKwkJCWlmIChzdHIgPCBlbmRidWYpDQorCQkJICAq
c3RyKysgPSAodW5zaWduZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7DQor
CQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwICYmIHN0ciA8IGVuZGJ1ZikN
CiAJCQkJKnN0cisrID0gJyAnOw0KIAkJCWNvbnRpbnVlOw0KIA0KQEAgLTIw
NiwxMSArMjA5LDExIEBADQogCQkJbGVuID0gX2RsX3N0cmxlbihzKTsNCiAN
CiAJCQlpZiAoIShmbGFncyAmIExFRlQpKQ0KLQkJCQl3aGlsZSAobGVuIDwg
ZmllbGRfd2lkdGgtLSkNCisJCQkJd2hpbGUgKGxlbiA8IGZpZWxkX3dpZHRo
LS0gJiYgc3RyIDwgZW5kYnVmKQ0KIAkJCQkJKnN0cisrID0gJyAnOw0KLQkJ
CWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkNCisJCQlmb3IgKGkgPSAwOyBp
IDwgbGVuICYmIHN0ciA8IGVuZGJ1ZjsgKytpKQ0KIAkJCQkqc3RyKysgPSAq
cysrOw0KLQkJCXdoaWxlIChsZW4gPCBmaWVsZF93aWR0aC0tKQ0KKwkJCXdo
aWxlIChsZW4gPCBmaWVsZF93aWR0aC0tICYmIHN0ciA8IGVuZGJ1ZikNCiAJ
CQkJKnN0cisrID0gJyAnOw0KIAkJCWNvbnRpbnVlOw0KIA0KQEAgLTIxOSw5
ICsyMjIsMTIgQEANCiAJCQkJZmllbGRfd2lkdGggPSAyKnNpemVvZih2b2lk
ICopOw0KIAkJCQlmbGFncyB8PSBaRVJPUEFEOw0KIAkJCX0NCi0JCQlzdHIg
PSBudW1iZXIoc3RyLA0KLQkJCQkodW5zaWduZWQgbG9uZykgdmFfYXJnKGFy
Z3MsIHZvaWQgKiksIDE2LA0KLQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9u
LCBmbGFncyk7DQorDQorCQkJaWYgKGZpZWxkX3dpZHRoIDw9IGVuZGJ1Zi1z
dHIpew0KKwkJCSAgICAgICAgICAgc3RyID0gbnVtYmVyKHN0ciwNCisJCQkJ
ICAgICAodW5zaWduZWQgbG9uZykgdmFfYXJnKGFyZ3MsIHZvaWQgKiksIDE2
LA0KKwkJCQkgICAgIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsN
CisJCQl9DQogCQkJY29udGludWU7DQogDQogDQpAQCAtMjU0LDkgKzI2MCw5
IEBADQogDQogCQlkZWZhdWx0Og0KIAkJCWlmICgqZm10ICE9ICclJykNCi0J
CQkJKnN0cisrID0gJyUnOw0KKwkJCQlpZiAoc3RyIDwgZW5kYnVmKSAqc3Ry
KysgPSAnJSc7DQogCQkJaWYgKCpmbXQpDQotCQkJCSpzdHIrKyA9ICpmbXQ7
DQorCQkJCWlmIChzdHIgPCBlbmRidWYpICpzdHIrKyA9ICpmbXQ7DQogCQkJ
ZWxzZQ0KIAkJCQktLWZtdDsNCiAJCQljb250aW51ZTsNCkBAIC0yNzIsNyAr
Mjc4LDE3IEBADQogCQkJbnVtID0gdmFfYXJnKGFyZ3MsIGludCk7DQogCQll
bHNlDQogCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGludCk7DQot
CQlzdHIgPSBudW1iZXIoc3RyLCBudW0sIGJhc2UsIGZpZWxkX3dpZHRoLCBw
cmVjaXNpb24sIGZsYWdzKTsNCisJCWlmIChmaWVsZF93aWR0aCAhPSAtMSkg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZF93aWR0aCA8
PSBlbmRidWYtc3RyKSB7IA0KKwkJCSAgICAgc3RyID0gbnVtYmVyKHN0ciwg
bnVtLCBiYXNlLA0KKwkJCQkJICBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBm
bGFncyk7DQorCQkJfQ0KKwkJfWVsc2V7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKDEwMCA8PSBlbmRidWYtc3RyKSB7IA0KKwkJCSAgICAgc3Ry
ID0gbnVtYmVyKHN0ciwgbnVtLCBiYXNlLA0KKwkJCQkJICBmaWVsZF93aWR0
aCwgcHJlY2lzaW9uLCBmbGFncyk7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCSpz
dHIgPSAnXDAnOw0KIAlfZGxfd3JpdGUoZmQsIGJ1Ziwgc3RyLWJ1Zik7DQpk
aWZmIC1ydSBsZC5zby0xLjkuMi9sZC1zby9mZHByaW50Zi5jIGxkLnNvLTEu
OS4yLWZpeGVkL2xkLXNvL2ZkcHJpbnRmLmMNCi0tLSBsZC5zby0xLjkuMi9s
ZC1zby9mZHByaW50Zi5jCVNhdCBNYXkgMjUgMjI6MDc6MjEgMTk5Ng0KKysr
IGxkLnNvLTEuOS4yLWZpeGVkL2xkLXNvL2ZkcHJpbnRmLmMJTW9uIEp1bCAy
MSAwMTowMTo0NSAxOTk3DQpAQCAtOSw3ICs5LDcgQEANCiAjaW5jbHVkZSA8
c3RkYXJnLmg+DQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KIA0KLWV4dGVybiBp
bnQgdnNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZtdCwgdmFf
bGlzdCBhcmdzKTsNCitleHRlcm4gaW50IHZzbnByaW50ZihjaGFyICogYnVm
LCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZtdCwgdmFfbGlzdCBhcmdz
KTsNCiANCiBpbnQgZmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyICpmbXQs
IC4uLikNCiB7DQpAQCAtMTgsNyArMTgsNyBAQA0KIAljaGFyIGJ1ZlsxMDI0
XTsNCiANCiAJdmFfc3RhcnQoYXJncywgZm10KTsNCi0JaT12c3ByaW50Zihi
dWYsZm10LGFyZ3MpOw0KKwlpPXZzbnByaW50ZihidWYsMTAyNCwgZm10LGFy
Z3MpOw0KIAl2YV9lbmQoYXJncyk7DQogCXdyaXRlKGZkLCBidWYsIGkpOw0K
IA0KZGlmZiAtcnUgbGQuc28tMS45LjIvbGQtc28vbGQuc28uYyBsZC5zby0x
LjkuMi1maXhlZC9sZC1zby9sZC5zby5jDQotLS0gbGQuc28tMS45LjIvbGQt
c28vbGQuc28uYwlNb24gSmFuICA2IDIwOjUxOjA2IDE5OTcNCisrKyBsZC5z
by0xLjkuMi1maXhlZC9sZC1zby9sZC5zby5jCVN1biBKdWwgMjAgMjM6Mjk6
MzUgMTk5Nw0KQEAgLTE0OSw2ICsxNDksNDYgQEANCiB9DQogI2VuZGlmDQog
DQorLyoNCisgKglTdG9wIGFyZ3YwIG92ZXJmbG93aW5nIHZzcHJpbnRmLCBi
dXQgYWxzbyB0cnkgdG8gc3RvcCBmYWxzZSBwb3NpdGl2ZXMNCisgKglXZSBv
YmV5IHRoZSBmb2xsb3dpbmcgcnVsZQ0KKyAqDQorICoJSWYgbmFtZXNpemUg
PCAyNTYgIGtlZXANCisgKglJZiBuYW1lIGZyb20gbGFzdCAvIDwgMjU2IHVz
ZSB0aGF0DQorICoJZWxzZSB1c2UgTERTT19OQU1FDQorICoNCisgKglUaGlz
IGVuc3VyZXMgL3ZlcnkvbG9uZy9zdHVwaWQvbmZzL3BhdGgvd2Uvb2Z0ZW4v
Z2V0L2Zvb2JhcmNtZA0KKyAqCWNvbWVzIG91dCBhdCBsZWFzdCBhcy4gIA0K
KyAqDQorICoJZm9vYmFyY21kOiBzb21lZXJyb3INCisgKg0KKyAqCUV2ZW4g
aWYgd2UgZml4IHZzcHJpbnRmIHRvIGJlIHZzbnByaW50ZiAod2hpY2ggd2Ug
c2hvdWxkKSwgdGhpcw0KKyAqCW91Z2h0IHRvIGJlIGtlcHQgdG8gaGVscCBt
YWtlIHJlYWwgc2l6ZSBsaW1pdGVkIGVycm9ycyBjbGVhcmVyLg0KKyAqLw0K
KyANCitzdGF0aWMgY2hhciAqYXJndl9yZW1hcChjaGFyICpwdHIpDQorew0K
KwljaGFyICp0bXA7DQorCWlmKHN0cmxlbihwdHIpPDI1NikNCisJCXJldHVy
biBwdHI7DQorCWlmKCEqcHRyKQ0KKwkJcmV0dXJuIHB0cjsNCisJdG1wPXB0
citzdHJsZW4ocHRyKS0xOw0KKwkvKg0KKwkgKglXYWxrIGJhY2sgZG93biB0
aGUgY2hhaW4gdW50aWwgd2UgZmluZCBhIHNsYXNoDQorCSAqLw0KKwl3aGls
ZSh0bXA+PXB0ciAmJiAqdG1wIT0nLycpDQorCQl0bXAtLTsNCisJLyoNCisJ
ICoJTm8gc2xhc2gsIG9yIHRvbyBsb25nIGFmdGVyIHNsYXNoIGFuZCBJbSBu
b3QgcGxheWluZyBzbyBueWFoDQorCSAqLw0KKwlpZigqdG1wIT0nLycpDQor
CQlyZXR1cm4gTERTT19JTUFHRTsNCisJaWYoc3RybGVuKHRtcCk+MjU2KQkv
KiBOb3Qgb2ZmIGJ5IDEgLi4gc3RybGVuIGluY2x1ZGVzIHRoZSAvICovDQor
CQlyZXR1cm4gTERTT19JTUFHRTsNCisJcmV0dXJuIHRtcCsxOw0KK30NCisN
CiB2b2lkDQogc2hhcmVkX2xvYWRlcihpbnQgZnVuYywgLi4uKQ0KIHsNCkBA
IC0yMDUsMTIgKzI0NSwxNCBAQA0KIAlzYXZlX21hcGluZm8obWFwaW5mbyk7
DQogI2VuZGlmDQogCWFyZ3YwID0gdmFfYXJnKGFwLCBjaGFyICopOw0KKwlh
cmd2MCA9IGFyZ3ZfcmVtYXAoYXJndjApOw0KIAlfX2Vudmlyb24gPSB2YV9h
cmcoYXAsIGNoYXIgKiopOw0KIAlfX1NIQVJFRF9MSUJSQVJJRVNfXyA9IHZh
X2FyZyhhcCwgc3RydWN0IGxpYmVudHJ5ICoqKTsNCiAJX1NIQVJBQkxFX0NP
TkZMSUNUU19fID0gdmFfYXJnKGFwLCBzdHJ1Y3QgZml4dXBsaXN0ICopOw0K
IAlpZiAoZnVuYyA9PSBGVU5DX0xJTktfQU5EX0NBTExCQUNLKQ0KIAkgIGNh
bGxiYWNrID0gdmFfYXJnKGFwLCBjYWxsYmFja3B0cik7DQogCXZhX2VuZChh
cCk7DQorCQ0KIAlicmVhazsNCiAgICAgZGVmYXVsdDoNCiAJLyogeW91IHdh
bnQgbWUgdG8gZG8gd2hhdD8gKi8NCkBAIC0yMjYsNyArMjY4LDggQEANCiAg
ICAgLyogZmluZCBvdXQgd2hvIHdlIGFyZSwgaW4gY2FzZSBzb21lYm9keSB3
YW50cyB0byBrbm93ICovDQogICAgIGlmICghYXJndjAgJiYgIShhcmd2MCA9
IGdldGVudihMRERfQVJHVjApKSkNCiAJYXJndjAgPSBMRFNPX0lNQUdFOw0K
LQ0KKyAgICBhcmd2MD1hcmd2X3JlbWFwKGFyZ3YwKTsNCisgICAgDQogICAg
IC8qIGhtbSwgeW91IHdhbnQgeW91ciBvd24gY29uZmlndXJhdGlvbiwgZG8g
eW91PyAqLw0KICAgICBpZiAoZ2V0dWlkKCkgPT0gZ2V0ZXVpZCgpICYmIGdl
dGdpZCgpID09IGdldGVnaWQoKSkNCiAgICAgew0KQEAgLTMyMiw2ICszNjUs
MTEgQEANCiAJCS50ZXh0IHNlY3Rpb24uIFRoaXMgaXMgcGFzc2VkIHRvIGxk
cHJlbG9hZCgpIGJlbG93ICovDQogCSAgICBpZiAocHJlbG9hZCB8fCBjYWxs
YmFjaykNCiAJICAgIHsNCisJICAgIAlpZihubGlicz09MTApDQorCSAgICAJ
ew0KKwkgICAgCQlmZHByaW50ZigyLCAiJXM6IHRvbyBtYW55IHByZWxvYWRz
XG4iLGFyZ3YwKTsNCisJICAgIAkJZXhpdChFWElUX0ZBVEFMKTsNCisJICAg
IAl9DQogCSAgICAgICAgbGlic1tubGlic10gPSBhbGxvY2Eoc3RybGVuKGJ1
ZmZlcikrMSk7DQogCSAgICAgICAgc3RyY3B5KGxpYnNbbmxpYnNdLCBidWZm
ZXIpOw0KIAkgICAgICAgIG5saWJzKys7DQpPbmx5IGluIGxkLnNvLTEuOS4y
LWZpeGVkL2xkLXNvOiBsZC5zby5jLm9yaWcNCmRpZmYgLXJ1IGxkLnNvLTEu
OS4yL2xkLXNvL3N0cmVycm9yLmMgbGQuc28tMS45LjItZml4ZWQvbGQtc28v
c3RyZXJyb3IuYw0KLS0tIGxkLnNvLTEuOS4yL2xkLXNvL3N0cmVycm9yLmMJ
U2F0IE1heSAyNSAxMzozMDozMyAxOTk2DQorKysgbGQuc28tMS45LjItZml4
ZWQvbGQtc28vc3RyZXJyb3IuYwlNb24gSnVsIDIxIDAxOjA0OjUyIDE5OTcN
CkBAIC00MSwxMiArNDEsMTIgQEANCiANCiAgIGlmIChlcnJudW0gPCAwIHx8
IGVycm51bSA+PSBfc3lzX25lcnIpDQogICAgIHsNCi0gICAgICBzdGF0aWMg
Y2hhciB1bmtub3duX2Vycm9yW10gPSAiVW5rbm93biBlcnJvciAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAiOw0KKyAgICAgIHN0YXRpYyBjaGFyIHVua25vd25f
ZXJyb3JbMzZdID0gIlVua25vd24gZXJyb3IgMDAwMDAwMDAwMDAwMDAwMDAw
MDAwIjsNCiAgICAgICBzdGF0aWMgY2hhciBmbXRbXSA9ICJVbmtub3duIGVy
cm9yICVkIjsNCiAjaWZkZWYgX19saW51eF9fDQotICAgICAgc3ByaW50Zih1
bmtub3duX2Vycm9yLCBmbXQsIGVycm51bSk7DQorICAgICAgc25wcmludGYo
dW5rbm93bl9lcnJvciwgMzYsIGZtdCwgZXJybnVtKTsNCiAjZWxzZQ0KLSAg
ICAgIHNpemVfdCBsZW4gPSBzcHJpbnRmKHVua25vd25fZXJyb3IsIGZtdCwg
ZXJybnVtKTsNCisgICAgICBzaXplX3QgbGVuID0gc25wcmludGYodW5rbm93
bl9lcnJvciwgMzYsIGZtdCwgZXJybnVtKTsNCiAgICAgICBpZiAobGVuIDwg
c2l6ZW9mKGZtdCkgLSAyKQ0KIAlyZXR1cm4gTlVMTDsNCiAgICAgICB1bmtu
b3duX2Vycm9yW2xlbl0gPSAnXDAnOw0KZGlmZiAtcnUgbGQuc28tMS45LjIv
bGQtc28vdnNwcmludGYuYyBsZC5zby0xLjkuMi1maXhlZC9sZC1zby92c3By
aW50Zi5jDQotLS0gbGQuc28tMS45LjIvbGQtc28vdnNwcmludGYuYwlTYXQg
TWF5IDI1IDIyOjA3OjE4IDE5OTYNCisrKyBsZC5zby0xLjkuMi1maXhlZC9s
ZC1zby92c3ByaW50Zi5jCU1vbiBKdWwgMjEgMDE6MTE6MjAgMTk5Nw0KQEAg
LTEwNCwxMyArMTA0LDE0IEBADQogCXJldHVybiBzdHI7DQogfQ0KIA0KLWlu
dCB2c3ByaW50ZihjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlz
dCBhcmdzKQ0KK2ludCB2c25wcmludGYoY2hhciAqYnVmLCBzaXplX3QgbWF4
c2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpDQogew0KIAlp
bnQgbGVuOw0KIAl1bnNpZ25lZCBsb25nIG51bTsNCiAJaW50IGksIGJhc2U7
DQogCWNoYXIgKiBzdHI7DQogCWNvbnN0IGNoYXIgKnM7DQorCWNoYXIgKmVu
ZGJ1ZjsNCiANCiAJaW50IGZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkg
Ki8NCiANCkBAIC0xMTksNyArMTIwLDEwIEBADQogCQkJCSAgIG51bWJlciBv
ZiBjaGFycyBmb3IgZnJvbSBzdHJpbmcgKi8NCiAJaW50IHF1YWxpZmllcjsJ
CS8qICdoJywgJ2wnLCBvciAnTCcgZm9yIGludGVnZXIgZmllbGRzICovDQog
DQotCWZvciAoc3RyPWJ1ZiA7ICpmbXQgOyArK2ZtdCkgew0KKwlpZiAobWF4
c2l6ZSA9PSAwKSByZXR1cm4gMDsNCisJZW5kYnVmID0gYnVmICsgbWF4c2l6
ZSAtIDE7DQorDQorICAgICAgICBmb3IgKHN0cj1idWYgOyAqZm10ICYmIHN0
ciA8IGVuZGJ1ZiA7ICsrZm10KSB7DQogCQlpZiAoKmZtdCAhPSAnJScpIHsN
CiAJCQkqc3RyKysgPSAqZm10Ow0KIAkJCWNvbnRpbnVlOw0KQEAgLTE3OSwx
MCArMTgzLDExIEBADQogCQlzd2l0Y2ggKCpmbXQpIHsNCiAJCWNhc2UgJ2Mn
Og0KIAkJCWlmICghKGZsYWdzICYgTEVGVCkpDQotCQkJCXdoaWxlICgtLWZp
ZWxkX3dpZHRoID4gMCkNCisJCQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAw
ICYmIHN0ciA8IGVuZGJ1ZikNCiAJCQkJCSpzdHIrKyA9ICcgJzsNCi0JCQkq
c3RyKysgPSAodW5zaWduZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7DQot
CQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwKQ0KKwkJCWlmIChzdHIgPCBl
bmRidWYpDQorCQkJCSpzdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSB2YV9hcmco
YXJncywgaW50KTsNCisJCQl3aGlsZSAoLS1maWVsZF93aWR0aCA+IDAgJiYg
c3RyIDwgZW5kYnVmKQ0KIAkJCQkqc3RyKysgPSAnICc7DQogCQkJY29udGlu
dWU7DQogDQpAQCAtMTk0LDExICsxOTksMTEgQEANCiAJCQlsZW4gPSBzdHJs
ZW4ocyk7DQogDQogCQkJaWYgKCEoZmxhZ3MgJiBMRUZUKSkNCi0JCQkJd2hp
bGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pDQorCQkJCXdoaWxlIChsZW4gPCBm
aWVsZF93aWR0aC0tICYmIHN0ciA8IGVuZGJ1ZikNCiAJCQkJCSpzdHIrKyA9
ICcgJzsNCi0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpDQorCQkJZm9y
IChpID0gMDsgaSA8IGxlbiAmJiBzdHIgPCBlbmRidWY7ICsraSkNCiAJCQkJ
KnN0cisrID0gKnMrKzsNCi0JCQl3aGlsZSAobGVuIDwgZmllbGRfd2lkdGgt
LSkNCisJCQl3aGlsZSAobGVuIDwgZmllbGRfd2lkdGgtLSAmJiBzdHIgPCBl
bmRidWYpDQogCQkJCSpzdHIrKyA9ICcgJzsNCiAJCQljb250aW51ZTsNCiAN
CkBAIC0yMDcsOSArMjEyLDEyIEBADQogCQkJCWZpZWxkX3dpZHRoID0gMipz
aXplb2Yodm9pZCAqKTsNCiAJCQkJZmxhZ3MgfD0gWkVST1BBRDsNCiAJCQl9
DQotCQkJc3RyID0gbnVtYmVyKHN0ciwNCi0JCQkJKHVuc2lnbmVkIGxvbmcp
IHZhX2FyZyhhcmdzLCB2b2lkICopLCAxNiwNCi0JCQkJZmllbGRfd2lkdGgs
IHByZWNpc2lvbiwgZmxhZ3MpOw0KKw0KKwkJCWlmIChmaWVsZF93aWR0aCA8
PSBlbmRidWYtc3RyKXsNCisJCQkJc3RyID0gbnVtYmVyKHN0ciwNCisJCQkJ
ICAodW5zaWduZWQgbG9uZykgdmFfYXJnKGFyZ3MsIHZvaWQgKiksIDE2LA0K
KwkJCQkgIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsNCisJCQl9
DQogCQkJY29udGludWU7DQogDQogDQpAQCAtMjQyLDkgKzI1MCw5IEBADQog
DQogCQlkZWZhdWx0Og0KIAkJCWlmICgqZm10ICE9ICclJykNCi0JCQkJKnN0
cisrID0gJyUnOw0KKwkJCQlpZiAoc3RyIDwgZW5kYnVmKSAqc3RyKysgPSAn
JSc7DQogCQkJaWYgKCpmbXQpDQotCQkJCSpzdHIrKyA9ICpmbXQ7DQorCQkJ
CWlmIChzdHIgPCBlbmRidWYpICpzdHIrKyA9ICpmbXQ7DQogCQkJZWxzZQ0K
IAkJCQktLWZtdDsNCiAJCQljb250aW51ZTsNCkBAIC0yNjAsMTkgKzI2OCwy
OSBAQA0KIAkJCW51bSA9IHZhX2FyZyhhcmdzLCBpbnQpOw0KIAkJZWxzZQ0K
IAkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBpbnQpOw0KLQkJc3Ry
ID0gbnVtYmVyKHN0ciwgbnVtLCBiYXNlLCBmaWVsZF93aWR0aCwgcHJlY2lz
aW9uLCBmbGFncyk7DQorCQlpZiAoZmllbGRfd2lkdGggIT0gLTEpIHsNCisJ
CQlpZiAoZmllbGRfd2lkdGggPD0gZW5kYnVmLXN0cikgeyANCisJCQkgICAg
c3RyID0gbnVtYmVyKHN0ciwgbnVtLCBiYXNlLA0KKwkJCQkJIGZpZWxkX3dp
ZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsNCisJCQl9DQorCQl9ZWxzZXsNCisJ
CQlpZiAoMTAwIDw9IGVuZGJ1Zi1zdHIpIHsgDQorCQkJICAgIHN0ciA9IG51
bWJlcihzdHIsIG51bSwgYmFzZSwNCisJCQkJCSBmaWVsZF93aWR0aCwgcHJl
Y2lzaW9uLCBmbGFncyk7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCSpzdHIgPSAn
XDAnOw0KIAlyZXR1cm4gc3RyLWJ1ZjsNCiB9DQogDQotaW50IHNwcmludGYo
Y2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pDQoraW50IHNucHJp
bnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQs
IC4uLikNCiB7DQogCXZhX2xpc3QgYXJnczsNCiAJaW50IGk7DQogDQogCXZh
X3N0YXJ0KGFyZ3MsIGZtdCk7DQotCWk9dnNwcmludGYoYnVmLGZtdCxhcmdz
KTsNCisJaT12c25wcmludGYoYnVmLHNpemUsZm10LGFyZ3MpOw0KIAl2YV9l
bmQoYXJncyk7DQogCXJldHVybiBpOw0KIH0NCk9ubHkgaW4gbGQuc28tMS45
LjIvbWFuOiBsZC5zby5pbmZvDQpPbmx5IGluIGxkLnNvLTEuOS4yL3Rlc3Q6
IGV0ZXN0Zg0KT25seSBpbiBsZC5zby0xLjkuMi90ZXN0OiBldGVzdGkNCk9u
bHkgaW4gbGQuc28tMS45LjIvdXRpbDogZWxmLW9rDQpPbmx5IGluIGxkLnNv
LTEuOS4yL3V0aWw6IGxkY29uZmlnDQpPbmx5IGluIGxkLnNvLTEuOS4yL3V0
aWw6IGxkZA0KT25seSBpbiBsZC5zby0xLjkuMi91dGlsOiBsZGRzdHViDQo=
--567214411-2105302250-869475708=:3243--