Module Name: src Committed By: rin Date: Tue Jul 2 05:26:40 UTC 2024
Modified Files: src/sys/arch/prep/stand/boot: sd.c siop.c Log Message: prep: stand: Appease GCC12 -Warray-bounds, NFCI except for additional 38-byte of stack being consumed. Here, GCC12 complains buffer is smaller than sizeof(*inqbuf) == SCSIPI_INQUIRY_LENGTH_SCSI3 == 74 bytes, despite members within the first SCSIPI_INQUIRY_LENGTH_SCSI2 == 36 bytes are actually dereferenced. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/prep/stand/boot/sd.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/prep/stand/boot/siop.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/prep/stand/boot/sd.c diff -u src/sys/arch/prep/stand/boot/sd.c:1.4 src/sys/arch/prep/stand/boot/sd.c:1.5 --- src/sys/arch/prep/stand/boot/sd.c:1.4 Tue Jan 8 19:41:09 2019 +++ src/sys/arch/prep/stand/boot/sd.c Tue Jul 2 05:26:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: sd.c,v 1.4 2019/01/08 19:41:09 jdolecek Exp $ */ +/* $NetBSD: sd.c,v 1.5 2024/07/02 05:26:40 rin Exp $ */ /* * Copyright (c) 2010 KIYOHARA Takashi * All rights reserved. @@ -568,10 +568,9 @@ sdopen(struct open_file *f, ...) { struct sd_softc *sd; struct scsi_test_unit_ready cmd; - struct scsipi_inquiry_data *inqbuf; + struct scsipi_inquiry_data buf, *inqbuf = &buf; u_int bus, target, lun, part; int error; - char buf[SCSIPI_INQUIRY_LENGTH_SCSI2]; va_list ap; va_start(ap, f); @@ -594,11 +593,10 @@ sdopen(struct open_file *f, ...) sd->sc_target = target; sd->sc_bus = bus; - if ((error = scsi_inquire(sd, sizeof(buf), buf)) != 0) + error = scsi_inquire(sd, SCSIPI_INQUIRY_LENGTH_SCSI2, inqbuf); + if (error != 0) return error; - inqbuf = (struct scsipi_inquiry_data *)buf; - sd->sc_type = inqbuf->device & SID_TYPE; /* Index: src/sys/arch/prep/stand/boot/siop.c diff -u src/sys/arch/prep/stand/boot/siop.c:1.8 src/sys/arch/prep/stand/boot/siop.c:1.9 --- src/sys/arch/prep/stand/boot/siop.c:1.8 Thu Feb 8 19:44:08 2024 +++ src/sys/arch/prep/stand/boot/siop.c Tue Jul 2 05:26:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: siop.c,v 1.8 2024/02/08 19:44:08 andvar Exp $ */ +/* $NetBSD: siop.c,v 1.9 2024/07/02 05:26:40 rin Exp $ */ /* * Copyright (c) 2010 KIYOHARA Takashi * All rights reserved. @@ -65,7 +65,7 @@ static void siop_xfer_setup(struct siop_ static int siop_add_reselsw(struct siop_adapter *, int, int); static void siop_update_scntl3(struct siop_adapter *, int, int); -static int _scsi_inquire(struct siop_adapter *, int, int, int, char *); +static int _scsi_inquire(struct siop_adapter *, int, int, int, void *); static void scsi_request_sense(struct siop_adapter *, struct scsi_xfer *); static int scsi_interpret_sense(struct siop_adapter *, struct scsi_xfer *); static int scsi_probe(struct siop_adapter *); @@ -764,7 +764,7 @@ siop_update_scntl3(struct siop_adapter * */ static int -_scsi_inquire(struct siop_adapter *adp, int t, int l, int buflen, char *buf) +_scsi_inquire(struct siop_adapter *adp, int t, int l, int buflen, void *buf) { struct scsipi_inquiry *cmd = (struct scsipi_inquiry *)adp->cmd; struct scsipi_inquiry_data *inqbuf = @@ -1012,21 +1012,20 @@ scsi_interpret_sense(struct siop_adapter static int scsi_probe(struct siop_adapter *adp) { - struct scsipi_inquiry_data *inqbuf; + struct scsipi_inquiry_data buf, *inqbuf = &buf; int found, t, l; uint8_t device; - char buf[SCSIPI_INQUIRY_LENGTH_SCSI2], - product[sizeof(inqbuf->product) + 1]; + char product[sizeof(inqbuf->product) + 1]; found = 0; for (t = 0; t < 8; t++) { if (t == adp->id) continue; for (l = 0; l < 8; l++) { - if (_scsi_inquire(adp, t, l, sizeof(buf), buf) != 0) + if (_scsi_inquire(adp, t, l, + SCSIPI_INQUIRY_LENGTH_SCSI2, inqbuf) != 0) continue; - inqbuf = (struct scsipi_inquiry_data *)buf; device = inqbuf->device & SID_TYPE; if (device == T_NODEVICE) continue;