diff options
| author | Dan Carpenter <error27@gmail.com> | 2010-04-27 17:11:05 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-04-28 04:42:52 -0400 |
| commit | a1c4560d4d8909cc4feb6f9e875d0b92083e05cf (patch) | |
| tree | 5fad4d68b80048f95068637c17888d700a47e09e | |
| parent | 0031c41be5c529f8329e327b63cde92ba1284842 (diff) | |
drivers/gpu/drm/drm_sysfs.c: 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>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/drm_sysfs.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index 014ce24761b9..f144487aa5b1 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 = { | |||
| 353 | int drm_sysfs_connector_add(struct drm_connector *connector) | 353 | int drm_sysfs_connector_add(struct drm_connector *connector) |
| 354 | { | 354 | { |
| 355 | struct drm_device *dev = connector->dev; | 355 | struct drm_device *dev = connector->dev; |
| 356 | int ret = 0, i, j; | 356 | int attr_cnt = 0; |
| 357 | int opt_cnt = 0; | ||
| 358 | int i; | ||
| 359 | int ret = 0; | ||
| 357 | 360 | ||
| 358 | /* We shouldn't get called more than once for the same connector */ | 361 | /* We shouldn't get called more than once for the same connector */ |
| 359 | BUG_ON(device_is_registered(&connector->kdev)); | 362 | BUG_ON(device_is_registered(&connector->kdev)); |
| @@ -376,8 +379,8 @@ int drm_sysfs_connector_add(struct drm_connector *connector) | |||
| 376 | 379 | ||
| 377 | /* Standard attributes */ | 380 | /* Standard attributes */ |
| 378 | 381 | ||
| 379 | for (i = 0; i < ARRAY_SIZE(connector_attrs); i++) { | 382 | for (attr_cnt = 0; attr_cnt < ARRAY_SIZE(connector_attrs); attr_cnt++) { |
| 380 | ret = device_create_file(&connector->kdev, &connector_attrs[i]); | 383 | ret = device_create_file(&connector->kdev, &connector_attrs[attr_cnt]); |
| 381 | if (ret) | 384 | if (ret) |
| 382 | goto err_out_files; | 385 | goto err_out_files; |
| 383 | } | 386 | } |
| @@ -393,8 +396,8 @@ int drm_sysfs_connector_add(struct drm_connector *connector) | |||
| 393 | case DRM_MODE_CONNECTOR_SVIDEO: | 396 | case DRM_MODE_CONNECTOR_SVIDEO: |
| 394 | case DRM_MODE_CONNECTOR_Component: | 397 | case DRM_MODE_CONNECTOR_Component: |
| 395 | case DRM_MODE_CONNECTOR_TV: | 398 | case DRM_MODE_CONNECTOR_TV: |
| 396 | for (i = 0; i < ARRAY_SIZE(connector_attrs_opt1); i++) { | 399 | for (opt_cnt = 0; opt_cnt < ARRAY_SIZE(connector_attrs_opt1); opt_cnt++) { |
| 397 | ret = device_create_file(&connector->kdev, &connector_attrs_opt1[i]); | 400 | ret = device_create_file(&connector->kdev, &connector_attrs_opt1[opt_cnt]); |
| 398 | if (ret) | 401 | if (ret) |
| 399 | goto err_out_files; | 402 | goto err_out_files; |
| 400 | } | 403 | } |
| @@ -413,10 +416,10 @@ int drm_sysfs_connector_add(struct drm_connector *connector) | |||
| 413 | return 0; | 416 | return 0; |
| 414 | 417 | ||
| 415 | err_out_files: | 418 | err_out_files: |
| 416 | if (i > 0) | 419 | for (i = 0; i < opt_cnt; i++) |
| 417 | for (j = 0; j < i; j++) | 420 | device_remove_file(&connector->kdev, &connector_attrs_opt1[i]); |
| 418 | device_remove_file(&connector->kdev, | 421 | for (i = 0; i < attr_cnt; i++) |
| 419 | &connector_attrs[i]); | 422 | device_remove_file(&connector->kdev, &connector_attrs[i]); |
| 420 | device_unregister(&connector->kdev); | 423 | device_unregister(&connector->kdev); |
| 421 | 424 | ||
| 422 | out: | 425 | out: |
