lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 8 Nov 2022 16:52:44 +0100
From:   Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To:     Deepak R Varma <drv@...lo.com>
Cc:     linux-staging@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: staging/wlan-ng query: convert to flexible array member

On Tue, Nov 08, 2022 at 09:15:10PM +0530, Deepak R Varma wrote:
> On Tue, Nov 08, 2022 at 04:34:15PM +0100, Greg Kroah-Hartman wrote:
> > 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
> > :)
> 
> I did remove the structs from the union and it built fine. Is there anything else I
> can check/test to verify the impact?
> 
> <snip>
> 	drv@...ulion:~/git/kernels/staging$ git diff
> 	diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h
> 	index 0611e37df6ac..8fe10aa93dfb 100644
> 	--- a/drivers/staging/wlan-ng/hfa384x.h
> 	+++ b/drivers/staging/wlan-ng/hfa384x.h
> 	@@ -1077,9 +1077,6 @@ struct hfa384x_pdrec {
> 			struct hfa384x_pdr_mfisuprange mfisuprange;
> 			struct hfa384x_pdr_cfisuprange cfisuprange;
> 			struct hfa384x_pdr_nicid nicid;
> 	-               struct hfa384x_pdr_refdac_measurements refdac_measurements;
> 	-               struct hfa384x_pdr_vgdac_measurements vgdac_measurements;
> 	-               struct hfa384x_pdr_level_comp_measurements level_compc_measurements;
> 			struct hfa384x_pdr_mac_address mac_address;
> 			struct hfa384x_pdr_mkk_callname mkk_callname;
> 			struct hfa384x_pdr_regdomain regdomain;
> 	drv@...ulion:~/git/kernels/staging$ make M=drivers/staging/wlan-ng/
> 	  CC [M]  drivers/staging/wlan-ng/prism2usb.o
> 	  CC [M]  drivers/staging/wlan-ng/p80211netdev.o
> 	  LD [M]  drivers/staging/wlan-ng/prism2_usb.o
> 	  MODPOST drivers/staging/wlan-ng/Module.symvers
> 	  LD [M]  drivers/staging/wlan-ng/prism2_usb.ko
> 	  BTF [M] drivers/staging/wlan-ng/prism2_usb.ko
> 	drv@...ulion:~/git/kernels/staging$
> </snip>
> 

Test the device to make sure it still works?

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ