All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][next] prism54: Replace zero-length array with flexible-array member
@ 2020-02-25  1:20 Gustavo A. R. Silva
  2020-02-25 18:32 ` Luis Chamberlain
  0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2020-02-25  1:20 UTC (permalink / raw)
  To: Luis Chamberlain, Kalle Valo, David S. Miller
  Cc: linux-wireless, netdev, linux-kernel, Gustavo A. R. Silva

The current codebase makes use of the zero-length array language
extension to the C90 standard, but the preferred mechanism to declare
variable-length types such as these ones is a flexible array member[1][2],
introduced in C99:

struct foo {
        int stuff;
        struct boo array[];
};

By making use of the mechanism above, we will get a compiler warning
in case the flexible array does not occur last in the structure, which
will help us prevent some kind of undefined behavior bugs from being
inadvertently introduced[3] to the codebase from now on.

Also, notice that, dynamic memory allocations won't be affected by
this change:

"Flexible array members have incomplete type, and so the sizeof operator
may not be applied. As a quirk of the original implementation of
zero-length arrays, sizeof evaluates to zero."[1]

This issue was found with the help of Coccinelle.

[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
[2] https://github.com/KSPP/linux/issues/21
[3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
---
 drivers/net/wireless/intersil/prism54/isl_oid.h    | 8 ++++----
 drivers/net/wireless/intersil/prism54/islpci_mgt.h | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/intersil/prism54/isl_oid.h b/drivers/net/wireless/intersil/prism54/isl_oid.h
index 5441c1f9f2fc..1afc2ccf94ca 100644
--- a/drivers/net/wireless/intersil/prism54/isl_oid.h
+++ b/drivers/net/wireless/intersil/prism54/isl_oid.h
@@ -37,7 +37,7 @@ struct obj_mlmeex {
 	u16 state;
 	u16 code;
 	u16 size;
-	u8 data[0];
+	u8 data[];
 } __packed;
 
 struct obj_buffer {
@@ -68,12 +68,12 @@ struct obj_bss {
 
 struct obj_bsslist {
 	u32 nr;
-	struct obj_bss bsslist[0];
+	struct obj_bss bsslist[];
 } __packed;
 
 struct obj_frequencies {
 	u16 nr;
-	u16 mhz[0];
+	u16 mhz[];
 } __packed;
 
 struct obj_attachment {
@@ -81,7 +81,7 @@ struct obj_attachment {
 	char reserved;
 	short id;
 	short size;
-	char data[0];
+	char data[];
 } __packed;
 
 /*
diff --git a/drivers/net/wireless/intersil/prism54/islpci_mgt.h b/drivers/net/wireless/intersil/prism54/islpci_mgt.h
index d6bbbac46b4a..1f87d0aea60c 100644
--- a/drivers/net/wireless/intersil/prism54/islpci_mgt.h
+++ b/drivers/net/wireless/intersil/prism54/islpci_mgt.h
@@ -99,7 +99,7 @@ struct islpci_mgmtframe {
 	pimfor_header_t *header;      /* payload header, points into buf */
 	void *data;		      /* payload ex header, points into buf */
         struct work_struct ws;	      /* argument for schedule_work() */
-	char buf[0];		      /* fragment buffer */
+	char buf[];		      /* fragment buffer */
 };
 
 int
-- 
2.25.0


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

* Re: [PATCH][next] prism54: Replace zero-length array with flexible-array member
  2020-02-25  1:20 [PATCH][next] prism54: Replace zero-length array with flexible-array member Gustavo A. R. Silva
@ 2020-02-25 18:32 ` Luis Chamberlain
  2020-03-23 17:10   ` drivers/net/wireless spring cleaning Kalle Valo
  0 siblings, 1 reply; 3+ messages in thread
From: Luis Chamberlain @ 2020-02-25 18:32 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: Kalle Valo, David S. Miller, linux-wireless, netdev, linux-kernel

On Mon, Feb 24, 2020 at 07:20:08PM -0600, Gustavo A. R. Silva wrote:
> The current codebase makes use of the zero-length array language
> extension to the C90 standard, but the preferred mechanism to declare
> variable-length types such as these ones is a flexible array member[1][2],
> introduced in C99:
> 
> struct foo {
>         int stuff;
>         struct boo array[];
> };
> 
> By making use of the mechanism above, we will get a compiler warning
> in case the flexible array does not occur last in the structure, which
> will help us prevent some kind of undefined behavior bugs from being
> inadvertently introduced[3] to the codebase from now on.
> 
> Also, notice that, dynamic memory allocations won't be affected by
> this change:
> 
> "Flexible array members have incomplete type, and so the sizeof operator
> may not be applied. As a quirk of the original implementation of
> zero-length arrays, sizeof evaluates to zero."[1]
> 
> This issue was found with the help of Coccinelle.
> 
> [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
> [2] https://github.com/KSPP/linux/issues/21
> [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")
> 
> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>

I'd rather we just remove this driver completely, as it has a
replacement upstream p54, and remained upstream just for a theoretical
period of time someone was not able to use p54 anymore. I'll follow up
with a removal of the driver.

  Luis

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

* drivers/net/wireless spring cleaning
  2020-02-25 18:32 ` Luis Chamberlain
@ 2020-03-23 17:10   ` Kalle Valo
  0 siblings, 0 replies; 3+ messages in thread
From: Kalle Valo @ 2020-03-23 17:10 UTC (permalink / raw)
  To: Luis Chamberlain
  Cc: Gustavo A. R. Silva, David S. Miller, linux-wireless, netdev,
	linux-kernel

(changing the subject)

Luis Chamberlain <mcgrof@kernel.org> writes:

> On Mon, Feb 24, 2020 at 07:20:08PM -0600, Gustavo A. R. Silva wrote:
>> The current codebase makes use of the zero-length array language
>> extension to the C90 standard, but the preferred mechanism to declare
>> variable-length types such as these ones is a flexible array member[1][2],
>> introduced in C99:
>> 
>> struct foo {
>>         int stuff;
>>         struct boo array[];
>> };
>> 
>> By making use of the mechanism above, we will get a compiler warning
>> in case the flexible array does not occur last in the structure, which
>> will help us prevent some kind of undefined behavior bugs from being
>> inadvertently introduced[3] to the codebase from now on.
>> 
>> Also, notice that, dynamic memory allocations won't be affected by
>> this change:
>> 
>> "Flexible array members have incomplete type, and so the sizeof operator
>> may not be applied. As a quirk of the original implementation of
>> zero-length arrays, sizeof evaluates to zero."[1]
>> 
>> This issue was found with the help of Coccinelle.
>> 
>> [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
>> [2] https://github.com/KSPP/linux/issues/21
>> [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")
>> 
>> Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
>
> I'd rather we just remove this driver completely, as it has a
> replacement upstream p54, and remained upstream just for a theoretical
> period of time someone was not able to use p54 anymore. I'll follow up
> with a removal of the driver.

Yeah, please do.

I wonder if we should do other spring cleanup as well and remove drivers
like ray_cs and wl3501, I have not seen any activity on those for years.
Also rndis_wlan would be other candidate for removal.

Anyone know if these drivers are used or if they even work anymore?

-- 
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

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

end of thread, other threads:[~2020-03-23 17:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-25  1:20 [PATCH][next] prism54: Replace zero-length array with flexible-array member Gustavo A. R. Silva
2020-02-25 18:32 ` Luis Chamberlain
2020-03-23 17:10   ` drivers/net/wireless spring cleaning Kalle Valo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.