From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3482 invoked by alias); 7 Sep 2005 16:51:30 -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 3411 invoked by uid 22791); 7 Sep 2005 16:51:20 -0000 Received: from rproxy.gmail.com (HELO rproxy.gmail.com) (64.233.170.206) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Wed, 07 Sep 2005 16:51:20 +0000 Received: by rproxy.gmail.com with SMTP id y7so1078387rne for ; Wed, 07 Sep 2005 09:51:19 -0700 (PDT) Received: by 10.11.94.36 with SMTP id r36mr164247cwb; Wed, 07 Sep 2005 09:51:19 -0700 (PDT) Received: by 10.11.99.47 with HTTP; Wed, 7 Sep 2005 09:51:19 -0700 (PDT) Message-ID: <7f45d93905090709516f912861@mail.gmail.com> Date: Wed, 07 Sep 2005 16:51:00 -0000 From: Shaun Jackman Reply-To: sjackman@gmail.com To: gdb-patches@sources.redhat.com Subject: Re: sim/arm/armos.c: IsTTY [PATCH] In-Reply-To: <20050830023718.GB16189@nevyn.them.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2325_6394988.1126111879176" References: <7f45d9390508151204ca0b146@mail.gmail.com> <20050830023718.GB16189@nevyn.them.org> X-SW-Source: 2005-09/txt/msg00046.txt.bz2 ------=_Part_2325_6394988.1126111879176 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 5483 2005/8/29, Daniel Jacobowitz : > Please no buffer overflows be adding. Also, there's plenty of ways to > write this without the ugly empty loop body... I fixed the potential buffer overflow and cleaned up the loop coding style. Thanks for the tips. Cheers, Shaun 2005-09-07 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 7 Sep 2005 16:45:27 -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,19 @@ SWIopen (ARMul_State * state, ARMword name, ARMword SWIflags) { struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; - char dummy[2000]; + char buf[PATH_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; =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 +321,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 +401,39 @@ 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[PATH_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; + + 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[PATH_MAX], newbuf[PATH_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; + for (p =3D newbuf, i =3D 0; i < sizeof newbuf; i++) + if ((*p++ =3D ARMul_SafeReadByte (state, new++)) =3D=3D '\0') + break; + + 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 +575,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 +621,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 +736,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_2325_6394988.1126111879176 Content-Type: text/plain; name="sim-arm-swi.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sim-arm-swi.diff" Content-length: 6674 MjAwNS0wOS0wNyAgU2hhdW4gSmFja21hbiAgPHNqYWNrbWFuQGdtYWlsLmNv bT4KCgkqIHNpbS9hcm0vYXJtb3MuYyAodW5saW5rKTogUmVtb3ZlIHRoaXMg bWFjcm8uIEl0IGlzIHVudXNlZAoJaW4gdGhpcyBmaWxlIGFuZCBjb25mbGlj dHMgd2l0aCBzaW1fY2FsbGJhY2stPnVubGluay4KCShTV0lvcGVuKTogRml4 IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdy4KCShTV0lyZW1vdmUpOiBO ZXcgZnVuY3Rpb24uCgkoU1dJcmVuYW1lKTogRGl0dG8uCgkoQVJNdWxfT1NI YW5kbGVTV0kpOiBIYW5kbGUgdGhlIFJEUCBjYWxscyBTV0lfSXNUVFksCglT V0lfUmVtb3ZlLCBhbmQgU1dJX1JlbmFtZSwgYXMgd2VsbCBhcyB0aGUgUkRJ IGNhbGxzCglBbmdlbFNXSV9SZWFzb25fSXNUVFksIEFuZ2VsU1dJX1JlYXNv bl9SZW1vdmUsIGFuZAoJQW5nZWxTV0lfUmVhc29uX1JlbmFtZS4KCkluZGV4 OiBzaW0vYXJtL2FybW9zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL3NpbS9hcm0vYXJtb3MuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMgpkaWZmIC11IC1yMS4yMiBhcm1vcy5jCi0tLSBz aW0vYXJtL2FybW9zLmMJMTIgTWF5IDIwMDUgMDc6MzY6NTggLTAwMDAJMS4y MgorKysgc2ltL2FybS9hcm1vcy5jCTcgU2VwIDIwMDUgMTY6NDU6MjcgLTAw MDAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KICNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1 ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgInRhcmctdmFscy5oIgogCkBAIC0z NCwxMCArMzUsNiBAQAogI2RlZmluZSBUQVJHRVRfT19CSU5BUlkgMAogI2Vu ZGlmCiAKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZSB1bmxpbmsocykgcmVt b3ZlKHMpCi0jZW5kaWYKLQogI2lmZGVmIEhBVkVfVU5JU1REX0gKICNpbmNs dWRlIDx1bmlzdGQuaD4JCS8qIEZvciBTRUVLX1NFVCBldGMuICAqLwogI2Vu ZGlmCkBAIC0zMDMsMTggKzMwMCwxOSBAQAogU1dJb3BlbiAoQVJNdWxfU3Rh dGUgKiBzdGF0ZSwgQVJNd29yZCBuYW1lLCBBUk13b3JkIFNXSWZsYWdzKQog ewogICBzdHJ1Y3QgT1NibG9jayAqT1NwdHIgPSAoc3RydWN0IE9TYmxvY2sg Kikgc3RhdGUtPk9TcHRyOwotICBjaGFyIGR1bW15WzIwMDBdOworICBjaGFy IGJ1ZltQQVRIX01BWF0sICpwID0gYnVmOwogICBpbnQgZmxhZ3M7CiAgIGlu dCBpOwogCi0gIGZvciAoaSA9IDA7IChkdW1teVtpXSA9IEFSTXVsX1NhZmVS ZWFkQnl0ZSAoc3RhdGUsIG5hbWUgKyBpKSk7IGkrKykKLSAgICA7CisgIGZv ciAoaSA9IDA7IGkgPCBzaXplb2YgYnVmOyBpKyspCisgICAgaWYgKCgqcCsr ID0gQVJNdWxfU2FmZVJlYWRCeXRlIChzdGF0ZSwgbmFtZSsrKSkgPT0gJ1ww JykKKyAgICAgIGJyZWFrOwogCiAgIC8qIE5vdyB3ZSBuZWVkIHRvIGRlY29k ZSB0aGUgRGVtb24gb3BlbiBtb2RlLiAgKi8KICAgZmxhZ3MgPSB0cmFuc2xh dGVfb3Blbl9tb2RlW1NXSWZsYWdzXTsKIAogICAvKiBGaWxlbmFtZSAiOnR0 IiBpcyBzcGVjaWFsOiBpdCBkZW5vdGVzIHN0ZGluL291dC4gICovCi0gIGlm IChzdHJjbXAgKGR1bW15LCAiOnR0IikgPT0gMCkKKyAgaWYgKHN0cmNtcCAo YnVmLCAiOnR0IikgPT0gMCkKICAgICB7CiAgICAgICBpZiAoZmxhZ3MgPT0g VEFSR0VUX09fUkRPTkxZKSAvKiBvcGVuaW5nIHR0eSAiciIgKi8KIAlzdGF0 ZS0+UmVnWzBdID0gMDsJLyogc3RkaW4gKi8KQEAgLTMyMyw3ICszMjEsNyBA QAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHN0YXRlLT5SZWdbMF0g PSBzaW1fY2FsbGJhY2stPm9wZW4gKHNpbV9jYWxsYmFjaywgZHVtbXksIGZs YWdzKTsKKyAgICAgIHN0YXRlLT5SZWdbMF0gPSBzaW1fY2FsbGJhY2stPm9w ZW4gKHNpbV9jYWxsYmFjaywgYnVmLCBmbGFncyk7CiAgICAgICBPU3B0ci0+ RXJyb3JObyA9IHNpbV9jYWxsYmFjay0+Z2V0X2Vycm5vIChzaW1fY2FsbGJh Y2spOwogICAgIH0KIH0KQEAgLTQwMyw2ICs0MDEsMzkgQEAKICAgT1NwdHIt PkVycm9yTm8gPSBzaW1fY2FsbGJhY2stPmdldF9lcnJubyAoc2ltX2NhbGxi YWNrKTsKIH0KIAorc3RhdGljIHZvaWQKK1NXSXJlbW92ZSAoQVJNdWxfU3Rh dGUgKiBzdGF0ZSwgQVJNd29yZCBwYXRoKQoreworICBzdHJ1Y3QgT1NibG9j ayAqT1NwdHIgPSAoc3RydWN0IE9TYmxvY2sgKikgc3RhdGUtPk9TcHRyOwor ICBjaGFyIGJ1ZltQQVRIX01BWF0sICpwID0gYnVmOworICBpbnQgaTsKKwor ICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGJ1ZjsgaSsrKQorICAgIGlmICgo KnArKyA9IEFSTXVsX1NhZmVSZWFkQnl0ZSAoc3RhdGUsIHBhdGgrKykpID09 ICdcMCcpCisgICAgICBicmVhazsKKworICBzdGF0ZS0+UmVnWzBdID0gc2lt X2NhbGxiYWNrLT51bmxpbmsgKHNpbV9jYWxsYmFjaywgYnVmKTsKKyAgT1Nw dHItPkVycm9yTm8gPSBzaW1fY2FsbGJhY2stPmdldF9lcnJubyAoc2ltX2Nh bGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQKK1NXSXJlbmFtZSAoQVJNdWxf U3RhdGUgKiBzdGF0ZSwgQVJNd29yZCBvbGQsIEFSTXdvcmQgbmV3KQorewor ICBzdHJ1Y3QgT1NibG9jayAqT1NwdHIgPSAoc3RydWN0IE9TYmxvY2sgKikg c3RhdGUtPk9TcHRyOworICBjaGFyIG9sZGJ1ZltQQVRIX01BWF0sIG5ld2J1 ZltQQVRIX01BWF0sICpwOworICBpbnQgaTsKKworICBmb3IgKHAgPSBvbGRi dWYsIGkgPSAwOyBpIDwgc2l6ZW9mIG9sZGJ1ZjsgaSsrKQorICAgIGlmICgo KnArKyA9IEFSTXVsX1NhZmVSZWFkQnl0ZSAoc3RhdGUsIG9sZCsrKSkgPT0g J1wwJykKKyAgICAgIGJyZWFrOworICBmb3IgKHAgPSBuZXdidWYsIGkgPSAw OyBpIDwgc2l6ZW9mIG5ld2J1ZjsgaSsrKQorICAgIGlmICgoKnArKyA9IEFS TXVsX1NhZmVSZWFkQnl0ZSAoc3RhdGUsIG5ldysrKSkgPT0gJ1wwJykKKyAg ICAgIGJyZWFrOworCisgIHN0YXRlLT5SZWdbMF0gPSBzaW1fY2FsbGJhY2st PnJlbmFtZSAoc2ltX2NhbGxiYWNrLCBvbGRidWYsIG5ld2J1Zik7CisgIE9T cHRyLT5FcnJvck5vID0gc2ltX2NhbGxiYWNrLT5nZXRfZXJybm8gKHNpbV9j YWxsYmFjayk7Cit9CisKIC8qIFRoZSBlbXVsYXRvciBjYWxscyB0aGlzIHJv dXRpbmUgd2hlbiBhIFNXSSBpbnN0cnVjdGlvbiBpcyBlbmN1bnRlcmVkLgog ICAgVGhlIHBhcmFtZXRlciBwYXNzZWQgaXMgdGhlIFNXSSBudW1iZXIgKGxv d2VyIDI0IGJpdHMgb2YgdGhlIGluc3RydWN0aW9uKS4gICovCiAKQEAgLTU0 NCw2ICs1NzUsMzAgQEAKICAgICAgIHN0YXRlLT5FbXVsYXRlID0gRkFMU0U7 CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgU1dJX1JlbW92ZToKKyAgICAg IGlmIChzd2lfbWFzayAmIFNXSV9NQVNLX0RFTU9OKQorCVNXSXJlbW92ZSAo c3RhdGUsIHN0YXRlLT5SZWdbMF0pOworICAgICAgZWxzZQorCXVuaGFuZGxl ZCA9IFRSVUU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1dJX1JlbmFt ZToKKyAgICAgIGlmIChzd2lfbWFzayAmIFNXSV9NQVNLX0RFTU9OKQorCVNX SXJlbmFtZSAoc3RhdGUsIHN0YXRlLT5SZWdbMF0sIHN0YXRlLT5SZWdbMV0p OworICAgICAgZWxzZQorCXVuaGFuZGxlZCA9IFRSVUU7CisgICAgICBicmVh azsKKworICAgIGNhc2UgU1dJX0lzVFRZOgorICAgICAgaWYgKHN3aV9tYXNr ICYgU1dJX01BU0tfREVNT04pCisJeworCSAgc3RhdGUtPlJlZ1swXSA9IHNp bV9jYWxsYmFjay0+aXNhdHR5IChzaW1fY2FsbGJhY2ssIHN0YXRlLT5SZWdb MF0pOworCSAgT1NwdHItPkVycm9yTm8gPSBzaW1fY2FsbGJhY2stPmdldF9l cnJubyAoc2ltX2NhbGxiYWNrKTsKKwl9CisgICAgICBlbHNlCisJdW5oYW5k bGVkID0gVFJVRTsKKyAgICAgIGJyZWFrOworCiAgICAgICAvKiBIYW5kbGUg QW5nZWwgU1dJcyBhcyB3ZWxsIGFzIERlbW9uIG9uZXMuICAqLwogICAgIGNh c2UgQW5nZWxTV0lfQVJNOgogICAgIGNhc2UgQW5nZWxTV0lfVGh1bWI6CkBA IC01NjYsMTAgKzYyMSw3IEBACiAJICAKIAkgICAgICAvKiBVbmltcGxlbWVu dGVkIHJlYXNvbiBjb2Rlcy4gICovCiAJICAgIGNhc2UgQW5nZWxTV0lfUmVh c29uX1JlYWRDOgotCSAgICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9Jc1RUWToK IAkgICAgY2FzZSBBbmdlbFNXSV9SZWFzb25fVG1wTmFtOgotCSAgICBjYXNl IEFuZ2VsU1dJX1JlYXNvbl9SZW1vdmU6Ci0JICAgIGNhc2UgQW5nZWxTV0lf UmVhc29uX1JlbmFtZToKIAkgICAgY2FzZSBBbmdlbFNXSV9SZWFzb25fU3lz dGVtOgogCSAgICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9FbnRlclNWQzoKIAkg ICAgZGVmYXVsdDoKQEAgLTY4NCw2ICs3MzYsMjEgQEAKIAkJCUFSTXVsX1Jl YWRXb3JkIChzdGF0ZSwgYWRkciArIDQpLAogCQkJQVJNdWxfUmVhZFdvcmQg KHN0YXRlLCBhZGRyICsgOCkpOwogCSAgICAgIGJyZWFrOworCisJICAgIGNh c2UgQW5nZWxTV0lfUmVhc29uX0lzVFRZOgorCSAgICAgIHN0YXRlLT5SZWdb MF0gPSBzaW1fY2FsbGJhY2stPmNsb3NlIChzaW1fY2FsbGJhY2ssCisJCQkJ CQkgICBBUk11bF9SZWFkV29yZCAoc3RhdGUsIGFkZHIpKTsKKwkgICAgICBP U3B0ci0+RXJyb3JObyA9IHNpbV9jYWxsYmFjay0+Z2V0X2Vycm5vIChzaW1f Y2FsbGJhY2spOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgQW5nZWxT V0lfUmVhc29uX1JlbW92ZToKKwkgICAgICBTV0lyZW1vdmUgKHN0YXRlLAor CQkJIEFSTXVsX1JlYWRXb3JkIChzdGF0ZSwgYWRkcikpOworCisJICAgIGNh c2UgQW5nZWxTV0lfUmVhc29uX1JlbmFtZToKKwkgICAgICBTV0lyZW5hbWUg KHN0YXRlLAorCQkJIEFSTXVsX1JlYWRXb3JkIChzdGF0ZSwgYWRkciksCisJ CQkgQVJNdWxfUmVhZFdvcmQgKHN0YXRlLCBhZGRyICsgNCkpOwogCSAgICB9 CiAJfQogICAgICAgZWxzZQo= ------=_Part_2325_6394988.1126111879176--