Module Name: src Committed By: christos Date: Mon May 2 19:18:29 UTC 2016
Modified Files: src/sys/dev/ata: ld_ataraid.c src/sys/dev/ic: ahcisata_core.c mpt_netbsd.c mvsata.c nvme.c siisata.c src/sys/dev/pci: arcmsr.c mpii.c src/sys/dev/scsipi: atapi_wdc.c scsiconf.c scsipiconf.c scsipiconf.h src/sys/dev/usb: umass_scsipi.c src/sys/lib/libkern: Makefile.libkern libkern.h Added Files: src/sys/lib/libkern: strnvisx.c Log Message: move scsipi_strvis -> libkern:strnvisx() change the prototype to match userland fix sizes of strings passed to it To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/dev/ata/ld_ataraid.c cvs rdiff -u -r1.55 -r1.56 src/sys/dev/ic/ahcisata_core.c cvs rdiff -u -r1.32 -r1.33 src/sys/dev/ic/mpt_netbsd.c cvs rdiff -u -r1.34 -r1.35 src/sys/dev/ic/mvsata.c cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ic/nvme.c cvs rdiff -u -r1.27 -r1.28 src/sys/dev/ic/siisata.c cvs rdiff -u -r1.32 -r1.33 src/sys/dev/pci/arcmsr.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/pci/mpii.c cvs rdiff -u -r1.121 -r1.122 src/sys/dev/scsipi/atapi_wdc.c cvs rdiff -u -r1.273 -r1.274 src/sys/dev/scsipi/scsiconf.c cvs rdiff -u -r1.40 -r1.41 src/sys/dev/scsipi/scsipiconf.c cvs rdiff -u -r1.122 -r1.123 src/sys/dev/scsipi/scsipiconf.h cvs rdiff -u -r1.50 -r1.51 src/sys/dev/usb/umass_scsipi.c cvs rdiff -u -r1.38 -r1.39 src/sys/lib/libkern/Makefile.libkern cvs rdiff -u -r1.121 -r1.122 src/sys/lib/libkern/libkern.h cvs rdiff -u -r0 -r1.1 src/sys/lib/libkern/strnvisx.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/dev/ata/ld_ataraid.c diff -u src/sys/dev/ata/ld_ataraid.c:1.40 src/sys/dev/ata/ld_ataraid.c:1.41 --- src/sys/dev/ata/ld_ataraid.c:1.40 Mon Apr 13 12:33:24 2015 +++ src/sys/dev/ata/ld_ataraid.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ld_ataraid.c,v 1.40 2015/04/13 16:33:24 riastradh Exp $ */ +/* $NetBSD: ld_ataraid.c,v 1.41 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -47,7 +47,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.40 2015/04/13 16:33:24 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.41 2016/05/02 19:18:29 christos Exp $"); #include "bio.h" @@ -698,12 +698,12 @@ ld_ataraid_biodisk(struct ld_ataraid_sof strlcpy(bd->bd_procdev, device_xname(adi->adi_dev), sizeof(bd->bd_procdev)); - scsipi_strvis(serial, sizeof(serial), wd->sc_params.atap_serial, - sizeof(wd->sc_params.atap_serial)); - scsipi_strvis(model, sizeof(model), wd->sc_params.atap_model, - sizeof(wd->sc_params.atap_model)); - scsipi_strvis(rev, sizeof(rev), wd->sc_params.atap_revision, - sizeof(wd->sc_params.atap_revision)); + strnvisx(serial, sizeof(serial), wd->sc_params.atap_serial, + sizeof(wd->sc_params.atap_serial), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(model, sizeof(model), wd->sc_params.atap_model, + sizeof(wd->sc_params.atap_model), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(rev, sizeof(rev), wd->sc_params.atap_revision, + sizeof(wd->sc_params.atap_revision), VIS_TRIM|VIS_SAFE|VIS_OCTAL); snprintf(bd->bd_vendor, sizeof(bd->bd_vendor), "%s %s", model, rev); strlcpy(bd->bd_serial, serial, sizeof(bd->bd_serial)); Index: src/sys/dev/ic/ahcisata_core.c diff -u src/sys/dev/ic/ahcisata_core.c:1.55 src/sys/dev/ic/ahcisata_core.c:1.56 --- src/sys/dev/ic/ahcisata_core.c:1.55 Tue Nov 10 21:43:09 2015 +++ src/sys/dev/ic/ahcisata_core.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ahcisata_core.c,v 1.55 2015/11/11 02:43:09 jakllsch Exp $ */ +/* $NetBSD: ahcisata_core.c,v 1.56 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.55 2015/11/11 02:43:09 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.56 2016/05/02 19:18:29 christos Exp $"); #include <sys/types.h> #include <sys/malloc.h> @@ -1846,11 +1846,12 @@ ahci_atapi_probe_device(struct atapibus_ sa.sa_inqbuf.type = ATAPI_CFG_TYPE(id->atap_config); sa.sa_inqbuf.removable = id->atap_config & ATAPI_CFG_REMOV ? T_REMOV : T_FIXED; - scsipi_strvis((u_char *)model, 40, id->atap_model, 40); - scsipi_strvis((u_char *)serial_number, 20, id->atap_serial, - 20); - scsipi_strvis((u_char *)firmware_revision, 8, - id->atap_revision, 8); + strnvisx(model, sizeof(model), id->atap_model, 40, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(serial_number, sizeof(serial_number), id->atap_serial, + 20, VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(firmware_revision, sizeof(firmware_revision), + id->atap_revision, 8, VIS_TRIM|VIS_SAFE|VIS_OCTAL); sa.sa_inqbuf.vendor = model; sa.sa_inqbuf.product = serial_number; sa.sa_inqbuf.revision = firmware_revision; Index: src/sys/dev/ic/mpt_netbsd.c diff -u src/sys/dev/ic/mpt_netbsd.c:1.32 src/sys/dev/ic/mpt_netbsd.c:1.33 --- src/sys/dev/ic/mpt_netbsd.c:1.32 Wed Jul 22 04:33:51 2015 +++ src/sys/dev/ic/mpt_netbsd.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: mpt_netbsd.c,v 1.32 2015/07/22 08:33:51 hannken Exp $ */ +/* $NetBSD: mpt_netbsd.c,v 1.33 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpt_netbsd.c,v 1.32 2015/07/22 08:33:51 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpt_netbsd.c,v 1.33 2016/05/02 19:18:29 christos Exp $"); #include "bio.h" @@ -1857,12 +1857,15 @@ mpt_bio_ioctl_vol(mpt_softc_t *mpt, stru memset(&inqbuf, 0, sizeof(inqbuf)); if (scsipi_inquire(periph, &inqbuf, XS_CTL_DISCOVERY | XS_CTL_SILENT) == 0) { - scsipi_strvis(vendor, sizeof(vendor), - inqbuf.vendor, sizeof(inqbuf.vendor)); - scsipi_strvis(product, sizeof(product), - inqbuf.product, sizeof(inqbuf.product)); - scsipi_strvis(revision, sizeof(revision), - inqbuf.revision, sizeof(inqbuf.revision)); + strnvisx(vendor, sizeof(vendor), + inqbuf.vendor, sizeof(inqbuf.vendor), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(product, sizeof(product), + inqbuf.product, sizeof(inqbuf.product), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(revision, sizeof(revision), + inqbuf.revision, sizeof(inqbuf.revision), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); snprintf(bv->bv_vendor, sizeof(bv->bv_vendor), "%s %s %s", vendor, product, revision); @@ -1927,13 +1930,16 @@ mpt_bio_ioctl_disk_common(mpt_softc_t *m if (phys == NULL) return; - scsipi_strvis(vendor_id, sizeof(vendor_id), - phys->InquiryData.VendorID, sizeof(phys->InquiryData.VendorID)); - scsipi_strvis(product_id, sizeof(product_id), - phys->InquiryData.ProductID, sizeof(phys->InquiryData.ProductID)); - scsipi_strvis(product_rev_level, sizeof(product_rev_level), + strnvisx(vendor_id, sizeof(vendor_id), + phys->InquiryData.VendorID, sizeof(phys->InquiryData.VendorID), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(product_id, sizeof(product_id), + phys->InquiryData.ProductID, sizeof(phys->InquiryData.ProductID), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(product_rev_level, sizeof(product_rev_level), phys->InquiryData.ProductRevLevel, - sizeof(phys->InquiryData.ProductRevLevel)); + sizeof(phys->InquiryData.ProductRevLevel), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); snprintf(bd->bd_vendor, sizeof(bd->bd_vendor), "%s %s %s", vendor_id, product_id, product_rev_level); Index: src/sys/dev/ic/mvsata.c diff -u src/sys/dev/ic/mvsata.c:1.34 src/sys/dev/ic/mvsata.c:1.35 --- src/sys/dev/ic/mvsata.c:1.34 Fri Jan 2 14:42:07 2015 +++ src/sys/dev/ic/mvsata.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: mvsata.c,v 1.34 2015/01/02 19:42:07 christos Exp $ */ +/* $NetBSD: mvsata.c,v 1.35 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 2008 KIYOHARA Takashi * All rights reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.34 2015/01/02 19:42:07 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.35 2016/05/02 19:18:29 christos Exp $"); #include "opt_mvsata.h" @@ -888,10 +888,12 @@ mvsata_atapi_probe_device(struct atapibu sa.sa_inqbuf.type = ATAPI_CFG_TYPE(id->atap_config); sa.sa_inqbuf.removable = id->atap_config & ATAPI_CFG_REMOV ? T_REMOV : T_FIXED; - scsipi_strvis((u_char *)model, 40, id->atap_model, 40); - scsipi_strvis((u_char *)serial_number, 20, id->atap_serial, 20); - scsipi_strvis((u_char *)firmware_revision, 8, id->atap_revision, - 8); + strnvisx(model, sizeof(model), id->atap_model, 40, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(serial_number, sizeof(serial_number), id->atap_serial, + 20, VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(firmware_revision, sizeof(firmware_revision), + id->atap_revision, 8, VIS_TRIM|VIS_SAFE|VIS_OCTAL); sa.sa_inqbuf.vendor = model; sa.sa_inqbuf.product = serial_number; sa.sa_inqbuf.revision = firmware_revision; Index: src/sys/dev/ic/nvme.c diff -u src/sys/dev/ic/nvme.c:1.1 src/sys/dev/ic/nvme.c:1.2 --- src/sys/dev/ic/nvme.c:1.1 Sun May 1 06:21:02 2016 +++ src/sys/dev/ic/nvme.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nvme.c,v 1.1 2016/05/01 10:21:02 nonaka Exp $ */ +/* $NetBSD: nvme.c,v 1.2 2016/05/02 19:18:29 christos Exp $ */ /* $OpenBSD: nvme.c,v 1.49 2016/04/18 05:59:50 dlg Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.1 2016/05/01 10:21:02 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.2 2016/05/02 19:18:29 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -95,8 +95,6 @@ static void nvme_ns_sync_fill(struct nvm static void nvme_ns_sync_done(struct nvme_queue *, struct nvme_ccb *, struct nvme_cqe *); -static void nvme_strvis(u_char *, int, const u_char *, int); - #define nvme_read4(_s, _r) \ bus_space_read_4((_s)->sc_iot, (_s)->sc_ioh, (_r)) #define nvme_write4(_s, _r, _v) \ @@ -900,9 +898,12 @@ nvme_identify(struct nvme_softc *sc, u_i identify = NVME_DMA_KVA(mem); - nvme_strvis(sn, sizeof(sn), identify->sn, sizeof(identify->sn)); - nvme_strvis(mn, sizeof(mn), identify->mn, sizeof(identify->mn)); - nvme_strvis(fr, sizeof(fr), identify->fr, sizeof(identify->fr)); + strnvisx(sn, sizeof(sn), (const char *)identify->sn, + sizeof(identify->sn), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(mn, sizeof(mn), (const char *)identify->mn, + sizeof(identify->mn), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(fr, sizeof(fr), (const char *)identify->fr, + sizeof(identify->fr), VIS_TRIM|VIS_SAFE|VIS_OCTAL); aprint_normal_dev(sc->sc_dev, "%s, firmware %s, serial %s\n", mn, fr, sn); @@ -1288,46 +1289,3 @@ nvme_dmamem_free(struct nvme_softc *sc, bus_dmamap_destroy(sc->sc_dmat, ndm->ndm_map); kmem_free(ndm, sizeof(*ndm)); } - -/* - * Copy of sys/dev/scsipi/scsipiconf.c:scsipi_strvis() - */ -static void -nvme_strvis(u_char *dst, int dlen, const u_char *src, int slen) -{ - -#define STRVIS_ISWHITE(x) ((x) == ' ' || (x) == '\0' || (x) == (u_char)'\377') - /* Trim leading and trailing blanks and NULs. */ - while (slen > 0 && STRVIS_ISWHITE(src[0])) - ++src, --slen; - while (slen > 0 && STRVIS_ISWHITE(src[slen - 1])) - --slen; - - while (slen > 0) { - if (*src < 0x20 || *src >= 0x80) { - /* non-printable characters */ - dlen -= 4; - if (dlen < 1) - break; - *dst++ = '\\'; - *dst++ = ((*src & 0300) >> 6) + '0'; - *dst++ = ((*src & 0070) >> 3) + '0'; - *dst++ = ((*src & 0007) >> 0) + '0'; - } else if (*src == '\\') { - /* quote characters */ - dlen -= 2; - if (dlen < 1) - break; - *dst++ = '\\'; - *dst++ = '\\'; - } else { - /* normal characters */ - if (--dlen < 1) - break; - *dst++ = *src; - } - ++src, --slen; - } - - *dst++ = 0; -} Index: src/sys/dev/ic/siisata.c diff -u src/sys/dev/ic/siisata.c:1.27 src/sys/dev/ic/siisata.c:1.28 --- src/sys/dev/ic/siisata.c:1.27 Thu Aug 8 13:38:56 2013 +++ src/sys/dev/ic/siisata.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: siisata.c,v 1.27 2013/08/08 17:38:56 bouyer Exp $ */ +/* $NetBSD: siisata.c,v 1.28 2016/05/02 19:18:29 christos Exp $ */ /* from ahcisata_core.c */ @@ -79,7 +79,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.27 2013/08/08 17:38:56 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.28 2016/05/02 19:18:29 christos Exp $"); #include <sys/types.h> #include <sys/malloc.h> @@ -1459,11 +1459,12 @@ siisata_atapi_probe_device(struct atapib sa.sa_inqbuf.type = ATAPI_CFG_TYPE(id->atap_config); sa.sa_inqbuf.removable = id->atap_config & ATAPI_CFG_REMOV ? T_REMOV : T_FIXED; - scsipi_strvis((u_char *)model, 40, id->atap_model, 40); - scsipi_strvis((u_char *)serial_number, 20, - id->atap_serial, 20); - scsipi_strvis((u_char *)firmware_revision, 8, - id->atap_revision, 8); + strnvisx(model, sizeof(model), id->atap_model, 40, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(serial_number, sizeof(serial_number), + id->atap_serial, 20, VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(firmware_revision, sizeof(firmware_revision), + id->atap_revision, 8, VIS_TRIM|VIS_SAFE|VIS_OCTAL); sa.sa_inqbuf.vendor = model; sa.sa_inqbuf.product = serial_number; sa.sa_inqbuf.revision = firmware_revision; Index: src/sys/dev/pci/arcmsr.c diff -u src/sys/dev/pci/arcmsr.c:1.32 src/sys/dev/pci/arcmsr.c:1.33 --- src/sys/dev/pci/arcmsr.c:1.32 Thu Mar 12 11:33:10 2015 +++ src/sys/dev/pci/arcmsr.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: arcmsr.c,v 1.32 2015/03/12 15:33:10 christos Exp $ */ +/* $NetBSD: arcmsr.c,v 1.33 2016/05/02 19:18:29 christos Exp $ */ /* $OpenBSD: arc.c,v 1.68 2007/10/27 03:28:27 dlg Exp $ */ /* @@ -21,7 +21,7 @@ #include "bio.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: arcmsr.c,v 1.32 2015/03/12 15:33:10 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: arcmsr.c,v 1.33 2016/05/02 19:18:29 christos Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -635,15 +635,18 @@ arc_query_firmware(device_t self) DNPRINTF(ARC_D_INIT, "%s: sata_ports: %d\n", device_xname(self), htole32(fwinfo.sata_ports)); - scsipi_strvis(string, 81, fwinfo.vendor, sizeof(fwinfo.vendor)); + strnvisx(string, sizeof(string), fwinfo.vendor, sizeof(fwinfo.vendor), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); DNPRINTF(ARC_D_INIT, "%s: vendor: \"%s\"\n", device_xname(self), string); - scsipi_strvis(string, 17, fwinfo.model, sizeof(fwinfo.model)); + strnvisx(string, sizeof(string), fwinfo.model, sizeof(fwinfo.model), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); aprint_normal_dev(self, "Areca %s Host Adapter RAID controller\n", string); - scsipi_strvis(string, 33, fwinfo.fw_version, sizeof(fwinfo.fw_version)); + strnvisx(string, sizeof(string), fwinfo.fw_version, + sizeof(fwinfo.fw_version), VIS_TRIM|VIS_SAFE|VIS_OCTAL); DNPRINTF(ARC_D_INIT, "%s: version: \"%s\"\n", device_xname(self), string); @@ -1328,8 +1331,8 @@ arc_bio_vol(struct arc_softc *sc, struct bv->bv_nodisk = volinfo->member_disks; bv->bv_stripe_size = volinfo->stripe_size / 2; snprintf(bv->bv_dev, sizeof(bv->bv_dev), "sd%d", bv->bv_volid); - scsipi_strvis(bv->bv_vendor, sizeof(bv->bv_vendor), volinfo->set_name, - sizeof(volinfo->set_name)); + strnvisx(bv->bv_vendor, sizeof(bv->bv_vendor), volinfo->set_name, + sizeof(volinfo->set_name), VIS_TRIM|VIS_SAFE|VIS_OCTAL); out: kmem_free(volinfo, sizeof(*volinfo)); @@ -1417,10 +1420,12 @@ arc_bio_disk_filldata(struct arc_softc * blocks += (uint64_t)htole32(diskinfo->capacity); bd->bd_size = blocks * ARC_BLOCKSIZE; /* XXX */ - scsipi_strvis(model, 81, diskinfo->model, sizeof(diskinfo->model)); - scsipi_strvis(serial, 41, diskinfo->serial, sizeof(diskinfo->serial)); - scsipi_strvis(rev, 17, diskinfo->firmware_rev, - sizeof(diskinfo->firmware_rev)); + strnvisx(model, sizeof(model), diskinfo->model, + sizeof(diskinfo->model), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(serial, sizeof(serial), diskinfo->serial, + sizeof(diskinfo->serial), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(rev, sizeof(rev), diskinfo->firmware_rev, + sizeof(diskinfo->firmware_rev), VIS_TRIM|VIS_SAFE|VIS_OCTAL); snprintf(bd->bd_vendor, sizeof(bd->bd_vendor), "%s %s", model, rev); strlcpy(bd->bd_serial, serial, sizeof(bd->bd_serial)); Index: src/sys/dev/pci/mpii.c diff -u src/sys/dev/pci/mpii.c:1.7 src/sys/dev/pci/mpii.c:1.8 --- src/sys/dev/pci/mpii.c:1.7 Mon Feb 8 11:27:51 2016 +++ src/sys/dev/pci/mpii.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: mpii.c,v 1.7 2016/02/08 16:27:51 christos Exp $ */ +/* $NetBSD: mpii.c,v 1.8 2016/05/02 19:18:29 christos Exp $ */ /* OpenBSD: mpii.c,v 1.51 2012/04/11 13:29:14 naddy Exp */ /* * Copyright (c) 2010 Mike Belopuhov <m...@crypt.org.ru> @@ -20,7 +20,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpii.c,v 1.7 2016/02/08 16:27:51 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpii.c,v 1.8 2016/05/02 19:18:29 christos Exp $"); #include "bio.h" @@ -5398,14 +5398,16 @@ mpii_bio_disk(struct mpii_softc *sc, str bd->bd_size = le64toh(ppg->dev_max_lba) * le16toh(ppg->block_size); - scsipi_strvis(bd->bd_vendor, sizeof(bd->bd_vendor), - ppg->vendor_id, sizeof(ppg->vendor_id)); + strnvisx(bd->bd_vendor, sizeof(bd->bd_vendor), + ppg->vendor_id, sizeof(ppg->vendor_id), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); len = strlen(bd->bd_vendor); bd->bd_vendor[len] = ' '; - scsipi_strvis(&bd->bd_vendor[len + 1], sizeof(ppg->vendor_id) - len - 1, - ppg->product_id, sizeof(ppg->product_id)); - scsipi_strvis(bd->bd_serial, sizeof(bd->bd_serial), - ppg->serial, sizeof(ppg->serial)); + strnvisx(&bd->bd_vendor[len + 1], sizeof(ppg->vendor_id) - len - 1, + ppg->product_id, sizeof(ppg->product_id), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(bd->bd_serial, sizeof(bd->bd_serial), + ppg->serial, sizeof(ppg->serial), VIS_TRIM|VIS_SAFE|VIS_OCTAL); free(ppg, M_TEMP); return (0); Index: src/sys/dev/scsipi/atapi_wdc.c diff -u src/sys/dev/scsipi/atapi_wdc.c:1.121 src/sys/dev/scsipi/atapi_wdc.c:1.122 --- src/sys/dev/scsipi/atapi_wdc.c:1.121 Sun Mar 20 06:29:12 2016 +++ src/sys/dev/scsipi/atapi_wdc.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: atapi_wdc.c,v 1.121 2016/03/20 10:29:12 tsutsui Exp $ */ +/* $NetBSD: atapi_wdc.c,v 1.122 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: atapi_wdc.c,v 1.121 2016/03/20 10:29:12 tsutsui Exp $"); +__KERNEL_RCSID(0, "$NetBSD: atapi_wdc.c,v 1.122 2016/05/02 19:18:29 christos Exp $"); #ifndef ATADEBUG #define ATADEBUG @@ -298,11 +298,14 @@ wdc_atapi_probe_device(struct atapibus_s sa.sa_inqbuf.type = ATAPI_CFG_TYPE(id->atap_config); sa.sa_inqbuf.removable = id->atap_config & ATAPI_CFG_REMOV ? T_REMOV : T_FIXED; - scsipi_strvis((u_char *)model, 40, id->atap_model, 40); - scsipi_strvis((u_char *)serial_number, 20, id->atap_serial, - 20); - scsipi_strvis((u_char *)firmware_revision, 8, - id->atap_revision, 8); + strnvisx(model, sizeof(model), id->atap_model, + sizeof(id->atap_model), VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(serial_number, sizeof(serial_number), + id->atap_serial, sizeof(id->atap_serial), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(firmware_revision, sizeof(firmware_revision), + id->atap_revision, sizeof(id->atap_revision), + VIS_TRIM|VIS_SAFE|VIS_OCTAL); sa.sa_inqbuf.vendor = model; sa.sa_inqbuf.product = serial_number; sa.sa_inqbuf.revision = firmware_revision; Index: src/sys/dev/scsipi/scsiconf.c diff -u src/sys/dev/scsipi/scsiconf.c:1.273 src/sys/dev/scsipi/scsiconf.c:1.274 --- src/sys/dev/scsipi/scsiconf.c:1.273 Fri Jul 25 04:10:38 2014 +++ src/sys/dev/scsipi/scsiconf.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: scsiconf.c,v 1.273 2014/07/25 08:10:38 dholland Exp $ */ +/* $NetBSD: scsiconf.c,v 1.274 2016/05/02 19:18:29 christos Exp $ */ /*- * Copyright (c) 1998, 1999, 2004 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: scsiconf.c,v 1.273 2014/07/25 08:10:38 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: scsiconf.c,v 1.274 2016/05/02 19:18:29 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -493,9 +493,12 @@ scsibusprint(void *aux, const char *pnp) dtype = scsipi_dtype(type); - scsipi_strvis(vendor, 33, inqbuf->vendor, 8); - scsipi_strvis(product, 65, inqbuf->product, 16); - scsipi_strvis(revision, 17, inqbuf->revision, 4); + strnvisx(vendor, sizeof(vendor), inqbuf->vendor, 8, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(product, sizeof(product), inqbuf->product, 16, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(revision, sizeof(revision), inqbuf->revision, 4, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); aprint_normal(" target %d lun %d: <%s, %s, %s> %s %s", target, lun, vendor, product, revision, dtype, Index: src/sys/dev/scsipi/scsipiconf.c diff -u src/sys/dev/scsipi/scsipiconf.c:1.40 src/sys/dev/scsipi/scsipiconf.c:1.41 --- src/sys/dev/scsipi/scsipiconf.c:1.40 Sat Aug 21 09:18:36 2010 +++ src/sys/dev/scsipi/scsipiconf.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: scsipiconf.c,v 1.40 2010/08/21 13:18:36 pgoyette Exp $ */ +/* $NetBSD: scsipiconf.c,v 1.41 2016/05/02 19:18:29 christos Exp $ */ /*- * Copyright (c) 1998, 1999, 2004 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: scsipiconf.c,v 1.40 2010/08/21 13:18:36 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: scsipiconf.c,v 1.41 2016/05/02 19:18:29 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -61,7 +61,6 @@ __KERNEL_RCSID(0, "$NetBSD: scsipiconf.c #include <dev/scsipi/scsipiconf.h> #include <dev/scsipi/scsipi_base.h> -#define STRVIS_ISWHITE(x) ((x) == ' ' || (x) == '\0' || (x) == (u_char)'\377') /* Function pointers and stub routines for scsiverbose module */ int (*scsipi_print_sense)(struct scsipi_xfer *, int) = scsipi_print_sense_stub; @@ -256,42 +255,3 @@ scsipi_dtype(int type) } return (dtype); } - -void -scsipi_strvis(u_char *dst, int dlen, const u_char *src, int slen) -{ - - /* Trim leading and trailing blanks and NULs. */ - while (slen > 0 && STRVIS_ISWHITE(src[0])) - ++src, --slen; - while (slen > 0 && STRVIS_ISWHITE(src[slen - 1])) - --slen; - - while (slen > 0) { - if (*src < 0x20 || *src >= 0x80) { - /* non-printable characters */ - dlen -= 4; - if (dlen < 1) - break; - *dst++ = '\\'; - *dst++ = ((*src & 0300) >> 6) + '0'; - *dst++ = ((*src & 0070) >> 3) + '0'; - *dst++ = ((*src & 0007) >> 0) + '0'; - } else if (*src == '\\') { - /* quote characters */ - dlen -= 2; - if (dlen < 1) - break; - *dst++ = '\\'; - *dst++ = '\\'; - } else { - /* normal characters */ - if (--dlen < 1) - break; - *dst++ = *src; - } - ++src, --slen; - } - - *dst++ = 0; -} Index: src/sys/dev/scsipi/scsipiconf.h diff -u src/sys/dev/scsipi/scsipiconf.h:1.122 src/sys/dev/scsipi/scsipiconf.h:1.123 --- src/sys/dev/scsipi/scsipiconf.h:1.122 Sun Jul 13 13:12:23 2014 +++ src/sys/dev/scsipi/scsipiconf.h Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: scsipiconf.h,v 1.122 2014/07/13 17:12:23 dholland Exp $ */ +/* $NetBSD: scsipiconf.h,v 1.123 2016/05/02 19:18:29 christos Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2004 The NetBSD Foundation, Inc. @@ -642,7 +642,6 @@ void scsipi_create_completion_thread(voi const void *scsipi_inqmatch(struct scsipi_inquiry_pattern *, const void *, size_t, size_t, int *); const char *scsipi_dtype(int); -void scsipi_strvis(u_char *, int, const u_char *, int); int scsipi_execute_xs(struct scsipi_xfer *); int scsipi_test_unit_ready(struct scsipi_periph *, int); int scsipi_prevent(struct scsipi_periph *, int, int); Index: src/sys/dev/usb/umass_scsipi.c diff -u src/sys/dev/usb/umass_scsipi.c:1.50 src/sys/dev/usb/umass_scsipi.c:1.51 --- src/sys/dev/usb/umass_scsipi.c:1.50 Sat Apr 23 06:15:32 2016 +++ src/sys/dev/usb/umass_scsipi.c Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: umass_scsipi.c,v 1.50 2016/04/23 10:15:32 skrll Exp $ */ +/* $NetBSD: umass_scsipi.c,v 1.51 2016/05/02 19:18:29 christos Exp $ */ /* * Copyright (c) 2001, 2003, 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.50 2016/04/23 10:15:32 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.51 2016/05/02 19:18:29 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -555,9 +555,12 @@ umass_atapi_probe_device(struct atapibus return; } - scsipi_strvis(vendor, 33, inqbuf.vendor, 8); - scsipi_strvis(product, 65, inqbuf.product, 16); - scsipi_strvis(revision, 17, inqbuf.revision, 4); + strnvisx(vendor, sizeof(vendor), inqbuf.vendor, 8, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(product, sizeof(product), inqbuf.product, 16, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); + strnvisx(revision, sizeof(revision), inqbuf.revision, 4, + VIS_TRIM|VIS_SAFE|VIS_OCTAL); sa.sa_periph = periph; sa.sa_inqbuf.type = inqbuf.device; Index: src/sys/lib/libkern/Makefile.libkern diff -u src/sys/lib/libkern/Makefile.libkern:1.38 src/sys/lib/libkern/Makefile.libkern:1.39 --- src/sys/lib/libkern/Makefile.libkern:1.38 Wed Apr 15 15:13:47 2015 +++ src/sys/lib/libkern/Makefile.libkern Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.libkern,v 1.38 2015/04/15 19:13:47 mrg Exp $ +# $NetBSD: Makefile.libkern,v 1.39 2016/05/02 19:18:29 christos Exp $ # # Variable definitions for libkern. @@ -74,6 +74,7 @@ SRCS+= memset.c SRCS+= popcount32.c popcount64.c SRCS+= strtoul.c strtoll.c strtoull.c strtoimax.c strtoumax.c SRCS+= strtoi.c strtou.c +SRCS+= strnvisx.c SRCS+= scanc.c skpc.c SRCS+= random.c Index: src/sys/lib/libkern/libkern.h diff -u src/sys/lib/libkern/libkern.h:1.121 src/sys/lib/libkern/libkern.h:1.122 --- src/sys/lib/libkern/libkern.h:1.121 Sun Aug 30 03:55:45 2015 +++ src/sys/lib/libkern/libkern.h Mon May 2 15:18:29 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: libkern.h,v 1.121 2015/08/30 07:55:45 uebayasi Exp $ */ +/* $NetBSD: libkern.h,v 1.122 2016/05/02 19:18:29 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -464,6 +464,10 @@ unsigned int popcount64(uint64_t) __cons void *explicit_memset(void *, int, size_t); int consttime_memequal(const void *, const void *, size_t); +int strnvisx(char *, size_t, const char *, size_t, int); +#define VIS_OCTAL 0x01 +#define VIS_SAFE 0x20 +#define VIS_TRIM 0x40 #ifdef notyet /* Added files: Index: src/sys/lib/libkern/strnvisx.c diff -u /dev/null src/sys/lib/libkern/strnvisx.c:1.1 --- /dev/null Mon May 2 15:18:30 2016 +++ src/sys/lib/libkern/strnvisx.c Mon May 2 15:18:29 2016 @@ -0,0 +1,87 @@ +/* $NetBSD: strnvisx.c,v 1.1 2016/05/02 19:18:29 christos Exp $ */ + +/*- + * Copyright (c) 1998, 1999, 2004 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Charles M. Hannum; by Jason R. Thorpe of the Numerical Aerospace + * Simulation Facility, NASA Ames Research Center. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * from scsipiconf.c... + */ +#include <lib/libkern/libkern.h> + +#define STRVIS_ISWHITE(x) ((x) == ' ' || (x) == '\0' || (x) == '\377') + +int +strnvisx(char *dst, size_t dlen, const char *src, size_t slen, int flags) +{ + if (dlen == 0) + return -1; + + if (flags & VIS_TRIM) { + /* Trim leading and trailing blanks and NULs. */ + while (slen > 0 && STRVIS_ISWHITE(src[0])) + ++src, --slen; + while (slen > 0 && STRVIS_ISWHITE(src[slen - 1])) + --slen; + } + + while (slen > 0) { + if ((flags & VIS_SAFE) && (*src < 0x20 || (*src & 0x80))) { + /* non-printable characters */ + if (dlen < 4) + goto out; + dlen -= 4; + *dst++ = '\\'; + *dst++ = ((*src & 0300) >> 6) + '0'; + *dst++ = ((*src & 0070) >> 3) + '0'; + *dst++ = ((*src & 0007) >> 0) + '0'; + } else if (*src == '\\') { + /* quote characters */ + if (dlen < 2) + goto out; + dlen -= 2; + *dst++ = '\\'; + *dst++ = '\\'; + } else { + /* normal characters */ + if (dlen < 1) + goto out; + *dst++ = *src; + } + ++src, --slen; + } +out: + if (dlen > 0) { + *dst++ = '\0'; + return slen ? -1 : 0; + } else { + *--dst = '\0'; + return -1; + } +}