]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: aacraid: union aac_init: Replace 1-element array with flexible array
authorKees Cook <kees@kernel.org>
Thu, 11 Jul 2024 17:48:23 +0000 (10:48 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 3 Aug 2024 01:28:25 +0000 (21:28 -0400)
Replace the deprecated[1] use of a 1-element array in union aac_init with a
modern flexible array.

Additionally add __counted_by annotation since rrq is only ever accessed
after rr_queue_count has been set (with the same value used to control the
loop):

                init->r8.rr_queue_count = cpu_to_le32(dev->max_msix);
...
                for (i = 0; i < dev->max_msix; i++) {
                        addr = (u64)dev->host_rrq_pa + dev->vector_cap * i *
                                        sizeof(u32);
                        init->r8.rrq[i].host_addr_high = cpu_to_le32(
                                                upper_32_bits(addr));

No binary differences are present after this conversion.

Link: https://github.com/KSPP/linux/issues/79
Signed-off-by: Kees Cook <kees@kernel.org>
Link: https://lore.kernel.org/r/20240711174815.work.689-kees@kernel.org
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/src.c

index 7d5a155073c6271866e0cf3ce9fff1e3e30c1669..659e393c1033924fb0a1722601b487f1f022b4f4 100644 (file)
@@ -873,7 +873,7 @@ union aac_init
                        __le16  element_count;
                        __le16  comp_thresh;
                        __le16  unused;
-               } rrq[1];               /* up to 64 RRQ addresses */
+               } rrq[] __counted_by_le(rr_queue_count); /* up to 64 RRQ addresses */
        } r8;
 };
 
index 11ef58204e96f179227c166433eb4932ed7dbafa..28115ed637e81c8c32254fb6914e7adbc0980eca 100644 (file)
@@ -410,7 +410,7 @@ static void aac_src_start_adapter(struct aac_dev *dev)
                        lower_32_bits(dev->init_pa),
                        upper_32_bits(dev->init_pa),
                        sizeof(struct _r8) +
-                       (AAC_MAX_HRRQ - 1) * sizeof(struct _rrq),
+                       AAC_MAX_HRRQ * sizeof(struct _rrq),
                        0, 0, 0, NULL, NULL, NULL, NULL, NULL);
        } else {
                init->r7.host_elapsed_seconds =