Module Name: src
Committed By: knakahara
Date: Fri Aug 5 06:58:55 UTC 2016
Modified Files:
src/usr.sbin/intrctl: intrctl_io.c
Log Message:
fix CID 1364766: Resource leaks
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/intrctl/intrctl_io.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/intrctl/intrctl_io.c
diff -u src/usr.sbin/intrctl/intrctl_io.c:1.2 src/usr.sbin/intrctl/intrctl_io.c:1.3
--- src/usr.sbin/intrctl/intrctl_io.c:1.2 Wed Aug 3 08:28:09 2016
+++ src/usr.sbin/intrctl/intrctl_io.c Fri Aug 5 06:58:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $ */
+/* $NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $ */
/*
* Copyright (c) 2015 Internet Initiative Japan Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $");
+__RCSID("$NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $");
#include <sys/sysctl.h>
#include <sys/intrio.h>
@@ -47,16 +47,16 @@ intrctl_io_alloc(int retry)
{
size_t buf_size;
int i, error;
- void *buf;
+ void *buf = NULL;
error = sysctlbyname("kern.intr.list", NULL, &buf_size, NULL, 0);
if (error < 0) {
- return NULL;
+ goto error;
}
buf = malloc(buf_size);
if (buf == NULL) {
- return NULL;
+ goto error;
}
for (i = 0; i < retry; i++) {
@@ -68,15 +68,16 @@ intrctl_io_alloc(int retry)
temp = realloc(buf, buf_size);
if (temp == NULL) {
- free(buf);
- return NULL;
+ goto error;
}
buf = temp;
} else {
- free(buf);
- return NULL;
+ goto error;
}
}
+error:
+ if (buf != NULL)
+ free(buf);
return NULL;
}