From 34023d6506a66516824be2a1b38e44ec6f0234da Mon Sep 17 00:00:00 2001 From: Tamas K Lengyel Date: Wed, 28 Jun 2017 17:26:09 -0600 Subject: [PATCH] Coverity fixes --- src/drakvuf.cpp | 2 +- src/plugins/filedelete/filedelete.cpp | 10 +++++----- src/plugins/poolmon/poolmon.cpp | 15 +++++++++++---- src/plugins/socketmon/socketmon.cpp | 6 ++++++ src/plugins/socketmon/socketmon.h | 2 -- src/plugins/syscalls/syscalls.cpp | 2 +- 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/drakvuf.cpp b/src/drakvuf.cpp index fffacbbcf..f3affc178 100644 --- a/src/drakvuf.cpp +++ b/src/drakvuf.cpp @@ -1,6 +1,6 @@ /*********************IMPORTANT DRAKVUF LICENSE TERMS*********************** * * - * DRAKVUF (C) 2014-2016 Tamas K Lengyel. * + * DRAKVUF (C) 2014-2017 Tamas K Lengyel. * * Tamas K Lengyel is hereinafter referred to as the author. * * This program is free software; you may redistribute and/or modify it * * under the terms of the GNU General Public License as published by the * diff --git a/src/plugins/filedelete/filedelete.cpp b/src/plugins/filedelete/filedelete.cpp index 4486bd4b4..cc74095df 100644 --- a/src/plugins/filedelete/filedelete.cpp +++ b/src/plugins/filedelete/filedelete.cpp @@ -189,8 +189,8 @@ static void extract_ca_file(filedelete *f, drakvuf_t drakvuf, vmi_instance_t vmi if ( VMI_FAILURE == vmi_read_addr(vmi, ctx, &test) || test != control_area ) break; - addr_t base; - uint32_t ptes, start; + addr_t base = 0, start = 0; + uint32_t ptes = 0; ctx->addr = subsection + f->offsets[SUBSECTION_SUBSECTIONBASE]; if ( VMI_FAILURE == vmi_read_addr(vmi, ctx, &base) ) @@ -204,7 +204,7 @@ static void extract_ca_file(filedelete *f, drakvuf_t drakvuf, vmi_instance_t vmi break; ctx->addr = subsection + f->offsets[SUBSECTION_STARTINGSECTOR]; - if ( VMI_FAILURE == vmi_read_32(vmi, ctx, &start) ) + if ( VMI_FAILURE == vmi_read_32(vmi, ctx, (uint32_t*)&start) ) break; /* @@ -230,8 +230,8 @@ static void extract_ca_file(filedelete *f, drakvuf_t drakvuf, vmi_instance_t vmi if ( 4096 != vmi_read_pa(vmi, VMI_BIT_MASK(12,48) & pte, page, 4096) ) continue; - fseek ( fp , fileoffset , SEEK_SET ); - fwrite(page, 4096, 1, fp); + if ( !fseek ( fp , fileoffset , SEEK_SET ) ) + fwrite(page, 4096, 1, fp); } } diff --git a/src/plugins/poolmon/poolmon.cpp b/src/plugins/poolmon/poolmon.cpp index 6821d9069..a42f0dd0b 100644 --- a/src/plugins/poolmon/poolmon.cpp +++ b/src/plugins/poolmon/poolmon.cpp @@ -140,6 +140,7 @@ static event_response_t cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { page_mode_t pm = vmi_get_page_mode(vmi, 0); reg_t pool_type, size; char tag[5] = { [0 ... 4] = '\0' }; + struct pooltag *s = NULL; access_context_t ctx; ctx.translate_mechanism = VMI_TM_PROCESS_DTB; @@ -151,14 +152,19 @@ static event_response_t cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { *(reg_t*)tag = info->regs->r8; } else { ctx.addr = info->regs->rsp+12; - vmi_read_32(vmi, &ctx, (uint32_t*)tag); + if ( VMI_FAILURE == vmi_read_32(vmi, &ctx, (uint32_t*)tag) ) + goto done; + ctx.addr = info->regs->rsp+8; - vmi_read_32(vmi, &ctx, (uint32_t*)&size); + if ( VMI_FAILURE == vmi_read_32(vmi, &ctx, (uint32_t*)&size) ) + goto done; + ctx.addr = info->regs->rsp+4; - vmi_read_32(vmi, &ctx, (uint32_t*)&pool_type); + if ( VMI_FAILURE == vmi_read_32(vmi, &ctx, (uint32_t*)&pool_type) ) + goto done; } - struct pooltag *s = (struct pooltag*)g_tree_lookup(p->pooltag_tree, tag); + s = (struct pooltag*)g_tree_lookup(p->pooltag_tree, tag); switch(p->format) { case OUTPUT_CSV: @@ -184,6 +190,7 @@ static event_response_t cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { printf("\n"); +done: drakvuf_release_vmi(drakvuf); return 0; } diff --git a/src/plugins/socketmon/socketmon.cpp b/src/plugins/socketmon/socketmon.cpp index 600920465..03d3435f9 100644 --- a/src/plugins/socketmon/socketmon.cpp +++ b/src/plugins/socketmon/socketmon.cpp @@ -1158,6 +1158,9 @@ static event_response_t tcpl_cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { drakvuf_release_vmi(drakvuf); + if ( !w->obj ) + return 0; + drakvuf_trap_t *trap = (drakvuf_trap_t*)g_malloc0(sizeof(drakvuf_trap_t)); trap->breakpoint.lookup_type = LOOKUP_PID; trap->breakpoint.pid = 4; @@ -1198,6 +1201,9 @@ static event_response_t udpb_cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { drakvuf_release_vmi(drakvuf); + if ( !w->obj ) + return 0; + drakvuf_trap_t *trap = (drakvuf_trap_t*)g_malloc0(sizeof(drakvuf_trap_t)); trap->breakpoint.lookup_type = LOOKUP_PID; trap->breakpoint.pid = 4; diff --git a/src/plugins/socketmon/socketmon.h b/src/plugins/socketmon/socketmon.h index d2c69259d..d72fe05d5 100644 --- a/src/plugins/socketmon/socketmon.h +++ b/src/plugins/socketmon/socketmon.h @@ -123,8 +123,6 @@ class socketmon: public plugin { .data = (void*)this } }; - GSList *writetraps; - GHashTable *rettraps; socketmon(drakvuf_t drakvuf, const void *config, output_format_t output); ~socketmon(); diff --git a/src/plugins/syscalls/syscalls.cpp b/src/plugins/syscalls/syscalls.cpp index 13a14925f..ae86bfb36 100644 --- a/src/plugins/syscalls/syscalls.cpp +++ b/src/plugins/syscalls/syscalls.cpp @@ -174,7 +174,7 @@ static unicode_string_t* get_filename_from_handle(syscalls *s, } static event_response_t win_cb(drakvuf_t drakvuf, drakvuf_trap_info_t *info) { - int i = 0, nargs = 0; + unsigned int i = 0, nargs = 0; size_t size = 0; unsigned char* buf = NULL; // pointer to buffer to hold argument values