Apparently, the flexible-array member in `struct scsi_stream_status_header` is not actually needed. Remove it along with the related KUnit test.
So, with these changes, fix the following warning: drivers/scsi/sd.c:3195:50: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] Co-developed-by: Christoph Hellwig <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Gustavo A. R. Silva <[email protected]> --- Changes in v2: - Revome flexible-array member. (Christoph) v1: - Link: https://lore.kernel.org/linux-hardening/aAwos0mLxneG9R_t@kspp/ drivers/scsi/scsi_proto_test.c | 8 -------- drivers/scsi/sd.c | 2 +- include/scsi/scsi_proto.h | 1 - 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/scsi/scsi_proto_test.c b/drivers/scsi/scsi_proto_test.c index c093389edabb..2fc5c6523184 100644 --- a/drivers/scsi/scsi_proto_test.c +++ b/drivers/scsi/scsi_proto_test.c @@ -30,14 +30,6 @@ static void test_scsi_proto(struct kunit *test) KUNIT_EXPECT_EQ(test, get_unaligned_be16(&ss.s.stream_identifier), 0x1234); KUNIT_EXPECT_EQ(test, ss.s.rel_lifetime + 0, 0x3f); - - static const union { - struct scsi_stream_status_header h; - u8 arr[sizeof(struct scsi_stream_status_header)]; - } sh = { .arr = { 1, 2, 3, 4, 0, 0, 5, 6 } }; - KUNIT_EXPECT_EQ(test, get_unaligned_be32(&sh.h.len), 0x1020304); - KUNIT_EXPECT_EQ(test, get_unaligned_be16(&sh.h.number_of_open_streams), - 0x506); } static struct kunit_case scsi_proto_test_cases[] = { diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 950d8c9fb884..3f6e87705b62 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -3215,7 +3215,7 @@ static bool sd_is_perm_stream(struct scsi_disk *sdkp, unsigned int stream_id) return false; if (get_unaligned_be32(&buf.h.len) < sizeof(struct scsi_stream_status)) return false; - return buf.h.stream_status[0].perm; + return buf.s.perm; } static void sd_read_io_hints(struct scsi_disk *sdkp, unsigned char *buffer) diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h index aeca37816506..bc8f2b2226be 100644 --- a/include/scsi/scsi_proto.h +++ b/include/scsi/scsi_proto.h @@ -349,7 +349,6 @@ struct scsi_stream_status_header { __be32 len; /* length in bytes of stream_status[] array. */ u16 reserved; __be16 number_of_open_streams; - DECLARE_FLEX_ARRAY(struct scsi_stream_status, stream_status); }; static_assert(sizeof(struct scsi_stream_status_header) == 8); -- 2.43.0
