linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling
@ 2020-05-20 12:00 Dan Carpenter
  2020-05-20 12:05 ` Christian König
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2020-05-20 12:00 UTC (permalink / raw)
  To: Alex Deucher, Kevin Wang
  Cc: Christian König, David Airlie, Daniel Vetter, Evan Quan,
	Rui Huang, Kenneth Feng, Yintian Tao, Hawking Zhang, amd-gfx,
	dri-devel, linux-kernel, kernel-janitors

This loop in the error handling code should start a "i - 1" and end at
"i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
is that it removes one attribute that wasn't created yet, and leaks the
zeroeth attribute.

Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index b75362bf0742..ee4a8e44fbeb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -1931,7 +1931,7 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
 					    uint32_t mask)
 {
 	int ret = 0;
-	uint32_t i = 0;
+	int i;
 
 	for (i = 0; i < counts; i++) {
 		ret = amdgpu_device_attr_create(adev, &attrs[i], mask);
@@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
 	return 0;
 
 failed:
-	for (; i > 0; i--) {
+	while (--i >= 0)
 		amdgpu_device_attr_remove(adev, &attrs[i]);
-	}
 
 	return ret;
 }
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling
  2020-05-20 12:00 [PATCH] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling Dan Carpenter
@ 2020-05-20 12:05 ` Christian König
  2020-05-20 12:52   ` Dan Carpenter
  0 siblings, 1 reply; 8+ messages in thread
From: Christian König @ 2020-05-20 12:05 UTC (permalink / raw)
  To: Dan Carpenter, Alex Deucher, Kevin Wang
  Cc: David Airlie, kernel-janitors, linux-kernel, amd-gfx,
	Hawking Zhang, Rui Huang, dri-devel, Daniel Vetter, Evan Quan,
	Kenneth Feng, Christian König, Yintian Tao

Am 20.05.20 um 14:00 schrieb Dan Carpenter:
> This loop in the error handling code should start a "i - 1" and end at
> "i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
> is that it removes one attribute that wasn't created yet, and leaks the
> zeroeth attribute.
>
> Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> index b75362bf0742..ee4a8e44fbeb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> @@ -1931,7 +1931,7 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
>   					    uint32_t mask)
>   {
>   	int ret = 0;
> -	uint32_t i = 0;
> +	int i;
>   
>   	for (i = 0; i < counts; i++) {
>   		ret = amdgpu_device_attr_create(adev, &attrs[i], mask);
> @@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
>   	return 0;
>   
>   failed:
> -	for (; i > 0; i--) {
> +	while (--i >= 0)

As far as I know the common idiom for this is while (i--) which even 
works without changing the type of i to signed.

Christian.

>   		amdgpu_device_attr_remove(adev, &attrs[i]);
> -	}
>   
>   	return ret;
>   }


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling
  2020-05-20 12:05 ` Christian König
@ 2020-05-20 12:52   ` Dan Carpenter
  2020-05-20 13:08     ` [PATCH v2] " Dan Carpenter
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2020-05-20 12:52 UTC (permalink / raw)
  To: christian.koenig
  Cc: Alex Deucher, Kevin Wang, David Airlie, kernel-janitors,
	linux-kernel, amd-gfx, Hawking Zhang, Rui Huang, dri-devel,
	Daniel Vetter, Evan Quan, Kenneth Feng, Yintian Tao

On Wed, May 20, 2020 at 02:05:19PM +0200, Christian König wrote:
> Am 20.05.20 um 14:00 schrieb Dan Carpenter:
> > This loop in the error handling code should start a "i - 1" and end at
> > "i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
> > is that it removes one attribute that wasn't created yet, and leaks the
> > zeroeth attribute.
> > 
> > Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 5 ++---
> >   1 file changed, 2 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > index b75362bf0742..ee4a8e44fbeb 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > @@ -1931,7 +1931,7 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
> >   					    uint32_t mask)
> >   {
> >   	int ret = 0;
> > -	uint32_t i = 0;
> > +	int i;
> >   	for (i = 0; i < counts; i++) {
> >   		ret = amdgpu_device_attr_create(adev, &attrs[i], mask);
> > @@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
> >   	return 0;
> >   failed:
> > -	for (; i > 0; i--) {
> > +	while (--i >= 0)
> 
> As far as I know the common idiom for this is while (i--) which even works
> without changing the type of i to signed.

It's about 50/50, one way or the other.  To me --i >= 0 seems far more
readable.

I've been trying to figure out which tool tells people to make iterators
unsigned so I can help them avoid it.  :/  I understand how in theory
iterators could go above INT_MAX but if we're going above INT_MAX then
probably we should use a 64 bit type.  There are very few times where 2
billion iterations is not enough but in those situations probably 4
billion is not enough either.  So unsigned int iterators never or seldom
solve real life bugs but they regularly cause them.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling
  2020-05-20 12:52   ` Dan Carpenter
@ 2020-05-20 13:08     ` Dan Carpenter
  2020-05-20 15:23       ` Ruhl, Michael J
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2020-05-20 13:08 UTC (permalink / raw)
  To: Alex Deucher, Kevin Wang
  Cc: Christian König, David Airlie, Daniel Vetter, Evan Quan,
	Rui Huang, Kenneth Feng, Yintian Tao, Hawking Zhang, amd-gfx,
	dri-devel, linux-kernel, kernel-janitors

This loop in the error handling code should start a "i - 1" and end at
"i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
is that it removes one attribute that wasn't created yet, and leaks the
zeroeth attribute.

Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
v2: style change

 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index b75362bf0742..e809534fabd4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
 	return 0;
 
 failed:
-	for (; i > 0; i--) {
+	while (i--)
 		amdgpu_device_attr_remove(adev, &attrs[i]);
-	}
 
 	return ret;
 }

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* RE: [PATCH v2] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling
  2020-05-20 13:08     ` [PATCH v2] " Dan Carpenter
@ 2020-05-20 15:23       ` Ruhl, Michael J
  2020-05-20 15:25         ` [PATCH v3] drm/amdgpu: off by one " Dan Carpenter
  0 siblings, 1 reply; 8+ messages in thread
From: Ruhl, Michael J @ 2020-05-20 15:23 UTC (permalink / raw)
  To: Dan Carpenter, Alex Deucher, Kevin Wang
  Cc: David Airlie, kernel-janitors, linux-kernel, amd-gfx,
	Hawking Zhang, Rui Huang, dri-devel, Evan Quan, Kenneth Feng,
	Christian König, Yintian Tao

"off by on"

or 

"off by one"

?

M

>-----Original Message-----
>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of Dan
>Carpenter
>Sent: Wednesday, May 20, 2020 9:08 AM
>To: Alex Deucher <alexander.deucher@amd.com>; Kevin Wang
><kevin1.wang@amd.com>
>Cc: David Airlie <airlied@linux.ie>; kernel-janitors@vger.kernel.org; linux-
>kernel@vger.kernel.org; amd-gfx@lists.freedesktop.org; Hawking Zhang
><Hawking.Zhang@amd.com>; Rui Huang <ray.huang@amd.com>; dri-
>devel@lists.freedesktop.org; Evan Quan <evan.quan@amd.com>; Kenneth
>Feng <kenneth.feng@amd.com>; Christian König
><christian.koenig@amd.com>; Yintian Tao <yttao@amd.com>
>Subject: [PATCH v2] drm/amdgpu: off by on in
>amdgpu_device_attr_create_groups() error handling
>
>This loop in the error handling code should start a "i - 1" and end at
>"i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
>is that it removes one attribute that wasn't created yet, and leaks the
>zeroeth attribute.
>
>Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
>Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>---
>v2: style change
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>index b75362bf0742..e809534fabd4 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>@@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct
>amdgpu_device *adev,
> 	return 0;
>
> failed:
>-	for (; i > 0; i--) {
>+	while (i--)
> 		amdgpu_device_attr_remove(adev, &attrs[i]);
>-	}
>
> 	return ret;
> }
>_______________________________________________
>dri-devel mailing list
>dri-devel@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3] drm/amdgpu: off by one in amdgpu_device_attr_create_groups() error handling
  2020-05-20 15:23       ` Ruhl, Michael J
@ 2020-05-20 15:25         ` Dan Carpenter
  2020-05-20 15:31           ` Ruhl, Michael J
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2020-05-20 15:25 UTC (permalink / raw)
  To: Alex Deucher, Kevin Wang, Ruhl, Michael J
  Cc: Christian König, David Airlie, Daniel Vetter, Evan Quan,
	Rui Huang, Kenneth Feng, Yintian Tao, Hawking Zhang, amd-gfx,
	dri-devel, linux-kernel, kernel-janitors

This loop in the error handling code should start a "i - 1" and end at
"i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
is that it removes one attribute that wasn't created yet, and leaks the
zeroeth attribute.

Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
v2: style change
v3: Fix embarrassing typo in the subject

 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index b75362bf0742..e809534fabd4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct amdgpu_device *adev,
 	return 0;
 
 failed:
-	for (; i > 0; i--) {
+	while (i--)
 		amdgpu_device_attr_remove(adev, &attrs[i]);
-	}
 
 	return ret;
 }

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* RE: [PATCH v3] drm/amdgpu: off by one in amdgpu_device_attr_create_groups() error handling
  2020-05-20 15:25         ` [PATCH v3] drm/amdgpu: off by one " Dan Carpenter
@ 2020-05-20 15:31           ` Ruhl, Michael J
  2020-05-20 15:32             ` Christian König
  0 siblings, 1 reply; 8+ messages in thread
From: Ruhl, Michael J @ 2020-05-20 15:31 UTC (permalink / raw)
  To: Dan Carpenter, Alex Deucher, Kevin Wang
  Cc: Christian König, David Airlie, Daniel Vetter, Evan Quan,
	Rui Huang, Kenneth Feng, Yintian Tao, Hawking Zhang, amd-gfx,
	dri-devel, linux-kernel, kernel-janitors

>-----Original Message-----
>From: Dan Carpenter <dan.carpenter@oracle.com>
>Sent: Wednesday, May 20, 2020 11:26 AM
>To: Alex Deucher <alexander.deucher@amd.com>; Kevin Wang
><kevin1.wang@amd.com>; Ruhl, Michael J <michael.j.ruhl@intel.com>
>Cc: Christian König <christian.koenig@amd.com>; David Airlie
><airlied@linux.ie>; Daniel Vetter <daniel@ffwll.ch>; Evan Quan
><evan.quan@amd.com>; Rui Huang <ray.huang@amd.com>; Kenneth Feng
><kenneth.feng@amd.com>; Yintian Tao <yttao@amd.com>; Hawking Zhang
><Hawking.Zhang@amd.com>; amd-gfx@lists.freedesktop.org; dri-
>devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel-
>janitors@vger.kernel.org
>Subject: [PATCH v3] drm/amdgpu: off by one in
>amdgpu_device_attr_create_groups() error handling
>
>This loop in the error handling code should start a "i - 1" and end at
>"i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
>is that it removes one attribute that wasn't created yet, and leaks the
>zeroeth attribute.
>
>Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
>Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>---
>v2: style change
>v3: Fix embarrassing typo in the subject

😊

Acked-by: Michael J. Ruhl <michael.j.ruhl@intel.com>

m
> drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>index b75362bf0742..e809534fabd4 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>@@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct
>amdgpu_device *adev,
> 	return 0;
>
> failed:
>-	for (; i > 0; i--) {
>+	while (i--)
> 		amdgpu_device_attr_remove(adev, &attrs[i]);
>-	}
>
> 	return ret;
> }

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] drm/amdgpu: off by one in amdgpu_device_attr_create_groups() error handling
  2020-05-20 15:31           ` Ruhl, Michael J
@ 2020-05-20 15:32             ` Christian König
  0 siblings, 0 replies; 8+ messages in thread
From: Christian König @ 2020-05-20 15:32 UTC (permalink / raw)
  To: Ruhl, Michael J, Dan Carpenter, Alex Deucher, Kevin Wang
  Cc: David Airlie, Daniel Vetter, Evan Quan, Rui Huang, Kenneth Feng,
	Yintian Tao, Hawking Zhang, amd-gfx, dri-devel, linux-kernel,
	kernel-janitors

Am 20.05.20 um 17:31 schrieb Ruhl, Michael J:
>> -----Original Message-----
>> From: Dan Carpenter <dan.carpenter@oracle.com>
>> Sent: Wednesday, May 20, 2020 11:26 AM
>> To: Alex Deucher <alexander.deucher@amd.com>; Kevin Wang
>> <kevin1.wang@amd.com>; Ruhl, Michael J <michael.j.ruhl@intel.com>
>> Cc: Christian König <christian.koenig@amd.com>; David Airlie
>> <airlied@linux.ie>; Daniel Vetter <daniel@ffwll.ch>; Evan Quan
>> <evan.quan@amd.com>; Rui Huang <ray.huang@amd.com>; Kenneth Feng
>> <kenneth.feng@amd.com>; Yintian Tao <yttao@amd.com>; Hawking Zhang
>> <Hawking.Zhang@amd.com>; amd-gfx@lists.freedesktop.org; dri-
>> devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel-
>> janitors@vger.kernel.org
>> Subject: [PATCH v3] drm/amdgpu: off by one in
>> amdgpu_device_attr_create_groups() error handling
>>
>> This loop in the error handling code should start a "i - 1" and end at
>> "i == 0".  Currently it starts a "i" and ends at "i == 1".  The result
>> is that it removes one attribute that wasn't created yet, and leaks the
>> zeroeth attribute.
>>
>> Fixes: 4e01847c38f7 ("drm/amdgpu: optimize amdgpu device attribute code")
>> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>> ---
>> v2: style change
>> v3: Fix embarrassing typo in the subject
> 😊
>
> Acked-by: Michael J. Ruhl <michael.j.ruhl@intel.com>

Reviewed-by: Christian König <christian.koenig@amd.com>

>
> m
>> drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 3 +--
>> 1 files changed, 1 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> index b75362bf0742..e809534fabd4 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> @@ -1942,9 +1942,8 @@ static int amdgpu_device_attr_create_groups(struct
>> amdgpu_device *adev,
>> 	return 0;
>>
>> failed:
>> -	for (; i > 0; i--) {
>> +	while (i--)
>> 		amdgpu_device_attr_remove(adev, &attrs[i]);
>> -	}
>>
>> 	return ret;
>> }


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-05-20 15:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-20 12:00 [PATCH] drm/amdgpu: off by on in amdgpu_device_attr_create_groups() error handling Dan Carpenter
2020-05-20 12:05 ` Christian König
2020-05-20 12:52   ` Dan Carpenter
2020-05-20 13:08     ` [PATCH v2] " Dan Carpenter
2020-05-20 15:23       ` Ruhl, Michael J
2020-05-20 15:25         ` [PATCH v3] drm/amdgpu: off by one " Dan Carpenter
2020-05-20 15:31           ` Ruhl, Michael J
2020-05-20 15:32             ` Christian König

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).