Skip to content

Commit 2b7a8dc

Browse files
keesaxboe
authored andcommitted
s390/dasd: Avoid field over-reading memcpy()
In preparation for FORTIFY_SOURCE performing compile-time and run-time field array bounds checking for memcpy(), memmove(), and memset(), avoid intentionally reading across neighboring array fields. Add a wrapping structure to serve as the memcpy() source, so the compiler can do appropriate bounds checking, avoiding this future warning: In function '__fortify_memcpy', inlined from 'create_uid' at drivers/s390/block/dasd_eckd.c:749:2: ./include/linux/fortify-string.h:246:4: error: call to '__read_overflow2_field' declared with attribute error: detected read beyond size of field (2nd parameter) Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Stefan Haberland <sth@linux.ibm.com> Link: https://lore.kernel.org/r/20210701142221.3408680-3-sth@linux.ibm.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 299f2b5 commit 2b7a8dc

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

drivers/s390/block/dasd_eckd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ static void create_uid(struct dasd_eckd_private *private)
746746
memcpy(uid->vendor, private->ned->HDA_manufacturer,
747747
sizeof(uid->vendor) - 1);
748748
EBCASC(uid->vendor, sizeof(uid->vendor) - 1);
749-
memcpy(uid->serial, private->ned->HDA_location,
749+
memcpy(uid->serial, &private->ned->serial,
750750
sizeof(uid->serial) - 1);
751751
EBCASC(uid->serial, sizeof(uid->serial) - 1);
752752
uid->ssid = private->gneq->subsystemID;

drivers/s390/block/dasd_eckd.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,10 @@ struct dasd_ned {
332332
__u8 dev_type[6];
333333
__u8 dev_model[3];
334334
__u8 HDA_manufacturer[3];
335-
__u8 HDA_location[2];
336-
__u8 HDA_seqno[12];
335+
struct {
336+
__u8 HDA_location[2];
337+
__u8 HDA_seqno[12];
338+
} serial;
337339
__u8 ID;
338340
__u8 unit_addr;
339341
} __attribute__ ((packed));

0 commit comments

Comments
 (0)