linux-stable/drivers/scsi/aacraid
Gustavo A. R. Silva 39107e8577 scsi: aacraid: Replace one-element array with flexible-array member
There is a regular need in the kernel to provide a way to declare having a
dynamically sized set of trailing elements in a structure. Kernel code
should always use “flexible array members”[1] for these cases. The older
style of one-element or zero-length arrays should no longer be used[2].

Refactor the code according to the use of a flexible-array member in struct
aac_raw_io2 instead of one-element array, and use the struct_size() helper.

Also, this helps with the ongoing efforts to enable -Warray-bounds by
fixing the following warnings:

drivers/scsi/aacraid/aachba.c: In function ‘aac_build_sgraw2’:
drivers/scsi/aacraid/aachba.c:3970:18: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 3970 |     if (rio2->sge[j].length % (i*PAGE_SIZE)) {
      |         ~~~~~~~~~^~~
drivers/scsi/aacraid/aachba.c:3974:27: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 3974 |     nseg_new += (rio2->sge[j].length / (i*PAGE_SIZE));
      |                  ~~~~~~~~~^~~
drivers/scsi/aacraid/aachba.c:4011:28: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 4011 |   for (j = 0; j < rio2->sge[i].length / (pages * PAGE_SIZE); ++j) {
      |                   ~~~~~~~~~^~~
drivers/scsi/aacraid/aachba.c:4012:24: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 4012 |    addr_low = rio2->sge[i].addrLow + j * pages * PAGE_SIZE;
      |               ~~~~~~~~~^~~
drivers/scsi/aacraid/aachba.c:4014:33: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 4014 |    sge[pos].addrHigh = rio2->sge[i].addrHigh;
      |                        ~~~~~~~~~^~~
drivers/scsi/aacraid/aachba.c:4015:28: warning: array subscript 1 is above array bounds of ‘struct sge_ieee1212[1]’ [-Warray-bounds]
 4015 |    if (addr_low < rio2->sge[i].addrLow)
      |                   ~~~~~~~~~^~~

[1] https://en.wikipedia.org/wiki/Flexible_array_member
[2] https://www.kernel.org/doc/html/v5.9/process/deprecated.html#zero-length-and-one-element-arrays

Link: https://github.com/KSPP/linux/issues/79
Link: https://github.com/KSPP/linux/issues/109
Link: https://lore.kernel.org/lkml/60414244.ur4%2FkI+fBF1ohKZs%25lkp@intel.com/
Link: https://lore.kernel.org/r/20210421185611.GA105224@embeddedor
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Build-tested-by: kernel test robot <lkp@intel.com>
2021-05-10 22:28:31 -04:00
..
aachba.c scsi: aacraid: Replace one-element array with flexible-array member 2021-05-10 22:28:31 -04:00
aacraid.h scsi: aacraid: Replace one-element array with flexible-array member 2021-05-10 22:28:31 -04:00
commctrl.c scsi: aacraid: Fix incorrect spelling of aac_send_raw_srb() 2021-03-15 22:14:51 -04:00
comminit.c
commsup.c scsi: aacraid: Repair formatting issue in aac_handle_sa_aif()'s header 2021-03-15 22:14:52 -04:00
dpcsup.c scsi: aacraid: Demote partially documented function header 2020-07-15 17:25:10 -04:00
linit.c scsi: aacraid: Use generic power management 2020-11-25 23:14:30 -05:00
Makefile
nark.c scsi: aacraid: Add missing description for 'dev' 2020-07-24 22:09:58 -04:00
rkt.c scsi: aacraid: Add missing description for 'dev' 2020-07-24 22:09:57 -04:00
rx.c scsi: aacraid: Fix misspelling of _aac_rx_init() 2021-03-15 22:14:53 -04:00
sa.c scsi: aacraid: Add descriptions for missing parameters 2020-07-24 22:09:57 -04:00
src.c scsi: aacraid: Add descriptions for missing parameters 2020-07-24 22:09:58 -04:00