diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-03-26 15:46:07 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-03-27 12:30:46 +0100 |
| commit | 31d03710ab858a2b1023c1fc372d08076256e301 (patch) | |
| tree | 290762625a2ff131a05ae9a0a49863108816cb2b | |
| parent | 89a31947780bb584d8d082817fc77be5c30097af (diff) | |
| download | focaccia-miasm-31d03710ab858a2b1023c1fc372d08076256e301.tar.gz focaccia-miasm-31d03710ab858a2b1023c1fc372d08076256e301.zip | |
Jitter: size_t for mem read/write
| -rw-r--r-- | miasm/jitter/JitCore.c | 2 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_aarch64.c | 13 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_arm.c | 13 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_mep.c | 13 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_mips32.c | 16 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_msp430.c | 14 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_ppc32.c | 13 | ||||
| -rw-r--r-- | miasm/jitter/arch/JitCore_x86.c | 9 | ||||
| -rw-r--r-- | miasm/jitter/vm_mngr.c | 19 | ||||
| -rw-r--r-- | miasm/jitter/vm_mngr.h | 4 | ||||
| -rw-r--r-- | miasm/jitter/vm_mngr_py.c | 11 |
11 files changed, 73 insertions, 54 deletions
diff --git a/miasm/jitter/JitCore.c b/miasm/jitter/JitCore.c index 012a53c4..37b69aa3 100644 --- a/miasm/jitter/JitCore.c +++ b/miasm/jitter/JitCore.c @@ -254,7 +254,7 @@ PyObject* vm_get_mem(JitCpu *self, PyObject* args) } size_st = (size_t)size; - ret = vm_read_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, &buf_out, size); + ret = vm_read_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, &buf_out, size_st); if (ret < 0) { PyErr_SetString(PyExc_RuntimeError, "cannot find address"); return NULL; diff --git a/miasm/jitter/arch/JitCore_aarch64.c b/miasm/jitter/arch/JitCore_aarch64.c index 2edca4e2..98090cd0 100644 --- a/miasm/jitter/arch/JitCore_aarch64.c +++ b/miasm/jitter/arch/JitCore_aarch64.c @@ -234,7 +234,7 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) -void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size) +void check_automod(JitCpu* jitcpu, uint64_t addr, size_t size) { PyObject *result; @@ -277,7 +277,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -289,13 +289,16 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_arm.c b/miasm/jitter/arch/JitCore_arm.c index 1ce1cf47..90c95352 100644 --- a/miasm/jitter/arch/JitCore_arm.c +++ b/miasm/jitter/arch/JitCore_arm.c @@ -188,7 +188,7 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) -void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size) +void check_automod(JitCpu* jitcpu, uint64_t addr, size_t size) { PyObject *result; @@ -230,7 +230,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -242,13 +242,16 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_mep.c b/miasm/jitter/arch/JitCore_mep.c index a572f3e9..3c98f2dc 100644 --- a/miasm/jitter/arch/JitCore_mep.c +++ b/miasm/jitter/arch/JitCore_mep.c @@ -248,7 +248,7 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) return PyLong_FromUnsignedLongLong((uint64_t)(((struct vm_cpu*)self->cpu)->exception_flags)); } -void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size) +void check_automod(JitCpu* jitcpu, uint64_t addr, size_t size) { PyObject *result; @@ -291,7 +291,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret = 0x1337; @@ -303,13 +303,16 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_mips32.c b/miasm/jitter/arch/JitCore_mips32.c index 9bb3ab99..e8f95e5f 100644 --- a/miasm/jitter/arch/JitCore_mips32.c +++ b/miasm/jitter/arch/JitCore_mips32.c @@ -211,7 +211,7 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) -void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size) +void check_automod(JitCpu* jitcpu, uint64_t addr, size_t size) { PyObject *result; @@ -255,7 +255,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -264,16 +264,20 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) PyGetInt_uint64_t(py_addr, addr); - if(!PyBytes_Check(py_buffer)) + if (!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } + PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_msp430.c b/miasm/jitter/arch/JitCore_msp430.c index 5279c69b..b9b690ae 100644 --- a/miasm/jitter/arch/JitCore_msp430.c +++ b/miasm/jitter/arch/JitCore_msp430.c @@ -187,7 +187,7 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) -void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size) +void check_automod(JitCpu* jitcpu, uint64_t addr, size_t size) { PyObject *result; @@ -230,7 +230,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -242,13 +242,17 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } + PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_ppc32.c b/miasm/jitter/arch/JitCore_ppc32.c index 8710bef5..4514de34 100644 --- a/miasm/jitter/arch/JitCore_ppc32.c +++ b/miasm/jitter/arch/JitCore_ppc32.c @@ -140,7 +140,7 @@ cpu_get_spr_access(JitCpu *self, PyObject *args) { } void -check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size) { +check_automod(JitCpu *jitcpu, uint64_t addr, size_t size) { PyObject *result; if (!(((VmMngr*)jitcpu->pyvm)->vm_mngr.exception_flags & EXCEPT_CODE_AUTOMOD)) @@ -182,7 +182,7 @@ vm_set_mem(JitCpu *self, PyObject *args) { Py_ssize_t py_length; char *buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret = 0x1337; @@ -194,13 +194,16 @@ vm_set_mem(JitCpu *self, PyObject *args) { if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); - check_automod(self, addr, size*8); + check_automod(self, addr, (size_t)pysize); Py_INCREF(Py_None); return Py_None; diff --git a/miasm/jitter/arch/JitCore_x86.c b/miasm/jitter/arch/JitCore_x86.c index f6e2d6d0..d32f4d17 100644 --- a/miasm/jitter/arch/JitCore_x86.c +++ b/miasm/jitter/arch/JitCore_x86.c @@ -489,7 +489,7 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -501,10 +501,13 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args) if(!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size); + ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError,"arg must be str"); diff --git a/miasm/jitter/vm_mngr.c b/miasm/jitter/vm_mngr.c index a767b366..d27dd135 100644 --- a/miasm/jitter/vm_mngr.c +++ b/miasm/jitter/vm_mngr.c @@ -513,30 +513,23 @@ uint64_t vm_MEM_LOOKUP_64(vm_mngr_t* vm_mngr, uint64_t addr) } -int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, uint64_t size) +int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, size_t size) { char* buffer; size_t len; - size_t size_st; uint64_t addr_diff; size_t addr_diff_st; struct memory_page_node * mpn; - if (size > SIZE_MAX) { - fprintf(stderr, "Size too big\n"); - exit(EXIT_FAILURE); - } - - buffer = malloc((size_t)size); + buffer = malloc(size); *buffer_ptr = buffer; if (!buffer){ fprintf(stderr, "Error: cannot alloc read\n"); exit(EXIT_FAILURE); } - size_st = (size_t)size; /* read is multiple page wide */ - while (size_st){ + while (size){ mpn = get_memory_page_from_address(vm_mngr, addr, 1); if (!mpn){ free(*buffer_ptr); @@ -550,17 +543,17 @@ int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, uint64_t s exit(EXIT_FAILURE); } addr_diff_st = (size_t) addr_diff; - len = MIN(size_st, mpn->size - addr_diff_st); + len = MIN(size, mpn->size - addr_diff_st); memcpy(buffer, (char*)mpn->ad_hp + (addr_diff_st), len); buffer += len; addr += len; - size_st -= len; + size -= len; } return 0; } -int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, uint64_t size) +int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, size_t size) { size_t len; size_t size_st; diff --git a/miasm/jitter/vm_mngr.h b/miasm/jitter/vm_mngr.h index 1fa8d9ae..44f369a6 100644 --- a/miasm/jitter/vm_mngr.h +++ b/miasm/jitter/vm_mngr.h @@ -207,8 +207,8 @@ unsigned short MEM_LOOKUP_16_PASSTHROUGH(uint64_t addr); unsigned int MEM_LOOKUP_32_PASSTHROUGH(uint64_t addr); uint64_t MEM_LOOKUP_64_PASSTHROUGH(uint64_t addr); -int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, uint64_t size); -int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, uint64_t size); +int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, size_t size); +int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, size_t size); void memory_access_list_init(struct memory_access_list * access); void memory_access_list_reset(struct memory_access_list * access); diff --git a/miasm/jitter/vm_mngr_py.c b/miasm/jitter/vm_mngr_py.c index 57494655..d2e1d97f 100644 --- a/miasm/jitter/vm_mngr_py.c +++ b/miasm/jitter/vm_mngr_py.c @@ -162,7 +162,7 @@ PyObject* vm_set_mem(VmMngr* self, PyObject* args) Py_ssize_t py_length; char * buffer; - uint64_t size; + Py_ssize_t pysize; uint64_t addr; int ret; @@ -174,14 +174,17 @@ PyObject* vm_set_mem(VmMngr* self, PyObject* args) if (!PyBytes_Check(py_buffer)) RAISE(PyExc_TypeError,"arg must be bytes"); - size = PyBytes_Size(py_buffer); + pysize = PyBytes_Size(py_buffer); + if (pysize < 0) { + RAISE(PyExc_TypeError,"Python error"); + } PyBytes_AsStringAndSize(py_buffer, &buffer, &py_length); - ret = vm_write_mem(&self->vm_mngr, addr, buffer, size); + ret = vm_write_mem(&self->vm_mngr, addr, buffer, pysize); if (ret < 0) RAISE(PyExc_TypeError, "Error in set_mem"); - add_mem_write(&self->vm_mngr, addr, size); + add_mem_write(&self->vm_mngr, addr, (size_t)pysize); check_invalid_code_blocs(&self->vm_mngr); Py_INCREF(Py_None); |