lkml.org 
[lkml]   [2018]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 18/18] of: unittest: initialize args before calling of_*parse_*()
    Date
    From: Frank Rowand <frank.rowand@sony.com>

    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>
    Signed-off-by: Frank Rowand <frank.rowand@sony.com>
    ---
    drivers/of/unittest.c | 15 +++++++++++++--
    1 file changed, 13 insertions(+), 2 deletions(-)

    diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
    index 785985bdbfa6..5f4db23e4752 100644
    --- a/drivers/of/unittest.c
    +++ b/drivers/of/unittest.c
    @@ -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);
    @@ -780,7 +790,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;
    @@ -801,7 +811,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 */
    @@ -854,6 +864,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 */
    --
    Frank Rowand <frank.rowand@sony.com>
    \
     
     \ /
      Last update: 2018-10-15 02:27    [W:6.109 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site