linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: New warnings with gcc-11
@ 2021-04-28 10:46 Ronald Warsow
  0 siblings, 0 replies; 6+ messages in thread
From: Ronald Warsow @ 2021-04-28 10:46 UTC (permalink / raw)
  To: linux-kernel

may I add this ?

https://marc.info/?l=linux-kernel&m=161819303505220&w=2

--
regards

Ronald

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

* Re: New warnings with gcc-11
  2021-05-08 18:51     ` Linus Torvalds
@ 2021-05-10  9:20       ` Jani Nikula
  0 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2021-05-10  9:20 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Daniel Vetter, LKML, dri-devel, Rodrigo Vivi

On Sat, 08 May 2021, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> I have heard nothing about this, and it remains the only warning from
> my allmodconfig build (I have another one for drm compiled with clang,
> but there I at least heard back that a fix exists).
>
> Since I am going to release rc1 tomorrow, and I don't want to release
> it with an ugly compiler warning, I took it upon myself to just fix
> the code:
>
>   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fec4d42724a1bf3dcba52307e55375fdb967b852
>
> HOWEVER.
>
> That commit fixes the warning, and is at worst harmless. At best it
> fixes an access to random stack memory. But it does smell like
> somebody who actually knows how these arrays work should look at that
> code.
>
> IOW, maybe the code should actually have read 16 bytes from the Event
> Status Indicator? Maybe offset 10 was wrong? Maybe
> drm_dp_channel_eq_ok() should never have taken six bytes to begin
> with?
>
> It's a mystery, and I haven't heard anything otherwise, so there it is.

Fair enough. My bad for not getting this fixed.

The fix is harmless. drm_dp_channel_eq_ok() only ever accesses 3 bytes
instead of 6. I figure the DP_LINK_STATUS_SIZE (=6) is there because in
the normal case you'd read that much, and use a family of functions on
that data, some of which do access the full 6 bytes, some don't.

In our case, we use drm_dp_channel_eq_ok() to check 3 bytes of similarly
encoded data elsewhere in the DPCD address space, and the
DP_LINK_STATUS_SIZE is meaningless there.

The straightforward fix would be to replace
link_status[DP_LINK_STATUS_SIZE] with link_status[3], and that likely
needs changes in dp_link_status() and dp_get_lane_status() as well.


BR,
Jani.


>
>               Linus
>
> On Wed, Apr 28, 2021 at 12:27 AM Jani Nikula <jani.nikula@intel.com> wrote:
>>
>> On Tue, 27 Apr 2021, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>> > I've updated to Fedora 34 on one of my machines, and it causes a lot
>> > of i915 warnings like
>> >
>> >   drivers/gpu/drm/i915/intel_pm.c: In function ‘ilk_setup_wm_latency’:
>> >   drivers/gpu/drm/i915/intel_pm.c:3059:9: note: referencing argument 3
>> > of type ‘const u16 *’ {aka ‘const short unsigned int *’}
>> >   drivers/gpu/drm/i915/intel_pm.c:2994:13: note: in a call to function
>> > ‘intel_print_wm_latency’
>> >
>> > and the reason is that gcc now seems to look at the argument array
>> > size more, and notices that
>>
>> Arnd Bergmann reported some of these a while back. I think we have some
>> of them fixed in our -next already, but not all. Thanks for the
>> reminder.

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: New warnings with gcc-11
  2021-04-28  7:27   ` Jani Nikula
@ 2021-05-08 18:51     ` Linus Torvalds
  2021-05-10  9:20       ` Jani Nikula
  0 siblings, 1 reply; 6+ messages in thread
From: Linus Torvalds @ 2021-05-08 18:51 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Dave Airlie, Joonas Lahtinen, Ville Syrjälä,
	Rodrigo Vivi, Daniel Vetter, LKML, dri-devel

I have heard nothing about this, and it remains the only warning from
my allmodconfig build (I have another one for drm compiled with clang,
but there I at least heard back that a fix exists).

Since I am going to release rc1 tomorrow, and I don't want to release
it with an ugly compiler warning, I took it upon myself to just fix
the code:

  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fec4d42724a1bf3dcba52307e55375fdb967b852

HOWEVER.

That commit fixes the warning, and is at worst harmless. At best it
fixes an access to random stack memory. But it does smell like
somebody who actually knows how these arrays work should look at that
code.

IOW, maybe the code should actually have read 16 bytes from the Event
Status Indicator? Maybe offset 10 was wrong? Maybe
drm_dp_channel_eq_ok() should never have taken six bytes to begin
with?

It's a mystery, and I haven't heard anything otherwise, so there it is.

              Linus

On Wed, Apr 28, 2021 at 12:27 AM Jani Nikula <jani.nikula@intel.com> wrote:
>
> On Tue, 27 Apr 2021, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> > I've updated to Fedora 34 on one of my machines, and it causes a lot
> > of i915 warnings like
> >
> >   drivers/gpu/drm/i915/intel_pm.c: In function ‘ilk_setup_wm_latency’:
> >   drivers/gpu/drm/i915/intel_pm.c:3059:9: note: referencing argument 3
> > of type ‘const u16 *’ {aka ‘const short unsigned int *’}
> >   drivers/gpu/drm/i915/intel_pm.c:2994:13: note: in a call to function
> > ‘intel_print_wm_latency’
> >
> > and the reason is that gcc now seems to look at the argument array
> > size more, and notices that
>
> Arnd Bergmann reported some of these a while back. I think we have some
> of them fixed in our -next already, but not all. Thanks for the
> reminder.

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

* Re: New warnings with gcc-11
  2021-04-27 23:43 ` New warnings with gcc-11 Linus Torvalds
  2021-04-28  0:26   ` Linus Torvalds
@ 2021-04-28  7:27   ` Jani Nikula
  2021-05-08 18:51     ` Linus Torvalds
  1 sibling, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2021-04-28  7:27 UTC (permalink / raw)
  To: Linus Torvalds, Dave Airlie, Joonas Lahtinen,
	Ville Syrjälä,
	Rodrigo Vivi
  Cc: Daniel Vetter, LKML, dri-devel

On Tue, 27 Apr 2021, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> I've updated to Fedora 34 on one of my machines, and it causes a lot
> of i915 warnings like
>
>   drivers/gpu/drm/i915/intel_pm.c: In function ‘ilk_setup_wm_latency’:
>   drivers/gpu/drm/i915/intel_pm.c:3059:9: note: referencing argument 3
> of type ‘const u16 *’ {aka ‘const short unsigned int *’}
>   drivers/gpu/drm/i915/intel_pm.c:2994:13: note: in a call to function
> ‘intel_print_wm_latency’
>
> and the reason is that gcc now seems to look at the argument array
> size more, and notices that

Arnd Bergmann reported some of these a while back. I think we have some
of them fixed in our -next already, but not all. Thanks for the
reminder.

BR,
Jani.

-- 
Jani Nikula, Intel Open Source Graphics Center

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

* Re: New warnings with gcc-11
  2021-04-27 23:43 ` New warnings with gcc-11 Linus Torvalds
@ 2021-04-28  0:26   ` Linus Torvalds
  2021-04-28  7:27   ` Jani Nikula
  1 sibling, 0 replies; 6+ messages in thread
From: Linus Torvalds @ 2021-04-28  0:26 UTC (permalink / raw)
  To: Dave Airlie, Jani Nikula, Joonas Lahtinen,
	Ville Syrjälä,
	Rodrigo Vivi
  Cc: Daniel Vetter, dri-devel, LKML

On Tue, Apr 27, 2021 at 4:43 PM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> I think I will make the argument type to intel_print_wm_latency() be
> just "const u16 wm[]" for now, just to avoid seeing a ton of silly
> warnings.

After fixing the trivial ones, this one remains:

  drivers/gpu/drm/i915/display/intel_dp.c: In function
‘intel_dp_check_mst_status’:
  drivers/gpu/drm/i915/display/intel_dp.c:4554:22: warning:
‘drm_dp_channel_eq_ok’ reading 6 bytes from a region of size 4
[-Wstringop-overread]
   4554 |                     !drm_dp_channel_eq_ok(&esi[10],
intel_dp->lane_count)) {
        |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  drivers/gpu/drm/i915/display/intel_dp.c:4554:22: note: referencing
argument 1 of type ‘const u8 *’ {aka ‘const unsigned char *’}
  In file included from drivers/gpu/drm/i915/display/intel_dp.c:38:
  ./include/drm/drm_dp_helper.h:1459:6: note: in a call to function
‘drm_dp_channel_eq_ok’
   1459 | bool drm_dp_channel_eq_ok(const u8 link_status[DP_LINK_STATUS_SIZE],
        |      ^~~~~~~~~~~~~~~~~~~~

and I'm not fixing that one, because it actually looks like a valid
warning, and doesn't have an obvious fix.

That "esi[]" array is 14 bytes in size (DP_DPRX_ESI_LEN). So when it
does that "&esi[10]" and passes it in as an argument, then only 4
bytes remain of the array.

And drm_dp_channel_eq_ok() supposedly takes a "const u8
link_status[DP_LINK_STATUS_SIZE]", which is 6 bytes.

There may be some reason this is ok, but it does look a bit fishy, and
the compiler warning is appropriate.

            Linus

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

* New warnings with gcc-11
  2021-04-23  3:52 [git pull] drm fixes for 5.12 final Dave Airlie
@ 2021-04-27 23:43 ` Linus Torvalds
  2021-04-28  0:26   ` Linus Torvalds
  2021-04-28  7:27   ` Jani Nikula
  0 siblings, 2 replies; 6+ messages in thread
From: Linus Torvalds @ 2021-04-27 23:43 UTC (permalink / raw)
  To: Dave Airlie, Jani Nikula, Joonas Lahtinen,
	Ville Syrjälä,
	Rodrigo Vivi
  Cc: Daniel Vetter, dri-devel, LKML

I've updated to Fedora 34 on one of my machines, and it causes a lot
of i915 warnings like

  drivers/gpu/drm/i915/intel_pm.c: In function ‘ilk_setup_wm_latency’:
  drivers/gpu/drm/i915/intel_pm.c:3059:9: note: referencing argument 3
of type ‘const u16 *’ {aka ‘const short unsigned int *’}
  drivers/gpu/drm/i915/intel_pm.c:2994:13: note: in a call to function
‘intel_print_wm_latency’

and the reason is that gcc now seems to look at the argument array
size more, and notices that

 (a) intel_print_wm_latency() takes a "const u16 wm[8]" argument

but

 (b) most of the arrays passed in tend to look like 'u16 pri_latency[5]'

I think I will make the argument type to intel_print_wm_latency() be
just "const u16 wm[]" for now, just to avoid seeing a ton of silly
warnings.

I'm not sure if there is a better solution (like making all of those
latency arrays be 8 entries in size), so I'm just letting you know
about my change in this area in case anybody has a better idea.

             Linus

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

end of thread, other threads:[~2021-05-10  9:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-28 10:46 New warnings with gcc-11 Ronald Warsow
  -- strict thread matches above, loose matches on Subject: below --
2021-04-23  3:52 [git pull] drm fixes for 5.12 final Dave Airlie
2021-04-27 23:43 ` New warnings with gcc-11 Linus Torvalds
2021-04-28  0:26   ` Linus Torvalds
2021-04-28  7:27   ` Jani Nikula
2021-05-08 18:51     ` Linus Torvalds
2021-05-10  9:20       ` Jani Nikula

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).