diff options
author | brian <brian@FreeBSD.org> | 2004-10-11 09:45:58 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2004-10-11 09:45:58 +0000 |
commit | fb00aab954e0483b6b03b584ff7e684cb31df938 (patch) | |
tree | 3639860937ba7fdc883bbc6b4968e1c1e97bbc2b /usr.sbin/ppp/datalink.c | |
parent | 5d60192ca70f44f0e6653255811355c5ab39757a (diff) | |
download | FreeBSD-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.c | 20 |
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; |