summaryrefslogtreecommitdiffstats
path: root/sys/boot/common
diff options
context:
space:
mode:
authorbrucec <brucec@FreeBSD.org>2011-02-23 17:17:05 +0000
committerbrucec <brucec@FreeBSD.org>2011-02-23 17:17:05 +0000
commit94fe6c80c71b0f8789aa55d2fd321d78e264b0f3 (patch)
tree4d9932fd6f6e0fc975405df1221be98394162b2a /sys/boot/common
parent05f2685017a9f4f98dd2e2ea77feae637e16e5fa (diff)
downloadFreeBSD-src-94fe6c80c71b0f8789aa55d2fd321d78e264b0f3.zip
FreeBSD-src-94fe6c80c71b0f8789aa55d2fd321d78e264b0f3.tar.gz
Handle memory allocation failures in include().
PR: i386/85652 Submitted by: Ben Thomas <bthomas at virtualiron.com> MFC after: 3 days
Diffstat (limited to 'sys/boot/common')
-rw-r--r--sys/boot/common/interp.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/boot/common/interp.c b/sys/boot/common/interp.c
index b9343a6..a9370d9 100644
--- a/sys/boot/common/interp.c
+++ b/sys/boot/common/interp.c
@@ -246,6 +246,17 @@ include(const char *filename)
if (*cp == '\0')
continue; /* ignore empty line, save memory */
sp = malloc(sizeof(struct includeline) + strlen(cp) + 1);
+ /* On malloc failure (it happens!), free as much as possible and exit */
+ if (sp == NULL) {
+ while (script != NULL) {
+ se = script;
+ script = script->next;
+ free(se);
+ }
+ sprintf(command_errbuf, "file '%s' line %d: memory allocation "
+ "failure - aborting\n", filename, line);
+ return (CMD_ERROR);
+ }
strcpy(sp->text, cp);
#ifndef BOOT_FORTH
sp->flags = flags;
OpenPOWER on IntegriCloud