Only frees instruction if allocated (#375)

* Only frees instruction if allocated

* Avoids memory leak in ks_close for EVM
This commit is contained in:
Catena cyber
2018-09-13 12:22:39 +08:00
committed by Nguyen Anh Quynh
parent 1ee0248c04
commit 0f19fa9acd
28 changed files with 109 additions and 54 deletions
+4 -2
View File
@@ -91,7 +91,7 @@ int main(int argc, char **argv)
uint64_t start_addr = 0;
char *input = NULL;
size_t count;
unsigned char *insn;
unsigned char *insn = NULL;
size_t size;
if (argc == 2) {
@@ -308,7 +308,9 @@ int main(int argc, char **argv)
}
// NOTE: free insn after usage to avoid leaking memory
ks_free(insn);
if (insn != NULL) {
ks_free(insn);
}
// close Keystone instance when done
ks_close(ks);
+1
View File
@@ -501,6 +501,7 @@ ks_err ks_close(ks_engine *ks)
if (ks->arch == KS_ARCH_EVM) {
// handle EVM differently
delete ks;
return KS_ERR_OK;
}
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);
+4 -2
View File
@@ -9,7 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ks_engine *ks;
ks_err err;
size_t count;
unsigned char *encode;
unsigned char *encode = NULL;
size_t size;
char * assembler;
@@ -55,7 +55,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
free(assembler);
// NOTE: free encode after usage to avoid leaking memory
ks_free(encode);
if (encode != NULL) {
ks_free(encode);
}
// close Keystone instance when done
ks_close(ks);