lkml.org 
[lkml]   [2010]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch] drm: sysfs files error handling

    In the original code we used "j" as an iterator but we used "i" as an
    index.

    - for (j = 0; j < i; j++)
    - device_remove_file(&connector->kdev,
    - &connector_attrs[i]);

    Smatch complained about that because "i" was potentially passed the end
    of the array. Which makes sense if we should be using "j" there.

    I also thought that we should remove the files for &connector_attrs_opt1
    but to do that I had to add separate iterators for &connector_attrs and
    &connector_attrs_opt1.

    Signed-off-by: Dan Carpenter <error27@gmail.com>
    ---
    Found by static analysis and compile tested only.

    diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
    index 014ce24..f144487 100644
    --- a/drivers/gpu/drm/drm_sysfs.c
    +++ b/drivers/gpu/drm/drm_sysfs.c
    @@ -353,7 +353,10 @@ static struct bin_attribute edid_attr = {
    int drm_sysfs_connector_add(struct drm_connector *connector)
    {
    struct drm_device *dev = connector->dev;
    - int ret = 0, i, j;
    + int attr_cnt = 0;
    + int opt_cnt = 0;
    + int i;
    + int ret = 0;

    /* We shouldn't get called more than once for the same connector */
    BUG_ON(device_is_registered(&connector->kdev));
    @@ -376,8 +379,8 @@ int drm_sysfs_connector_add(struct drm_connector *connector)

    /* Standard attributes */

    - for (i = 0; i < ARRAY_SIZE(connector_attrs); i++) {
    - ret = device_create_file(&connector->kdev, &connector_attrs[i]);
    + for (attr_cnt = 0; attr_cnt < ARRAY_SIZE(connector_attrs); attr_cnt++) {
    + ret = device_create_file(&connector->kdev, &connector_attrs[attr_cnt]);
    if (ret)
    goto err_out_files;
    }
    @@ -393,8 +396,8 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
    case DRM_MODE_CONNECTOR_SVIDEO:
    case DRM_MODE_CONNECTOR_Component:
    case DRM_MODE_CONNECTOR_TV:
    - for (i = 0; i < ARRAY_SIZE(connector_attrs_opt1); i++) {
    - ret = device_create_file(&connector->kdev, &connector_attrs_opt1[i]);
    + for (opt_cnt = 0; opt_cnt < ARRAY_SIZE(connector_attrs_opt1); opt_cnt++) {
    + ret = device_create_file(&connector->kdev, &connector_attrs_opt1[opt_cnt]);
    if (ret)
    goto err_out_files;
    }
    @@ -413,10 +416,10 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
    return 0;

    err_out_files:
    - if (i > 0)
    - for (j = 0; j < i; j++)
    - device_remove_file(&connector->kdev,
    - &connector_attrs[i]);
    + for (i = 0; i < opt_cnt; i++)
    + device_remove_file(&connector->kdev, &connector_attrs_opt1[i]);
    + for (i = 0; i < attr_cnt; i++)
    + device_remove_file(&connector->kdev, &connector_attrs[i]);
    device_unregister(&connector->kdev);

    out:

    \
     
     \ /
      Last update: 2010-03-28 13:27    [W:0.024 / U:0.288 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site