From 8f33afd87f118bfea52f50f7787843b694a38e72 Mon Sep 17 00:00:00 2001 From: Juliusz Chroboczek Date: Fri, 26 Jun 2015 00:23:33 +0200 Subject: [PATCH] Attempt to deal gracefully with allocation failures. These should probably not happen in practice, but having an explicit error message may make debugging out-of-memory situations easier. --- rcS.c | 9 +++++++++ system.c | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/rcS.c b/rcS.c index 8c72c19..b3e3c22 100644 --- a/rcS.c +++ b/rcS.c @@ -115,6 +115,10 @@ static void add_initd(struct runqueue *q, char *file, char *param) char *p, *f; s = calloc_a(sizeof(*s), &f, strlen(file) + 1, &p, strlen(param) + 1); + if (!s) { + ERROR("Out of memory in %s.\n", file); + return; + } s->proc.task.type = &initd_type; s->proc.task.complete = q_initd_complete; if (!strcmp(param, "stop") || !strcmp(param, "shutdown")) @@ -132,6 +136,11 @@ static int _rc(struct runqueue *q, char *path, const char *file, char *pattern, glob_t gl; int j; + if (!dir) { + ERROR("Out of memory in %s.\n", file); + return -1; + } + DEBUG(2, "running %s/%s%s %s\n", path, file, pattern, param); sprintf(dir, "%s/%s%s", path, file, pattern); if (glob(dir, GLOB_NOESCAPE | GLOB_MARK, NULL, &gl)) { diff --git a/system.c b/system.c index 77111f9..82c672e 100644 --- a/system.c +++ b/system.c @@ -144,6 +144,11 @@ static int system_board(struct ubus_context *ctx, struct ubus_object *obj, continue; dest = blobmsg_alloc_string_buffer(&b, key, strlen(val)); + if (!dest) { + ERROR("Failed to allocate blob.\n"); + continue; + } + while (val && (ch = *(val++)) != 0) { switch (ch) { case '\'': -- 2.11.0