diff options
author | Juliusz Chroboczek <jch@pps.univ-paris-diderot.fr> | 2015-06-26 00:23:33 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2015-07-06 23:16:47 +0200 |
commit | 8f33afd87f118bfea52f50f7787843b694a38e72 (patch) | |
tree | 1c878a02ec1f37d878734eb8c6c39a8643090e19 | |
parent | c5cdda8f73aa99e4ec242e6980a1138c641d3614 (diff) | |
download | unitd-8f33afd87f118bfea52f50f7787843b694a38e72.tar unitd-8f33afd87f118bfea52f50f7787843b694a38e72.zip |
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.
-rw-r--r-- | rcS.c | 9 | ||||
-rw-r--r-- | system.c | 5 |
2 files changed, 14 insertions, 0 deletions
@@ -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)) { @@ -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 '\'': |