Re: staging/wlan-ng query: convert to flexible array member

Greg Kroah-Hartman
2022-11-08T15:34:18Z

On Tue, Nov 08, 2022 at 08:42:59PM +0530, Deepak R Varma wrote:
> Hello,
>
> First, my apologies for the long email.
> I am requesting guidance on how to approach resolving the zero element flexible
> VLO struct implementation in this driver in file drivers/staging/waln-ng/hfa384x.f
>
> The struct hfa384x_pdrec contains nested structs with zero element arrays. These
> zero element structs are part of a union 'data' inside the struct container. This
> union 'data' is the last element of this container. Please see the code snip below:
>
> <snip>
>
> 1068 struct hfa384x_pdrec {
> 1 __le16 len; /* in words */
> 2 __le16 code;
> 3 union pdr {
> 4 struct hfa384x_pdr_pcb_partnum pcb_partnum;
> 11 struct hfa384x_pdr_nicid nicid;
> 12 struct hfa384x_pdr_refdac_measurements refdac_measurements;
> 13 struct hfa384x_pdr_vgdac_measurements vgdac_measurements;
> 14 struct hfa384x_pdr_level_comp_measurements level_compc_measurements;
> 15 struct hfa384x_pdr_mac_address mac_address;
> 39 } data;
> 40 } __packed;
>
> </snip>
>
> The three structures in question are declared as follows in the same file:
>
> <snip>
> 962 struct hfa384x_pdr_refdac_measurements {
> 1 u16 value[0];
> 2 } __packed;
> 3
> 4 struct hfa384x_pdr_vgdac_measurements {
> 5 u16 value[0];
> 6 } __packed;
> 7
> 8 struct hfa384x_pdr_level_comp_measurements {
> 9 u16 value[0];
> 10 } __packed;
> </snip>
>
> As per the C99 specifications, the flexible array struct should have at least
> one member other than the true flexible array member. So converting these from
> [0] to [] is not feasible in the current form.
>
> I did not find these struct variables being used for memory allocation in the
> code directly. My find may be short since the implementation appears to get very
> complex as I tried to get deeper.
>
> Can you please suggest how should I approach correcting the zero element flex
> array implementation here? Can these structs be removed if they are unused?

Are you sure they are unused?

They look like structures that are read from the memory of a device,
right? Try removing the structures from the union and see what happens
:)

thanks,

greg k-h