[OpenWrt-Devel] [PATCH 2/2] Attempt to deal gracefully with allocation failures.

Juliusz Chroboczek jch at pps.univ-paris-diderot.fr
Thu Jun 25 18:23:33 EDT 2015


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 1e8b676..d9bd4f4 100644
--- a/rcS.c
+++ b/rcS.c
@@ -117,6 +117,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"))
@@ -134,6 +138,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.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list