[Mesa-dev] [PATCH mesa] move variable-sized struct at the end of parent struct

Eric Engestrom eric.engestrom at intel.com
Thu Nov 1 15:29:51 UTC 2018


On Thursday, 2018-11-01 12:19:10 +0000, Lionel Landwerlin wrote:
> On 01/11/2018 11:59, andrey simiklit wrote:
> > Hello,
> > 
> > Please find my comments below:
> > 
> > On Thu, Nov 1, 2018 at 12:24 PM Eric Engestrom <eric.engestrom at intel.com
> > <mailto:eric.engestrom at intel.com>> wrote:
> > 
> >       warning: field 'base' with variable sized type 'struct
> >     drm_i915_query_topology_info'
> >       not at the end of a struct or class is a GNU extension
> >     [-Wgnu-variable-sized-type-not-at-end]
> > 
> >     Signed-off-by: Eric Engestrom <eric.engestrom at intel.com
> >     <mailto:eric.engestrom at intel.com>>
> >     ---
> >      src/intel/dev/gen_device_info.c | 2 +-
> >      1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> >     diff --git a/src/intel/dev/gen_device_info.c
> >     b/src/intel/dev/gen_device_info.c
> >     index 5dbd06075722f8cc644e..242fe163447a4265acfb 100644
> >     --- a/src/intel/dev/gen_device_info.c
> >     +++ b/src/intel/dev/gen_device_info.c
> >     @@ -991,8 +991,8 @@ gen_device_info_update_from_masks(struct
> >     gen_device_info *devinfo,
> >                                        uint32_t n_eus)
> >      {
> >         struct {
> >     -      struct drm_i915_query_topology_info base;
> >            uint8_t data[100];
> >     +      struct drm_i915_query_topology_info base;
> >         } topology;
> > 
> > 
> > I can be wrong, but it seems like here the 'data[100]' field should
> > rather be placed after the 'base' field
> > because it was done as far as I understood to allocate memory on the stack
> > for the 'drm_i915_query_topology_info::data[]' field. I guess that this
> > patch
> > may introduce the stack corruption on the following line:
> >    for (int b = 0; b < topology.base.subslice_offset; b++)
> >       topology.base.data[b] = (slice_mask >> (b * 8)) & 0xff;
> 
> 
> Andrey's right, the base field needs to be first and data following.
> 
> nack :(

Right, I misunderstood this code (I was confused how it was working in
the first place, but now I understand).
Thanks both; the warning is wrong, this code is exactly how it should be :)

> 
> 
> > 
> >         assert((slice_mask & 0xff) == slice_mask);
> >     --     Cheers,
> >       Eric
> > 
> >     _______________________________________________
> >     mesa-dev mailing list
> >     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
> >     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > 
> > 
> > Regards,
> > Andrii.
> > 
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 
> 


More information about the mesa-dev mailing list