2016-10-13 08:55:42

by Dan Carpenter

[permalink] [raw]
Subject: [patch] drm/i915: fix a read size argument

We want to read 3 bytes here, but because the parenthesis are in the
wrong place we instead read:

sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)

which is one byte.

Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
Signed-off-by: Dan Carpenter <[email protected]>

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 14a3cf0..ee8aa95 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -3551,8 +3551,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
/* Read the eDP Display control capabilities registers */
if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
- intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd) ==
- sizeof(intel_dp->edp_dpcd)))
+ intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
+ sizeof(intel_dp->edp_dpcd))
DRM_DEBUG_KMS("EDP DPCD : %*ph\n", (int) sizeof(intel_dp->edp_dpcd),
intel_dp->edp_dpcd);



2016-10-13 09:02:50

by Chris Wilson

[permalink] [raw]
Subject: Re: [Intel-gfx] [patch] drm/i915: fix a read size argument

On Thu, Oct 13, 2016 at 11:55:08AM +0300, Dan Carpenter wrote:
> We want to read 3 bytes here, but because the parenthesis are in the
> wrong place we instead read:
>
> sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)
>
> which is one byte.
>
> Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
> Signed-off-by: Dan Carpenter <[email protected]>

Oops, does smatch catch this? I don't recall seeing the complaint in
recent runs?

Reviewed-by: Chris Wilson <[email protected]>
-Chris

--
Chris Wilson, Intel Open Source Technology Centre

2016-10-13 09:07:50

by Eric Engestrom

[permalink] [raw]
Subject: Re: [patch] drm/i915: fix a read size argument

On Thu, Oct 13, 2016 at 11:55:08AM +0300, Dan Carpenter wrote:
> We want to read 3 bytes here, but because the parenthesis are in the
> wrong place we instead read:
>
> sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)
>
> which is one byte.
>
> Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
> Signed-off-by: Dan Carpenter <[email protected]>

Good catch! What tool did you use to find it, or did you find it by
inspection?
Reviewed-by: Eric Engestrom <[email protected]>

(btw, there's a missing `---` here, between the commit msg and the diff)

>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 14a3cf0..ee8aa95 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -3551,8 +3551,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
> /* Read the eDP Display control capabilities registers */
> if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
> drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
> - intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd) ==
> - sizeof(intel_dp->edp_dpcd)))
> + intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
> + sizeof(intel_dp->edp_dpcd))
> DRM_DEBUG_KMS("EDP DPCD : %*ph\n", (int) sizeof(intel_dp->edp_dpcd),
> intel_dp->edp_dpcd);

2016-10-13 09:45:20

by walter harms

[permalink] [raw]
Subject: Re: [patch] drm/i915: fix a read size argument



Am 13.10.2016 10:55, schrieb Dan Carpenter:
> We want to read 3 bytes here, but because the parenthesis are in the
> wrong place we instead read:
>
> sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)
>
> which is one byte.
>
> Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
> Signed-off-by: Dan Carpenter <[email protected]>
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 14a3cf0..ee8aa95 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -3551,8 +3551,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
> /* Read the eDP Display control capabilities registers */
> if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
> drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
> - intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd) ==
> - sizeof(intel_dp->edp_dpcd)))
> + intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
> + sizeof(intel_dp->edp_dpcd))



perhaps we can morph that into something more readable ? I would suggest:


if (intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE)
{
size_t size=sizeof(intel_dp->edp_dpcd); /* == EDP_DISPLAY_CTL_CAP_SIZE */
int ret;

ret=drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,intel_dp->edp_dpcd,size);

if (ret != size )
......

}

this way it improves readability and reduces line length.


> DRM_DEBUG_KMS("EDP DPCD : %*ph\n", (int) sizeof(intel_dp->edp_dpcd),
> intel_dp->edp_dpcd);
>
> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>

2016-10-13 09:58:53

by Dan Carpenter

[permalink] [raw]
Subject: Re: [Intel-gfx] [patch] drm/i915: fix a read size argument

On Thu, Oct 13, 2016 at 10:01:03AM +0100, Chris Wilson wrote:
> On Thu, Oct 13, 2016 at 11:55:08AM +0300, Dan Carpenter wrote:
> > We want to read 3 bytes here, but because the parenthesis are in the
> > wrong place we instead read:
> >
> > sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)
> >
> > which is one byte.
> >
> > Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
> > Signed-off-by: Dan Carpenter <[email protected]>
>
> Oops, does smatch catch this?

Yeah. It does.

regards,
dan carpenter

2016-10-13 12:13:27

by Jani Nikula

[permalink] [raw]
Subject: Re: [patch] drm/i915: fix a read size argument

On Thu, 13 Oct 2016, walter harms <[email protected]> wrote:
> Am 13.10.2016 10:55, schrieb Dan Carpenter:
>> We want to read 3 bytes here, but because the parenthesis are in the
>> wrong place we instead read:
>>
>> sizeof(intel_dp->edp_dpcd) == sizeof(intel_dp->edp_dpcd)
>>
>> which is one byte.
>>
>> Fixes: fe5a66f91c88 ("drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP")
>> Signed-off-by: Dan Carpenter <[email protected]>

Dan, good catch, thank you. Luckily we only really use the first byte
currently...

Cc: <[email protected]>

>> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>> index 14a3cf0..ee8aa95 100644
>> --- a/drivers/gpu/drm/i915/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>> @@ -3551,8 +3551,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
>> /* Read the eDP Display control capabilities registers */
>> if ((intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
>> drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,
>> - intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd) ==
>> - sizeof(intel_dp->edp_dpcd)))
>> + intel_dp->edp_dpcd, sizeof(intel_dp->edp_dpcd)) ==
>> + sizeof(intel_dp->edp_dpcd))
>
>
>
> perhaps we can morph that into something more readable ? I would suggest:
>
>
> if (intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] & DP_DPCD_DISPLAY_CONTROL_CAPABLE)
> {
> size_t size=sizeof(intel_dp->edp_dpcd); /* == EDP_DISPLAY_CTL_CAP_SIZE */
> int ret;
>
> ret=drm_dp_dpcd_read(&intel_dp->aux, DP_EDP_DPCD_REV,intel_dp->edp_dpcd,size);
>
> if (ret != size )
> ......
>
> }
>
> this way it improves readability and reduces line length.

Not convinced, let's just take the simple brace fix now.

BR,
Jani.


--
Jani Nikula, Intel Open Source Technology Center