summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--loader2/net.c21
2 files changed, 15 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 59a960c06..73d9e652c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@
* loader2/dietstubs.c: Removed.
+ * loader2/net.c (chooseNetworkInterface): Fix double free() when using
+ a MAC address for ksdevice. Use str2upper() for ksMacAddr.
+
* isys/str.c: Added str2upper() that doesn't use ctype.h or string.h.
* isys/str.h: And the header file.
* isys/Makefile: Added str.o
diff --git a/loader2/net.c b/loader2/net.c
index c0488898b..fb0d1febf 100644
--- a/loader2/net.c
+++ b/loader2/net.c
@@ -19,7 +19,6 @@
*
*/
-#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
@@ -39,6 +38,7 @@
#include "../isys/net.h"
#include "../isys/wireless.h"
#include "../isys/nl.h"
+#include "../isys/str.h"
#include "lang.h"
#include "loader.h"
@@ -1142,7 +1142,7 @@ void setKickstartNetwork(struct loaderData_s * loaderData, int argc,
/* if multiple interfaces get one to use from user. */
/* NOTE - uses kickstart data available in loaderData */
int chooseNetworkInterface(struct loaderData_s * loaderData) {
- int i, j, rc;
+ int i, rc;
unsigned int max = 40;
int deviceNums = 0;
int deviceNum;
@@ -1169,10 +1169,7 @@ int chooseNetworkInterface(struct loaderData_s * loaderData) {
ksMacAddr = strdup(loaderData->netDev);
}
- for (j=0; j<strlen(ksMacAddr); j++) {
- if (ksMacAddr[j] >= 'a' && ksMacAddr[j] <= 'f')
- ksMacAddr[j] = toupper(ksMacAddr[j]);
- }
+ ksMacAddr = str2upper(ksMacAddr);
}
for (i = 0; devs[i]; i++) {
@@ -1198,15 +1195,19 @@ int chooseNetworkInterface(struct loaderData_s * loaderData) {
foundDev = 1;
} else if (ksMacAddr != NULL) {
/* maybe it's a mac address */
- char * devmacaddr;
+ char *devmacaddr = NULL;
devmacaddr = netlink_interfaces_mac2str(devs[i]->device);
if ((devmacaddr != NULL) && !strcmp(ksMacAddr, devmacaddr)) {
foundDev = 1;
free(loaderData->netDev);
loaderData->netDev = devs[i]->device;
+ } else {
+ free(ksMacAddr);
+ }
+
+ if (devmacaddr != NULL) {
+ free(devmacaddr);
}
- free(ksMacAddr);
- free(devmacaddr);
}
}
}
@@ -1330,3 +1331,5 @@ int kickstartNetworkUp(struct loaderData_s * loaderData,
return 0;
}
+
+/* vim:set shiftwidth=4 softtabstop=4: */