Index: uspace/lib/c/generic/adt/measured_strings.c
===================================================================
--- uspace/lib/c/generic/adt/measured_strings.c	(revision d2b1040aa6dafb6cde9c2fc4584b132d51c3198d)
+++ uspace/lib/c/generic/adt/measured_strings.c	(revision 0a3fbc7aaeecfe45b26ba44ae62268c82c8e623d)
@@ -187,6 +187,11 @@
 				return EINVAL;
 			}
-			ERROR_PROPAGATE(async_data_write_finalize(callid, next,
-			    lengths[index]));
+			if (ERROR_OCCURRED(async_data_write_finalize(callid,
+			    next, lengths[index]))) {
+				free(*data);
+				free(*strings);
+				free(lengths);
+				return ERROR_CODE;
+			}
 			(*strings)[index].value = next;
 			next += lengths[index];
@@ -345,6 +350,11 @@
 		(*strings)[index].length = lengths[index];
 		if (lengths[index] > 0) {
-			ERROR_PROPAGATE(async_data_read_start(phone, next,
-			    lengths[index]));
+			if (ERROR_OCCURRED(async_data_read_start(phone, next,
+			    lengths[index]))) {
+			    	free(lengths);
+				free(data);
+				free(strings);
+				return ERROR_CODE;
+			}
 			(*strings)[index].value = next;
 			next += lengths[index];
