Skip to contentSkip to conversation

uapi: target: Replace fake flex-array with flexible-array member

PATCH Applied Gustavo A. R. Silva 4 participants 5 messages Mar 17, 2023 – Apr 3, 2023

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 uapi: target: Replace fake flex-array with flexible-array member

Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead.

Address the following warning found with GCC-13 and
-fstrict-flex-arrays=3 enabled:
CC drivers/target/target_core_user.o
drivers/target/target_core_user.c: In function ‘queue_cmd_ring’:
drivers/target/target_core_user.c:1096:15: warning: array subscript 0 is outside array bounds of ‘struct iovec[0]’ [-Warray-bounds=]

 1096 |         iov = &entry->req.iov[0];
      |               ^~~~~~~~~~~~~~~~~~

In file included from drivers/target/target_core_user.c:31:
./include/uapi/linux/target_core_user.h:122:38: note: while referencing ‘iov’
122 | struct iovec iov[0];
| ^~~

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines on memcpy() and help us make progress towards globally enabling -fstrict-flex-arrays=3 [1].

---
 include/uapi/linux/target_core_user.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
include/uapi/linux/target_core_user.h +1 -1
index fbd8ca67e107..f925a77f19ed 100644
@@ -119,7 +119,7 @@ struct tcmu_cmd_entry {
 			__u64 cdb_off;
 			__u64 __pad1;
 			__u64 __pad2;
-			struct iovec iov[0];
+			__DECLARE_FLEX_ARRAY(struct iovec, iov);
 		} req;
 		struct {
 			__u8 scsi_status;
Signature · 1 line
2.34.1
maintainer Reviewed-by on v1 1/1
#1 lore raw
Quoted 32 lines · Gustavo A. R. Silva

Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead.

Address the following warning found with GCC-13 and
-fstrict-flex-arrays=3 enabled:
CC drivers/target/target_core_user.o
drivers/target/target_core_user.c: In function ‘queue_cmd_ring’:
drivers/target/target_core_user.c:1096:15: warning: array subscript 0 is outside array bounds of ‘struct iovec[0]’ [-Warray-bounds=]

  1096 |         iov = &entry->req.iov[0];
       |               ^~~~~~~~~~~~~~~~~~

In file included from drivers/target/target_core_user.c:31:
./include/uapi/linux/target_core_user.h:122:38: note: while referencing ‘iov’
122 | struct iovec iov[0];
| ^~~

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines on memcpy() and help us make progress towards globally enabling -fstrict-flex-arrays=3 [1].

---
  include/uapi/linux/target_core_user.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
include/uapi/linux/target_core_user.h +0 -0
index fbd8ca67e107..f925a77f19ed 100644

include/uapi/linux/target_core_user.h struct tcmu_cmd_entry { · line 125

Quoted 8 lines
include/uapi/linux/target_core_user.h +1 -1
@@ -119,7 +119,7 @@ struct tcmu_cmd_entry {
  			__u64 cdb_off;
  			__u64 __pad1;
  			__u64 __pad2;
-			struct iovec iov[0];
+			__DECLARE_FLEX_ARRAY(struct iovec, iov);
  		} req;
  		struct {
  			__u8 scsi_status;

Looks good. Thank you.

Reviewed-by on v1 1/1
#2 lore raw
In reply to Gustavo A. R. Silva
Quoted 15 lines · Gustavo A. R. Silva

Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead.

Address the following warning found with GCC-13 and
-fstrict-flex-arrays=3 enabled:
CC drivers/target/target_core_user.o
drivers/target/target_core_user.c: In function ‘queue_cmd_ring’:
drivers/target/target_core_user.c:1096:15: warning: array subscript 0 is outside array bounds of ‘struct iovec[0]’ [-Warray-bounds=]

 1096 |         iov = &entry->req.iov[0];
      |               ^~~~~~~~~~~~~~~~~~

In file included from drivers/target/target_core_user.c:31:
./include/uapi/linux/target_core_user.h:122:38: note: while referencing ‘iov’
122 | struct iovec iov[0];
| ^~~

Quoted 8 lines

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines on memcpy() and help us make progress towards globally enabling -fstrict-flex-arrays=3 [1].

Signature · 1 line
Kees Cook
#3 lore raw
In reply to Gustavo A. R. Silva

Gustavo,

Quoted 2 lines

Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead.

Applied to 6.4/scsi-staging, thanks!

Signature · 1 line
Martin K. Petersen	Oracle Linux Engineering
#4 lore raw
In reply to Gustavo A. R. Silva
Quoted 8 lines · Gustavo A. R. Silva

Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead.

Address the following warning found with GCC-13 and
-fstrict-flex-arrays=3 enabled:
CC drivers/target/target_core_user.o
drivers/target/target_core_user.c: In function ‘queue_cmd_ring’:
drivers/target/target_core_user.c:1096:15: warning: array subscript 0 is outside array bounds of ‘struct iovec[0]’ [-Warray-bounds=]

Quoted 8 lines
 1096 |         iov = &entry->req.iov[0];
      |               ^~~~~~~~~~~~~~~~~~

In file included from drivers/target/target_core_user.c:31:
./include/uapi/linux/target_core_user.h:122:38: note: while referencing ‘iov’
122 | struct iovec iov[0];
| ^~~

[...]

Applied to 6.4/scsi-queue, thanks!

[1/1] uapi: target: Replace fake flex-array with flexible-array member

      https://git.kernel.org/mkp/scsi/c/5c8c74ef20e7
Signature · 1 line
Martin K. Petersen	Oracle Linux Engineering