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

Deepak R Varma
2022-11-08T15:13:08Z

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?

Thank you.
./drv