From: "Ted Unangst" Subject: Re: /sbin/scsi bugfixes To: "Crystal Kolipe" Cc: tech@openbsd.org Date: Thu, 15 May 2025 15:19:15 -0400 On 2025-05-15, Crystal Kolipe wrote: I think this code would benefit from the introduction of some variables. int page3 = (page & 0x3f) == 0x3; int offset = page3 ? 3 : 5; for (i = 0; i < (mh->mdl - mh->bdl - offset; i++) something like that. > --- scsi.c.dist Sun Dec 4 23:50:47 2022 > +++ scsi.c Thu May 15 15:02:58 2025 > @@ -804,10 +804,23 @@ > */ > mh = (struct mode_header *)data; > mph = (struct mode_page_header *)(((char *)mh) + sizeof(*mh) + mh->bdl); > - mode_pars = (char *)mph + sizeof(*mph); > > + /* > + * If the data length was just block descriptors and the three header > + * bytes, we're done. > + */ > + if (mh->bdl + 3 >= mh->mdl) > + return ; > + > + /* > + * Skip mode page header unless we are requesting page 0x3f, (all pages) > + */ > + > + mode_pars = (char *)mph + (((page & 0x3f) == 0x3f) ? 0 : sizeof(*mph)); > + > if (!fmt) { > - for (i = 0; i < mh->mdl; i++) { > + for (i = 0; i < (mh->mdl - mh->bdl - > + (((page & 0x3f) == 0x3f) ? 3 : 5)); i++) { > printf("%02x%c",mode_pars[i], > (((i + 1) % 8) == 0) ? '\n' : ' '); > } > >