Fixup array1dTo2d and print utilities.
- The mananer in which handled nonzero rows and zero columns were
incompatible, resulting field crash.
- There was no handling of malloc failures.
Bug: 138535981
Test: Run Dumpstate commands.
Change-Id: Iaf3fbf9377ab9da519f759015b4493f0e35e6836
Signed-off-by: Harpreet "Eli" Sangha <eliptus@google.com>
diff --git a/fts_lib/ftsTool.c b/fts_lib/ftsTool.c
index de51a8f..6a3f7c5 100644
--- a/fts_lib/ftsTool.c
+++ b/fts_lib/ftsTool.c
@@ -355,22 +355,22 @@
int i;
short **matrix = NULL;
- if (size == 0) {
- matrix = (short **)kmalloc_array(1,
- sizeof(short *), GFP_KERNEL);
- matrix[0] = (short *)kmalloc_array(0,
- sizeof(short), GFP_KERNEL);
- } else {
+ if (size != 0)
matrix = (short **)kmalloc_array(((int)(size / columns)),
sizeof(short *), GFP_KERNEL);
- if (matrix != NULL) {
- for (i = 0; i < (int)(size / columns); i++)
- matrix[i] = (short *)kmalloc_array(columns,
- sizeof(short), GFP_KERNEL);
+ if (matrix != NULL) {
+ for (i = 0; i < (int)(size / columns); i++) {
+ matrix[i] = (short *)kmalloc_array(columns,
+ sizeof(short), GFP_KERNEL);
+ if (!matrix[i])
+ break;
+ }
- for (i = 0; i < size; i++)
- matrix[i / columns][i % columns] = data[i];
+ for (i = 0; i < size; i++) {
+ if (!matrix[i / columns])
+ break;
+ matrix[i / columns][i % columns] = data[i];
}
}
@@ -391,20 +391,22 @@
int i;
u16 **matrix = NULL;
- if (size == 0) {
- matrix = (u16 **)kmalloc_array(1, sizeof(u16 *), GFP_KERNEL);
- matrix[0] = (u16 *)kmalloc_array(0, sizeof(u16), GFP_KERNEL);
- } else {
+ if (size != 0)
matrix = (u16 **)kmalloc_array(((int)(size / columns)),
sizeof(u16 *), GFP_KERNEL);
- if (matrix != NULL) {
- for (i = 0; i < (int)(size / columns); i++)
- matrix[i] = (u16 *)kmalloc_array(columns,
- sizeof(u16), GFP_KERNEL);
+ if (matrix != NULL) {
+ for (i = 0; i < (int)(size / columns); i++) {
+ matrix[i] = (u16 *)kmalloc_array(columns,
+ sizeof(u16), GFP_KERNEL);
+ if (!matrix[i])
+ break;
+ }
- for (i = 0; i < size; i++)
- matrix[i / columns][i % columns] = data[i];
+ for (i = 0; i < size; i++) {
+ if (!matrix[i / columns])
+ break;
+ matrix[i / columns][i % columns] = data[i];
}
}
@@ -425,22 +427,23 @@
int i;
u8 **matrix = NULL;
- if (size == 0) {
- matrix = (u8 **)kmalloc_array(1, sizeof(u8 *), GFP_KERNEL);
-
- matrix[0] = (u8 *)kmalloc_array(0, sizeof(u8), GFP_KERNEL);
- } else {
-
+ if (size != 0) {
matrix = (u8 **)kmalloc_array(((int)(size / columns)),
sizeof(u8 *), GFP_KERNEL);
+ }
- if (matrix != NULL) {
- for (i = 0; i < (int)(size / columns); i++)
- matrix[i] = (u8 *)kmalloc_array(columns,
- sizeof(u8), GFP_KERNEL);
+ if (matrix != NULL) {
+ for (i = 0; i < (int)(size / columns); i++) {
+ matrix[i] = (u8 *)kmalloc_array(columns,
+ sizeof(u8), GFP_KERNEL);
+ if (!matrix[i])
+ break;
+ }
- for (i = 0; i < size; i++)
- matrix[i / columns][i % columns] = data[i];
+ for (i = 0; i < size; i++) {
+ if (!matrix[i / columns])
+ break;
+ matrix[i / columns][i % columns] = data[i];
}
}
@@ -461,20 +464,22 @@
int i;
i8 **matrix = NULL;
- if (size == 0) {
- matrix = (i8 **)kmalloc_array(1, sizeof(i8 *), GFP_KERNEL);
- matrix[0] = (i8 *)kmalloc_array(0, sizeof(i8), GFP_KERNEL);
- } else {
+ if (size != 0)
matrix = (i8 **)kmalloc_array(((int)(size / columns)),
sizeof(i8 *), GFP_KERNEL);
- if (matrix != NULL) {
- for (i = 0; i < (int)(size / columns); i++)
- matrix[i] = (i8 *)kmalloc_array(columns,
- sizeof(i8), GFP_KERNEL);
+ if (matrix != NULL) {
+ for (i = 0; i < (int)(size / columns); i++) {
+ matrix[i] = (i8 *)kmalloc_array(columns,
+ sizeof(i8), GFP_KERNEL);
+ if (!matrix[i])
+ break;
+ }
- for (i = 0; i < size; i++)
- matrix[i / columns][i % columns] = data[i];
+ for (i = 0; i < size; i++) {
+ if (!matrix[i / columns])
+ break;
+ matrix[i / columns][i % columns] = data[i];
}
}
@@ -495,6 +500,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (6 + 1) * column + 1; /* -32768 str len: 6 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -502,8 +512,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,
@@ -529,6 +540,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (5 + 1) * column + 1; /* 65535 str len: 5 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -536,8 +552,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,
@@ -563,6 +580,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (3 + 1) * column + 1; /* 255 str len: 3 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -570,8 +592,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,
@@ -597,6 +620,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (4 + 1) * column + 1; /* -128 str len: 4 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -604,8 +632,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,
@@ -631,6 +660,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (10 + 1) * column + 1; /* 4294967295 str len: 10 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -638,8 +672,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,
@@ -665,6 +700,11 @@
int buff_len, index;
char *buff;
+ pr_info("%s\n", label);
+
+ if (matrix == NULL)
+ return;
+
buff_len = (11 + 1) * column + 1; /* -2147483648 str len: 11 */
buff = kzalloc(buff_len, GFP_KERNEL);
if (buff == NULL) {
@@ -672,8 +712,9 @@
return;
}
- pr_info("%s\n", label);
for (i = 0; i < row; i++) {
+ if (!matrix[i])
+ break;
index = 0;
for (j = 0; j < column; j++)
index += scnprintf(buff + index, buff_len - index,