From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26125 invoked by alias); 9 Sep 2005 17:23:26 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 26090 invoked by uid 22791); 9 Sep 2005 17:23:16 -0000 Received: from qproxy.gmail.com (HELO qproxy.gmail.com) (72.14.204.203) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Fri, 09 Sep 2005 17:23:16 +0000 Received: by qproxy.gmail.com with SMTP id k11so61461qbf for ; Fri, 09 Sep 2005 10:23:14 -0700 (PDT) Received: by 10.64.210.15 with SMTP id i15mr2178qbg; Fri, 09 Sep 2005 10:23:14 -0700 (PDT) Received: by 10.65.20.15 with HTTP; Fri, 9 Sep 2005 10:23:14 -0700 (PDT) Message-ID: <7f45d93905090910237c63acf0@mail.gmail.com> Date: Fri, 09 Sep 2005 17:23:00 -0000 From: Shaun Jackman Reply-To: sjackman@gmail.com To: Richard Earnshaw Subject: Re: sim/arm/armos.c: IsTTY [PATCH] Cc: gdb-patches@sources.redhat.com In-Reply-To: <1126170388.18092.16.camel@pc960.cambridge.arm.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_837_6732551.1126286594601" References: <7f45d9390508151204ca0b146@mail.gmail.com> <20050830023718.GB16189@nevyn.them.org> <7f45d93905090709516f912861@mail.gmail.com> <1126170388.18092.16.camel@pc960.cambridge.arm.com> X-SW-Source: 2005-09/txt/msg00057.txt.bz2 ------=_Part_837_6732551.1126286594601 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 6475 2005/9/8, Richard Earnshaw : > Two problems I can immediately see with this. >=20 > 1) PATH_MAX isn't ANSI (it's POSIX, or something like that). So you > can't rely on it being defined. I think for this case you can probably > just define it to 1024 anyway if it's missing, but see > libiberty/lrealpath.c if you want the gory details. >=20 > 2) If you do overflow the path limit, you need to set the simulator's > errno value and return. Use cb_host_to_target_errno(sim_callback, > ENAMETOOLONG) to set it. >=20 > R. I've changed PATH_MAX from POSIX to FILENAME_MAX from ANSI and checked if the path limit overflowed. Cheers, Shaun 2005-09-09 Shaun Jackman * sim/arm/armos.c (unlink): Remove this macro. It is unused in this file and conflicts with sim_callback->unlink. (SWIopen): Fix a potential buffer overflow. (SWIremove): New function. (SWIrename): Ditto. (ARMul_OSHandleSWI): Handle the RDP calls SWI_IsTTY, SWI_Remove, and SWI_Rename, as well as the RDI calls AngelSWI_Reason_IsTTY, AngelSWI_Reason_Remove, and AngelSWI_Reason_Rename. Index: sim/arm/armos.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/sim/arm/armos.c,v retrieving revision 1.22 diff -u -r1.22 armos.c --- sim/arm/armos.c 12 May 2005 07:36:58 -0000 1.22 +++ sim/arm/armos.c 9 Sep 2005 17:19:08 -0000 @@ -27,6 +27,7 @@ =20 #include #include +#include #include #include "targ-vals.h" =20 @@ -34,10 +35,6 @@ #define TARGET_O_BINARY 0 #endif =20 -#ifdef __STDC__ -#define unlink(s) remove(s) -#endif - #ifdef HAVE_UNISTD_H #include /* For SEEK_SET etc. */ #endif @@ -303,18 +300,24 @@ SWIopen (ARMul_State * state, ARMword name, ARMword SWIflags) { struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; - char dummy[2000]; + char buf[FILENAME_MAX], *p =3D buf; int flags; int i; =20 - for (i =3D 0; (dummy[i] =3D ARMul_SafeReadByte (state, name + i)); i++) - ; + for (i =3D 0; i < sizeof buf; i++) + if ((*p++ =3D ARMul_SafeReadByte (state, name++)) =3D=3D '\0') + break; + if (i =3D=3D sizeof buf) { + state->Reg[0] =3D -1; + OSptr->ErrorNo =3D cb_host_to_target_errno(sim_callback, ENAMETOOLONG); + return; + } =20 /* Now we need to decode the Demon open mode. */ flags =3D translate_open_mode[SWIflags]; =20 /* Filename ":tt" is special: it denotes stdin/out. */ - if (strcmp (dummy, ":tt") =3D=3D 0) + if (strcmp (buf, ":tt") =3D=3D 0) { if (flags =3D=3D TARGET_O_RDONLY) /* opening tty "r" */ state->Reg[0] =3D 0; /* stdin */ @@ -323,7 +326,7 @@ } else { - state->Reg[0] =3D sim_callback->open (sim_callback, dummy, flags); + state->Reg[0] =3D sim_callback->open (sim_callback, buf, flags); OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); } } @@ -403,6 +406,54 @@ OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); } =20 +static void +SWIremove (ARMul_State * state, ARMword path) +{ + struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; + char buf[FILENAME_MAX], *p =3D buf; + int i; + + for (i =3D 0; i < sizeof buf; i++) + if ((*p++ =3D ARMul_SafeReadByte (state, path++)) =3D=3D '\0') + break; + if (i =3D=3D sizeof buf) { + state->Reg[0] =3D -1; + OSptr->ErrorNo =3D cb_host_to_target_errno(sim_callback, ENAMETOOLONG); + return; + } + + state->Reg[0] =3D sim_callback->unlink (sim_callback, buf); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); +} + +static void +SWIrename (ARMul_State * state, ARMword old, ARMword new) +{ + struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; + char oldbuf[FILENAME_MAX], newbuf[FILENAME_MAX], *p; + int i; + + for (p =3D oldbuf, i =3D 0; i < sizeof oldbuf; i++) + if ((*p++ =3D ARMul_SafeReadByte (state, old++)) =3D=3D '\0') + break; + if (i =3D=3D sizeof oldbuf) { + state->Reg[0] =3D -1; + OSptr->ErrorNo =3D cb_host_to_target_errno(sim_callback, ENAMETOOLONG); + return; + } + for (p =3D newbuf, i =3D 0; i < sizeof newbuf; i++) + if ((*p++ =3D ARMul_SafeReadByte (state, new++)) =3D=3D '\0') + break; + if (i =3D=3D sizeof newbuf) { + state->Reg[0] =3D -1; + OSptr->ErrorNo =3D cb_host_to_target_errno(sim_callback, ENAMETOOLONG); + return; + } + + state->Reg[0] =3D sim_callback->rename (sim_callback, oldbuf, newbuf); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); +} + /* The emulator calls this routine when a SWI instruction is encuntered. The parameter passed is the SWI number (lower 24 bits of the instruction). */ =20 @@ -544,6 +595,30 @@ state->Emulate =3D FALSE; break; =20 + case SWI_Remove: + if (swi_mask & SWI_MASK_DEMON) + SWIremove (state, state->Reg[0]); + else + unhandled =3D TRUE; + break; + + case SWI_Rename: + if (swi_mask & SWI_MASK_DEMON) + SWIrename (state, state->Reg[0], state->Reg[1]); + else + unhandled =3D TRUE; + break; + + case SWI_IsTTY: + if (swi_mask & SWI_MASK_DEMON) + { + state->Reg[0] =3D sim_callback->isatty (sim_callback, state->Reg[0]); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + } + else + unhandled =3D TRUE; + break; + /* Handle Angel SWIs as well as Demon ones. */ case AngelSWI_ARM: case AngelSWI_Thumb: @@ -566,10 +641,7 @@ =20=09=20=20 /* Unimplemented reason codes. */ case AngelSWI_Reason_ReadC: - case AngelSWI_Reason_IsTTY: case AngelSWI_Reason_TmpNam: - case AngelSWI_Reason_Remove: - case AngelSWI_Reason_Rename: case AngelSWI_Reason_System: case AngelSWI_Reason_EnterSVC: default: @@ -684,6 +756,21 @@ ARMul_ReadWord (state, addr + 4), ARMul_ReadWord (state, addr + 8)); break; + + case AngelSWI_Reason_IsTTY: + state->Reg[0] =3D sim_callback->close (sim_callback, + ARMul_ReadWord (state, addr)); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + break; + + case AngelSWI_Reason_Remove: + SWIremove (state, + ARMul_ReadWord (state, addr)); + + case AngelSWI_Reason_Rename: + SWIrename (state, + ARMul_ReadWord (state, addr), + ARMul_ReadWord (state, addr + 4)); } } else ------=_Part_837_6732551.1126286594601 Content-Type: text/plain; name="sim-arm-swi.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sim-arm-swi.diff" Content-length: 7483 MjAwNS0wOS0wOSAgU2hhdW4gSmFja21hbiAgPHNqYWNrbWFuQGdtYWlsLmNv bT4KCgkqIHNpbS9hcm0vYXJtb3MuYyAodW5saW5rKTogUmVtb3ZlIHRoaXMg bWFjcm8uIEl0IGlzIHVudXNlZAoJaW4gdGhpcyBmaWxlIGFuZCBjb25mbGlj dHMgd2l0aCBzaW1fY2FsbGJhY2stPnVubGluay4KCShTV0lvcGVuKTogRml4 IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdy4KCShTV0lyZW1vdmUpOiBO ZXcgZnVuY3Rpb24uCgkoU1dJcmVuYW1lKTogRGl0dG8uCgkoQVJNdWxfT1NI YW5kbGVTV0kpOiBIYW5kbGUgdGhlIFJEUCBjYWxscyBTV0lfSXNUVFksCglT V0lfUmVtb3ZlLCBhbmQgU1dJX1JlbmFtZSwgYXMgd2VsbCBhcyB0aGUgUkRJ IGNhbGxzCglBbmdlbFNXSV9SZWFzb25fSXNUVFksIEFuZ2VsU1dJX1JlYXNv bl9SZW1vdmUsIGFuZAoJQW5nZWxTV0lfUmVhc29uX1JlbmFtZS4KCkluZGV4 OiBzaW0vYXJtL2FybW9zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL3NpbS9hcm0vYXJtb3MuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMgpkaWZmIC11IC1yMS4yMiBhcm1vcy5jCi0tLSBz aW0vYXJtL2FybW9zLmMJMTIgTWF5IDIwMDUgMDc6MzY6NTggLTAwMDAJMS4y MgorKysgc2ltL2FybS9hcm1vcy5jCTkgU2VwIDIwMDUgMTc6MTk6MDggLTAw MDAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KICNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1 ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgInRhcmctdmFscy5oIgogCkBAIC0z NCwxMCArMzUsNiBAQAogI2RlZmluZSBUQVJHRVRfT19CSU5BUlkgMAogI2Vu ZGlmCiAKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZSB1bmxpbmsocykgcmVt b3ZlKHMpCi0jZW5kaWYKLQogI2lmZGVmIEhBVkVfVU5JU1REX0gKICNpbmNs dWRlIDx1bmlzdGQuaD4JCS8qIEZvciBTRUVLX1NFVCBldGMuICAqLwogI2Vu ZGlmCkBAIC0zMDMsMTggKzMwMCwyNCBAQAogU1dJb3BlbiAoQVJNdWxfU3Rh dGUgKiBzdGF0ZSwgQVJNd29yZCBuYW1lLCBBUk13b3JkIFNXSWZsYWdzKQog ewogICBzdHJ1Y3QgT1NibG9jayAqT1NwdHIgPSAoc3RydWN0IE9TYmxvY2sg Kikgc3RhdGUtPk9TcHRyOwotICBjaGFyIGR1bW15WzIwMDBdOworICBjaGFy IGJ1ZltGSUxFTkFNRV9NQVhdLCAqcCA9IGJ1ZjsKICAgaW50IGZsYWdzOwog ICBpbnQgaTsKIAotICBmb3IgKGkgPSAwOyAoZHVtbXlbaV0gPSBBUk11bF9T YWZlUmVhZEJ5dGUgKHN0YXRlLCBuYW1lICsgaSkpOyBpKyspCi0gICAgOwor ICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGJ1ZjsgaSsrKQorICAgIGlmICgo KnArKyA9IEFSTXVsX1NhZmVSZWFkQnl0ZSAoc3RhdGUsIG5hbWUrKykpID09 ICdcMCcpCisgICAgICBicmVhazsKKyAgaWYgKGkgPT0gc2l6ZW9mIGJ1Zikg eworICAgIHN0YXRlLT5SZWdbMF0gPSAtMTsKKyAgICBPU3B0ci0+RXJyb3JO byA9IGNiX2hvc3RfdG9fdGFyZ2V0X2Vycm5vKHNpbV9jYWxsYmFjaywgRU5B TUVUT09MT05HKTsKKyAgICByZXR1cm47CisgIH0KIAogICAvKiBOb3cgd2Ug bmVlZCB0byBkZWNvZGUgdGhlIERlbW9uIG9wZW4gbW9kZS4gICovCiAgIGZs YWdzID0gdHJhbnNsYXRlX29wZW5fbW9kZVtTV0lmbGFnc107CiAKICAgLyog RmlsZW5hbWUgIjp0dCIgaXMgc3BlY2lhbDogaXQgZGVub3RlcyBzdGRpbi9v dXQuICAqLwotICBpZiAoc3RyY21wIChkdW1teSwgIjp0dCIpID09IDApCisg IGlmIChzdHJjbXAgKGJ1ZiwgIjp0dCIpID09IDApCiAgICAgewogICAgICAg aWYgKGZsYWdzID09IFRBUkdFVF9PX1JET05MWSkgLyogb3BlbmluZyB0dHkg InIiICovCiAJc3RhdGUtPlJlZ1swXSA9IDA7CS8qIHN0ZGluICovCkBAIC0z MjMsNyArMzI2LDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBz dGF0ZS0+UmVnWzBdID0gc2ltX2NhbGxiYWNrLT5vcGVuIChzaW1fY2FsbGJh Y2ssIGR1bW15LCBmbGFncyk7CisgICAgICBzdGF0ZS0+UmVnWzBdID0gc2lt X2NhbGxiYWNrLT5vcGVuIChzaW1fY2FsbGJhY2ssIGJ1ZiwgZmxhZ3MpOwog ICAgICAgT1NwdHItPkVycm9yTm8gPSBzaW1fY2FsbGJhY2stPmdldF9lcnJu byAoc2ltX2NhbGxiYWNrKTsKICAgICB9CiB9CkBAIC00MDMsNiArNDA2LDU0 IEBACiAgIE9TcHRyLT5FcnJvck5vID0gc2ltX2NhbGxiYWNrLT5nZXRfZXJy bm8gKHNpbV9jYWxsYmFjayk7CiB9CiAKK3N0YXRpYyB2b2lkCitTV0lyZW1v dmUgKEFSTXVsX1N0YXRlICogc3RhdGUsIEFSTXdvcmQgcGF0aCkKK3sKKyAg c3RydWN0IE9TYmxvY2sgKk9TcHRyID0gKHN0cnVjdCBPU2Jsb2NrICopIHN0 YXRlLT5PU3B0cjsKKyAgY2hhciBidWZbRklMRU5BTUVfTUFYXSwgKnAgPSBi dWY7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgYnVm OyBpKyspCisgICAgaWYgKCgqcCsrID0gQVJNdWxfU2FmZVJlYWRCeXRlIChz dGF0ZSwgcGF0aCsrKSkgPT0gJ1wwJykKKyAgICAgIGJyZWFrOworICBpZiAo aSA9PSBzaXplb2YgYnVmKSB7CisgICAgc3RhdGUtPlJlZ1swXSA9IC0xOwor ICAgIE9TcHRyLT5FcnJvck5vID0gY2JfaG9zdF90b190YXJnZXRfZXJybm8o c2ltX2NhbGxiYWNrLCBFTkFNRVRPT0xPTkcpOworICAgIHJldHVybjsKKyAg fQorCisgIHN0YXRlLT5SZWdbMF0gPSBzaW1fY2FsbGJhY2stPnVubGluayAo c2ltX2NhbGxiYWNrLCBidWYpOworICBPU3B0ci0+RXJyb3JObyA9IHNpbV9j YWxsYmFjay0+Z2V0X2Vycm5vIChzaW1fY2FsbGJhY2spOworfQorCitzdGF0 aWMgdm9pZAorU1dJcmVuYW1lIChBUk11bF9TdGF0ZSAqIHN0YXRlLCBBUk13 b3JkIG9sZCwgQVJNd29yZCBuZXcpCit7CisgIHN0cnVjdCBPU2Jsb2NrICpP U3B0ciA9IChzdHJ1Y3QgT1NibG9jayAqKSBzdGF0ZS0+T1NwdHI7CisgIGNo YXIgb2xkYnVmW0ZJTEVOQU1FX01BWF0sIG5ld2J1ZltGSUxFTkFNRV9NQVhd LCAqcDsKKyAgaW50IGk7CisKKyAgZm9yIChwID0gb2xkYnVmLCBpID0gMDsg aSA8IHNpemVvZiBvbGRidWY7IGkrKykKKyAgICBpZiAoKCpwKysgPSBBUk11 bF9TYWZlUmVhZEJ5dGUgKHN0YXRlLCBvbGQrKykpID09ICdcMCcpCisgICAg ICBicmVhazsKKyAgaWYgKGkgPT0gc2l6ZW9mIG9sZGJ1ZikgeworICAgIHN0 YXRlLT5SZWdbMF0gPSAtMTsKKyAgICBPU3B0ci0+RXJyb3JObyA9IGNiX2hv c3RfdG9fdGFyZ2V0X2Vycm5vKHNpbV9jYWxsYmFjaywgRU5BTUVUT09MT05H KTsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yIChwID0gbmV3YnVmLCBpID0g MDsgaSA8IHNpemVvZiBuZXdidWY7IGkrKykKKyAgICBpZiAoKCpwKysgPSBB Uk11bF9TYWZlUmVhZEJ5dGUgKHN0YXRlLCBuZXcrKykpID09ICdcMCcpCisg ICAgICBicmVhazsKKyAgaWYgKGkgPT0gc2l6ZW9mIG5ld2J1ZikgeworICAg IHN0YXRlLT5SZWdbMF0gPSAtMTsKKyAgICBPU3B0ci0+RXJyb3JObyA9IGNi X2hvc3RfdG9fdGFyZ2V0X2Vycm5vKHNpbV9jYWxsYmFjaywgRU5BTUVUT09M T05HKTsKKyAgICByZXR1cm47CisgIH0KKworICBzdGF0ZS0+UmVnWzBdID0g c2ltX2NhbGxiYWNrLT5yZW5hbWUgKHNpbV9jYWxsYmFjaywgb2xkYnVmLCBu ZXdidWYpOworICBPU3B0ci0+RXJyb3JObyA9IHNpbV9jYWxsYmFjay0+Z2V0 X2Vycm5vIChzaW1fY2FsbGJhY2spOworfQorCiAvKiBUaGUgZW11bGF0b3Ig Y2FsbHMgdGhpcyByb3V0aW5lIHdoZW4gYSBTV0kgaW5zdHJ1Y3Rpb24gaXMg ZW5jdW50ZXJlZC4KICAgIFRoZSBwYXJhbWV0ZXIgcGFzc2VkIGlzIHRoZSBT V0kgbnVtYmVyIChsb3dlciAyNCBiaXRzIG9mIHRoZSBpbnN0cnVjdGlvbiku ICAqLwogCkBAIC01NDQsNiArNTk1LDMwIEBACiAgICAgICBzdGF0ZS0+RW11 bGF0ZSA9IEZBTFNFOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFNXSV9S ZW1vdmU6CisgICAgICBpZiAoc3dpX21hc2sgJiBTV0lfTUFTS19ERU1PTikK KwlTV0lyZW1vdmUgKHN0YXRlLCBzdGF0ZS0+UmVnWzBdKTsKKyAgICAgIGVs c2UKKwl1bmhhbmRsZWQgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIFNXSV9SZW5hbWU6CisgICAgICBpZiAoc3dpX21hc2sgJiBTV0lfTUFT S19ERU1PTikKKwlTV0lyZW5hbWUgKHN0YXRlLCBzdGF0ZS0+UmVnWzBdLCBz dGF0ZS0+UmVnWzFdKTsKKyAgICAgIGVsc2UKKwl1bmhhbmRsZWQgPSBUUlVF OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNXSV9Jc1RUWToKKyAgICAg IGlmIChzd2lfbWFzayAmIFNXSV9NQVNLX0RFTU9OKQorCXsKKwkgIHN0YXRl LT5SZWdbMF0gPSBzaW1fY2FsbGJhY2stPmlzYXR0eSAoc2ltX2NhbGxiYWNr LCBzdGF0ZS0+UmVnWzBdKTsKKwkgIE9TcHRyLT5FcnJvck5vID0gc2ltX2Nh bGxiYWNrLT5nZXRfZXJybm8gKHNpbV9jYWxsYmFjayk7CisJfQorICAgICAg ZWxzZQorCXVuaGFuZGxlZCA9IFRSVUU7CisgICAgICBicmVhazsKKwogICAg ICAgLyogSGFuZGxlIEFuZ2VsIFNXSXMgYXMgd2VsbCBhcyBEZW1vbiBvbmVz LiAgKi8KICAgICBjYXNlIEFuZ2VsU1dJX0FSTToKICAgICBjYXNlIEFuZ2Vs U1dJX1RodW1iOgpAQCAtNTY2LDEwICs2NDEsNyBAQAogCSAgCiAJICAgICAg LyogVW5pbXBsZW1lbnRlZCByZWFzb24gY29kZXMuICAqLwogCSAgICBjYXNl IEFuZ2VsU1dJX1JlYXNvbl9SZWFkQzoKLQkgICAgY2FzZSBBbmdlbFNXSV9S ZWFzb25fSXNUVFk6CiAJICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX1RtcE5h bToKLQkgICAgY2FzZSBBbmdlbFNXSV9SZWFzb25fUmVtb3ZlOgotCSAgICBj YXNlIEFuZ2VsU1dJX1JlYXNvbl9SZW5hbWU6CiAJICAgIGNhc2UgQW5nZWxT V0lfUmVhc29uX1N5c3RlbToKIAkgICAgY2FzZSBBbmdlbFNXSV9SZWFzb25f RW50ZXJTVkM6CiAJICAgIGRlZmF1bHQ6CkBAIC02ODQsNiArNzU2LDIxIEBA CiAJCQlBUk11bF9SZWFkV29yZCAoc3RhdGUsIGFkZHIgKyA0KSwKIAkJCUFS TXVsX1JlYWRXb3JkIChzdGF0ZSwgYWRkciArIDgpKTsKIAkgICAgICBicmVh azsKKworCSAgICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9Jc1RUWToKKwkgICAg ICBzdGF0ZS0+UmVnWzBdID0gc2ltX2NhbGxiYWNrLT5jbG9zZSAoc2ltX2Nh bGxiYWNrLAorCQkJCQkJICAgQVJNdWxfUmVhZFdvcmQgKHN0YXRlLCBhZGRy KSk7CisJICAgICAgT1NwdHItPkVycm9yTm8gPSBzaW1fY2FsbGJhY2stPmdl dF9lcnJubyAoc2ltX2NhbGxiYWNrKTsKKwkgICAgICBicmVhazsKKworCSAg ICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9SZW1vdmU6CisJICAgICAgU1dJcmVt b3ZlIChzdGF0ZSwKKwkJCSBBUk11bF9SZWFkV29yZCAoc3RhdGUsIGFkZHIp KTsKKworCSAgICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9SZW5hbWU6CisJICAg ICAgU1dJcmVuYW1lIChzdGF0ZSwKKwkJCSBBUk11bF9SZWFkV29yZCAoc3Rh dGUsIGFkZHIpLAorCQkJIEFSTXVsX1JlYWRXb3JkIChzdGF0ZSwgYWRkciAr IDQpKTsKIAkgICAgfQogCX0KICAgICAgIGVsc2UK ------=_Part_837_6732551.1126286594601--