Commit 367e64ce authored by Frank Rowand's avatar Frank Rowand Committed by Greg Kroah-Hartman

of: unittest: initialize args before calling of_*parse_*()

[ Upstream commit eeb07c57 ]

Callers of of_irq_parse_one() blindly use the pointer args.np
without checking whether of_irq_parse_one() had an error and
thus did not set the value of args.np.  Initialize args to
zero so that using the format "%pOF" to show the value of
args.np will show "(null)" when of_irq_parse_one() has an
error.  This prevents the dereference of a random value.

Make the same fix for callers of of_parse_phandle_with_args()
and of_parse_phandle_with_args_map().
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Tested-by: default avatarAlan Tull <atull@kernel.org>
Signed-off-by: default avatarFrank Rowand <frank.rowand@sony.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent e4547e02
...@@ -375,6 +375,7 @@ static void __init of_unittest_parse_phandle_with_args(void) ...@@ -375,6 +375,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
bool passed = true; bool passed = true;
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args(np, "phandle-list", rc = of_parse_phandle_with_args(np, "phandle-list",
"#phandle-cells", i, &args); "#phandle-cells", i, &args);
...@@ -428,6 +429,7 @@ static void __init of_unittest_parse_phandle_with_args(void) ...@@ -428,6 +429,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
} }
/* Check for missing list property */ /* Check for missing list property */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args(np, "phandle-list-missing", rc = of_parse_phandle_with_args(np, "phandle-list-missing",
"#phandle-cells", 0, &args); "#phandle-cells", 0, &args);
unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc); unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
...@@ -436,6 +438,7 @@ static void __init of_unittest_parse_phandle_with_args(void) ...@@ -436,6 +438,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc); unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
/* Check for missing cells property */ /* Check for missing cells property */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args(np, "phandle-list", rc = of_parse_phandle_with_args(np, "phandle-list",
"#phandle-cells-missing", 0, &args); "#phandle-cells-missing", 0, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
...@@ -444,6 +447,7 @@ static void __init of_unittest_parse_phandle_with_args(void) ...@@ -444,6 +447,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
/* Check for bad phandle in list */ /* Check for bad phandle in list */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args(np, "phandle-list-bad-phandle", rc = of_parse_phandle_with_args(np, "phandle-list-bad-phandle",
"#phandle-cells", 0, &args); "#phandle-cells", 0, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
...@@ -452,6 +456,7 @@ static void __init of_unittest_parse_phandle_with_args(void) ...@@ -452,6 +456,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
/* Check for incorrectly formed argument list */ /* Check for incorrectly formed argument list */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args(np, "phandle-list-bad-args", rc = of_parse_phandle_with_args(np, "phandle-list-bad-args",
"#phandle-cells", 1, &args); "#phandle-cells", 1, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
...@@ -502,6 +507,7 @@ static void __init of_unittest_parse_phandle_with_args_map(void) ...@@ -502,6 +507,7 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
bool passed = true; bool passed = true;
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args_map(np, "phandle-list", rc = of_parse_phandle_with_args_map(np, "phandle-list",
"phandle", i, &args); "phandle", i, &args);
...@@ -559,21 +565,25 @@ static void __init of_unittest_parse_phandle_with_args_map(void) ...@@ -559,21 +565,25 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
} }
/* Check for missing list property */ /* Check for missing list property */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args_map(np, "phandle-list-missing", rc = of_parse_phandle_with_args_map(np, "phandle-list-missing",
"phandle", 0, &args); "phandle", 0, &args);
unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc); unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
/* Check for missing cells,map,mask property */ /* Check for missing cells,map,mask property */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args_map(np, "phandle-list", rc = of_parse_phandle_with_args_map(np, "phandle-list",
"phandle-missing", 0, &args); "phandle-missing", 0, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
/* Check for bad phandle in list */ /* Check for bad phandle in list */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-phandle", rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-phandle",
"phandle", 0, &args); "phandle", 0, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
/* Check for incorrectly formed argument list */ /* Check for incorrectly formed argument list */
memset(&args, 0, sizeof(args));
rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-args", rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-args",
"phandle", 1, &args); "phandle", 1, &args);
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc); unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
...@@ -783,7 +793,7 @@ static void __init of_unittest_parse_interrupts(void) ...@@ -783,7 +793,7 @@ static void __init of_unittest_parse_interrupts(void)
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
bool passed = true; bool passed = true;
args.args_count = 0; memset(&args, 0, sizeof(args));
rc = of_irq_parse_one(np, i, &args); rc = of_irq_parse_one(np, i, &args);
passed &= !rc; passed &= !rc;
...@@ -804,7 +814,7 @@ static void __init of_unittest_parse_interrupts(void) ...@@ -804,7 +814,7 @@ static void __init of_unittest_parse_interrupts(void)
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
bool passed = true; bool passed = true;
args.args_count = 0; memset(&args, 0, sizeof(args));
rc = of_irq_parse_one(np, i, &args); rc = of_irq_parse_one(np, i, &args);
/* Test the values from tests-phandle.dtsi */ /* Test the values from tests-phandle.dtsi */
...@@ -860,6 +870,7 @@ static void __init of_unittest_parse_interrupts_extended(void) ...@@ -860,6 +870,7 @@ static void __init of_unittest_parse_interrupts_extended(void)
for (i = 0; i < 7; i++) { for (i = 0; i < 7; i++) {
bool passed = true; bool passed = true;
memset(&args, 0, sizeof(args));
rc = of_irq_parse_one(np, i, &args); rc = of_irq_parse_one(np, i, &args);
/* Test the values from tests-phandle.dtsi */ /* Test the values from tests-phandle.dtsi */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment