lkml.org 
[lkml]   [2020]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5] staging: atomisp: move null check to earlier point
    Date
    `find_gmin_subdev()` that returns a pointer to `struct
    gmin_subdev` can return NULL.

    In `gmin_v2p8_ctrl()` there's a call to this function but the
    possibility of a NULL was not checked before its being dereferenced,
    i.e.:

    /* Acquired here --------v */
    struct gmin_subdev *gs = find_gmin_subdev(subdev);

    /* v------Dereferenced here */
    if (gs->v2p8_gpio >= 0) {
    ...
    }

    With this change we're null checking `find_gmin_subdev()` result
    and we return an error if that's the case. We also WARN()
    for the sake of debugging.

    Signed-off-by: Cengiz Can <cengiz@kernel.wtf>
    Reported-by: Coverity Static Analyzer CID 1465536
    Suggested-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Cengiz Can <cengiz@kernel.wtf>
    ---

    Please do note that this change introduces a new return value to
    `gmin_v2p8_ctrl()`.

    [NEW] - raise a WARN and return -ENODEV if there are no subdevices.
    - return result of `gpio_request` or `gpio_direction_output`.
    - return 0 if GPIO is ON.
    - return results of `regulator_enable` or `regulator_disable`.
    - according to PMIC type, return result of `axp_regulator_set`
    or `gmin_i2c_write`.
    - return -EINVAL if unknown PMIC type.

    Patch Changelog:
    v4: Fix minor typo in commit message
    v5: Remove typo from email subject

    drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c b/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
    index 0df46a1af5f0..1ad0246764a6 100644
    --- a/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
    +++ b/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
    @@ -871,6 +871,9 @@ static int gmin_v2p8_ctrl(struct v4l2_subdev *subdev, int on)
    int ret;
    int value;

    + if (WARN_ON(!gs))
    + return -ENODEV;
    +
    if (gs->v2p8_gpio >= 0) {
    pr_info("atomisp_gmin_platform: 2.8v power on GPIO %d\n",
    gs->v2p8_gpio);
    @@ -881,7 +884,7 @@ static int gmin_v2p8_ctrl(struct v4l2_subdev *subdev, int on)
    pr_err("V2P8 GPIO initialization failed\n");
    }

    - if (!gs || gs->v2p8_on == on)
    + if (gs->v2p8_on == on)
    return 0;
    gs->v2p8_on = on;

    --
    2.27.0
    \
     
     \ /
      Last update: 2020-08-02 00:00    [W:2.989 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site