aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Andreas Ericsson <ae@op5.se> 2012-11-02 14:51:09 +0100
committerGravatar Thomas Guyot-Sionnest <dermoth@aei.ca> 2012-11-02 22:25:37 -0400
commit364ce21b1048d1125b8d3fd6744661ab581d08c7 (patch)
tree7450e9bd2d1ee3b0ae4c90e496e9fa28985b3763 /lib
parentbd782990566eec91b8312cfc2765a7e2bd9e67da (diff)
downloadmonitoring-plugins-364ce21b1048d1125b8d3fd6744661ab581d08c7.tar.gz
lib/utils_base.c: Stop dumping core on bad args to check_snmp
Since the state patch introduction, we've been freeing uninitialized memory in lib/utils_base.c::np_cleanup(), which caused coredumps with check_snmp when illegal threshold ranges (for example) were passed, or when we called 'die' without having read any state. This patch fixes it by replacing the malloc() calls in there (all of them, since using malloc() is almost always an error) with calloc(). malloc() either doesn't initialize the memory at all, or taints it with a special marker so it can tell us when we're free()'ing memory that hasn't been initialized. calloc() explicitly initializes the allocated memory to nul bytes, which is a zero-cost operation when we get the memory from the kernel (which alread does that) and almost always desirable everywhere else. Signed-off-by: Andreas Ericsson <ae@op5.se>
Diffstat (limited to 'lib')
-rw-r--r--lib/utils_base.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/utils_base.c b/lib/utils_base.c
index 1f705d97..c93e9c3c 100644
--- a/lib/utils_base.c
+++ b/lib/utils_base.c
@@ -35,7 +35,7 @@ nagios_plugin *this_nagios_plugin=NULL;
void np_init( char *plugin_name, int argc, char **argv ) {
if (this_nagios_plugin==NULL) {
- this_nagios_plugin = malloc(sizeof(nagios_plugin));
+ this_nagios_plugin = calloc(1, sizeof(nagios_plugin));
if (this_nagios_plugin==NULL) {
die(STATE_UNKNOWN, _("Cannot allocate memory: %s"),
strerror(errno));
@@ -108,7 +108,7 @@ range
double end;
char *end_str;
- temp_range = (range *) malloc(sizeof(range));
+ temp_range = (range *) calloc(1, sizeof(range));
/* Set defaults */
temp_range->start = 0;
@@ -154,7 +154,7 @@ _set_thresholds(thresholds **my_thresholds, char *warn_string, char *critical_st
{
thresholds *temp_thresholds = NULL;
- if ((temp_thresholds = malloc(sizeof(thresholds))) == NULL)
+ if ((temp_thresholds = calloc(1, sizeof(thresholds))) == NULL)
die(STATE_UNKNOWN, _("Cannot allocate memory: %s"),
strerror(errno));
@@ -335,13 +335,13 @@ char *np_extract_value(const char *varlist, const char *name, char sep) {
if (tmp = index(varlist, sep)) {
/* Value is delimited by a comma */
if (tmp-varlist == 0) continue;
- value = (char *)malloc(tmp-varlist+1);
+ value = (char *)calloc(1, tmp-varlist+1);
strncpy(value, varlist, tmp-varlist);
value[tmp-varlist] = '\0';
} else {
/* Value is delimited by a \0 */
if (strlen(varlist) == 0) continue;
- value = (char *)malloc(strlen(varlist) + 1);
+ value = (char *)calloc(1, strlen(varlist) + 1);
strncpy(value, varlist, strlen(varlist));
value[strlen(varlist)] = '\0';
}
@@ -431,7 +431,7 @@ void np_enable_state(char *keyname, int expected_data_version) {
if(this_nagios_plugin==NULL)
die(STATE_UNKNOWN, _("This requires np_init to be called"));
- this_state = (state_key *) malloc(sizeof(state_key));
+ this_state = (state_key *) calloc(1, sizeof(state_key));
if(this_state==NULL)
die(STATE_UNKNOWN, _("Cannot allocate memory: %s"),
strerror(errno));
@@ -482,7 +482,7 @@ state_data *np_state_read() {
statefile = fopen( this_nagios_plugin->state->_filename, "r" );
if(statefile!=NULL) {
- this_state_data = (state_data *) malloc(sizeof(state_data));
+ this_state_data = (state_data *) calloc(1, sizeof(state_data));
if(this_state_data==NULL)
die(STATE_UNKNOWN, _("Cannot allocate memory: %s"),
strerror(errno));
@@ -517,7 +517,7 @@ int _np_state_read_file(FILE *f) {
time(&current_time);
/* Note: This introduces a limit of 1024 bytes in the string data */
- line = (char *) malloc(1024);
+ line = (char *) calloc(1, 1024);
if(line==NULL)
die(STATE_UNKNOWN, _("Cannot allocate memory: %s"),
strerror(errno));