Theo de Raadt wrote: > This change is really weird. > > %n in a scanning string isn't the same as %n in a format string. > > Is clang mistakenly flagging %n in scanning strings? That might be a > mistake. clang should only be inspecting *printf style format strings.
No, clang is doing it right. I'm doing it wrong here. > The change to libc has no impact on scanning strings. scanning strings > with *scanf are *full* of pointer-store requests. scanning strings are > not used in attacks, only output format strings are used in attacks. We > are only changing the behaviour of output format strings. I was told this already. My assumption was that that input parsing is affected as well. > Furthermore, this change doesn't seem like a no-op. It is reformatting > the string. Upon input, the scanf could plausibly be insensitive to > leading 0's, spaces, etc etc. And that is the %n input length. But by > reprinting the string and creating a new string, you have a different > string and different length. Indeed. The diff should be discarded. > Does that matter? I don't know, but the change is dubious without > studying to make sure it isn't a new problem. > > Stefan Hagen <sh+openbsd-po...@codevoid.de> wrote: > > > Hi, > > > > This removes the '%n' format specifier from sysutils/cdrtools. > > > > Test: %n is used to align this list and it works like before: > > > > # cdrecord -scanbus > > Cdrecord-ProDVD-ProBD-Clone 3.00 (amd64-unknown-openbsd7.0) Copyright (C) > > 1995-2010 J�rg Schilling > > Using libscg version 'schily-0.9'. > > scsibus3: > > 3,0,0 300) * > > 3,1,0 301) 'MATSHITA' 'BD-MLT UJ272 ' '1.02' Removable CD-ROM > > 3,2,0 302) * > > 3,3,0 303) * > > 3,4,0 304) * > > 3,5,0 305) * > > 3,6,0 306) * > > 3,7,0 307) * > > > > Best regards, > > Stefan > > > > Index: sysutils/cdrtools/Makefile > > =================================================================== > > RCS file: /cvs/ports/sysutils/cdrtools/Makefile,v > > retrieving revision 1.23 > > diff -u -p -u -p -r1.23 Makefile > > --- sysutils/cdrtools/Makefile 12 Jul 2019 20:49:40 -0000 1.23 > > +++ sysutils/cdrtools/Makefile 10 Sep 2021 18:01:10 -0000 > > @@ -3,7 +3,7 @@ > > COMMENT= ISO 9660 filesystem and CD/DVD/BD creation tools > > > > DISTNAME= cdrtools-3.00 > > -REVISION= 1 > > +REVISION= 2 > > CATEGORIES= sysutils > > HOMEPAGE= http://cdrtools.sourceforge.net/private/cdrtools.html > > > > Index: sysutils/cdrtools/patches/patch-libscg_scsi-unixware_c > > =================================================================== > > RCS file: sysutils/cdrtools/patches/patch-libscg_scsi-unixware_c > > diff -N sysutils/cdrtools/patches/patch-libscg_scsi-unixware_c > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > +++ sysutils/cdrtools/patches/patch-libscg_scsi-unixware_c 10 Sep 2021 > > 18:01:10 -0000 > > @@ -0,0 +1,35 @@ > > +$OpenBSD$ > > + > > +Remove format specifier %n > > + > > +Index: libscg/scsi-unixware.c > > +--- libscg/scsi-unixware.c.orig > > ++++ libscg/scsi-unixware.c > > +@@ -75,8 +75,8 @@ LOCAL char _scg_trans_version[] = > > "scsi-unixware.c-1.3 > > + #define DEV_DIR "/tmp" > > + #define DEV_NAME "scg.s%1dt%1dl%1d" > > + > > +-#define SCAN_HBA "%d:%d,%d,%d:%7s : %n" > > +-#define SCAN_DEV "%d,%d,%d:%7s : %n" > > ++#define SCAN_HBA "%d:%d,%d,%d:%7s : " > > ++#define SCAN_DEV "%d,%d,%d:%7s : " > > + > > + #define PRIM_HBA "/dev/hba/hba1" > > + #define SCSI_CFG "LC_ALL=C /etc/scsi/pdiconfig -l" > > +@@ -257,11 +257,14 @@ extern char **environ; > > + memset(class, '\0', sizeof (class)); > > + memset(ident, '\0', sizeof (ident)); > > + > > ++ char tmp[MAXLINE]; > > + if (lines[0] == ' ') { > > +- sscanf(lines, SCAN_DEV, &bus, &tgt, &lun, class, &pos); > > ++ sscanf(lines, SCAN_DEV, &bus, &tgt, &lun, class); > > ++ pos = snprintf(tmp, sizeof(tmp), SCAN_DEV, bus, tgt, > > lun, class); > > + hba = lhba; > > + } else { > > +- sscanf(lines, SCAN_HBA, &hba, &bus, &tgt, &lun, class, > > &pos); > > ++ sscanf(lines, SCAN_HBA, &hba, &bus, &tgt, &lun, class); > > ++ pos = snprintf(tmp, sizeof(tmp), SCAN_HBA, hba, bus, > > tgt, lun, class); > > + nscg++; > > + lhba = hba; > > + atapi = 0;