summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/datalink.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2004-10-11 09:45:58 +0000
committerbrian <brian@FreeBSD.org>2004-10-11 09:45:58 +0000
commitfb00aab954e0483b6b03b584ff7e684cb31df938 (patch)
tree3639860937ba7fdc883bbc6b4968e1c1e97bbc2b /usr.sbin/ppp/datalink.c
parent5d60192ca70f44f0e6653255811355c5ab39757a (diff)
downloadFreeBSD-src-fb00aab954e0483b6b03b584ff7e684cb31df938.zip
FreeBSD-src-fb00aab954e0483b6b03b584ff7e684cb31df938.tar.gz
Add a bunch of malloc() return checks
PR: 71592 Submitted by: Dan Lukes <dan@obluda.cz> with further changes
Diffstat (limited to 'usr.sbin/ppp/datalink.c')
-rw-r--r--usr.sbin/ppp/datalink.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c
index c554202..d47b11a 100644
--- a/usr.sbin/ppp/datalink.c
+++ b/usr.sbin/ppp/datalink.c
@@ -80,6 +80,7 @@
static void datalink_LoginDone(struct datalink *);
static void datalink_NewState(struct datalink *, unsigned);
+static char *datalink_NextName(struct datalink *);
static void
datalink_OpenTimeout(void *v)
@@ -1293,7 +1294,7 @@ iov2datalink(struct bundle *bundle, struct iovec *iov, int *niov, int maxiov,
{
struct datalink *dl, *cdl;
struct fsm_retry copy;
- char *oname;
+ char *oname, *pname;
dl = (struct datalink *)iov[(*niov)++].iov_base;
dl->name = iov[*niov].iov_base;
@@ -1309,10 +1310,14 @@ iov2datalink(struct bundle *bundle, struct iovec *iov, int *niov, int maxiov,
do {
for (cdl = bundle->links; cdl; cdl = cdl->next)
if (!strcasecmp(dl->name, cdl->name)) {
- if (oname)
- free(datalink_NextName(dl));
+ if ((pname = datalink_NextName(dl)) == NULL) {
+ for ((*niov)--; *niov < maxiov; (*niov)++)
+ free(iov[*niov].iov_base);
+ return NULL;
+ } else if (oname)
+ free(pname);
else
- oname = datalink_NextName(dl);
+ oname = pname;
break; /* Keep renaming 'till we have no conflicts */
}
} while (cdl);
@@ -1424,14 +1429,17 @@ datalink_Rename(struct datalink *dl, const char *name)
dl->physical->link.name = dl->name = strdup(name);
}
-char *
+static char *
datalink_NextName(struct datalink *dl)
{
int f, n;
char *name, *oname;
n = strlen(dl->name);
- name = (char *)malloc(n+3);
+ if ((name = (char *)malloc(n+3)) == NULL) {
+ log_Printf(LogERROR, "datalink_NextName: Out of memory !\n");
+ return NULL;
+ }
for (f = n - 1; f >= 0; f--)
if (!isdigit(dl->name[f]))
break;
OpenPOWER on IntegriCloud