of: unittest: initialize args before calling of_*parse_*()
authorFrank Rowand <frank.rowand@sony.com>
Fri, 5 Oct 2018 03:40:21 +0000 (20:40 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 1 Dec 2019 08:17:30 +0000 (09:17 +0100)
[ Upstream commit eeb07c573ec307c53fe2f6ac6d8d11c261f64006 ]

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: Guenter Roeck <linux@roeck-us.net>
Tested-by: Alan Tull <atull@kernel.org>
Signed-off-by: Frank Rowand <frank.rowand@sony.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/of/unittest.c

index e8997cd..68f5296 100644 (file)
@@ -375,6 +375,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
        for (i = 0; i < 8; i++) {
                bool passed = true;
 
+               memset(&args, 0, sizeof(args));
                rc = of_parse_phandle_with_args(np, "phandle-list",
                                                "#phandle-cells", i, &args);
 
@@ -428,6 +429,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
        }
 
        /* Check for missing list property */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args(np, "phandle-list-missing",
                                        "#phandle-cells", 0, &args);
        unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
@@ -436,6 +438,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
        unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
 
        /* Check for missing cells property */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args(np, "phandle-list",
                                        "#phandle-cells-missing", 0, &args);
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
@@ -444,6 +447,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
 
        /* Check for bad phandle in list */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args(np, "phandle-list-bad-phandle",
                                        "#phandle-cells", 0, &args);
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
@@ -452,6 +456,7 @@ static void __init of_unittest_parse_phandle_with_args(void)
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
 
        /* Check for incorrectly formed argument list */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args(np, "phandle-list-bad-args",
                                        "#phandle-cells", 1, &args);
        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)
        for (i = 0; i < 8; i++) {
                bool passed = true;
 
+               memset(&args, 0, sizeof(args));
                rc = of_parse_phandle_with_args_map(np, "phandle-list",
                                                    "phandle", i, &args);
 
@@ -559,21 +565,25 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
        }
 
        /* Check for missing list property */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args_map(np, "phandle-list-missing",
                                            "phandle", 0, &args);
        unittest(rc == -ENOENT, "expected:%i got:%i\n", -ENOENT, rc);
 
        /* Check for missing cells,map,mask property */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args_map(np, "phandle-list",
                                            "phandle-missing", 0, &args);
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
 
        /* Check for bad phandle in list */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-phandle",
                                            "phandle", 0, &args);
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
 
        /* Check for incorrectly formed argument list */
+       memset(&args, 0, sizeof(args));
        rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-args",
                                            "phandle", 1, &args);
        unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
@@ -783,7 +793,7 @@ static void __init of_unittest_parse_interrupts(void)
        for (i = 0; i < 4; i++) {
                bool passed = true;
 
-               args.args_count = 0;
+               memset(&args, 0, sizeof(args));
                rc = of_irq_parse_one(np, i, &args);
 
                passed &= !rc;
@@ -804,7 +814,7 @@ static void __init of_unittest_parse_interrupts(void)
        for (i = 0; i < 4; i++) {
                bool passed = true;
 
-               args.args_count = 0;
+               memset(&args, 0, sizeof(args));
                rc = of_irq_parse_one(np, i, &args);
 
                /* Test the values from tests-phandle.dtsi */
@@ -860,6 +870,7 @@ static void __init of_unittest_parse_interrupts_extended(void)
        for (i = 0; i < 7; i++) {
                bool passed = true;
 
+               memset(&args, 0, sizeof(args));
                rc = of_irq_parse_one(np, i, &args);
 
                /* Test the values from tests-phandle.dtsi */