Module Name:    src
Committed By:   christos
Date:           Thu Mar 27 18:22:56 UTC 2014

Modified Files:
        src/sys/arch/dreamcast/dev/maple: maple.c
        src/sys/arch/ia64/disasm: disasm_format.c
        src/sys/arch/ia64/stand/efi/libefi: devicename.c
        src/sys/arch/ia64/stand/ia64/ski: devicename.c
        src/sys/arch/next68k/dev: esp.c
        src/sys/arch/prep/prep: autoconf.c residual.c
        src/sys/arch/sparc/sparc: cpu.c
        src/sys/arch/x86/acpi: acpi_cpu_md.c
        src/sys/arch/x86/x86: est.c odcm.c procfs_machdep.c
        src/sys/arch/xen/xen: pciback.c
        src/sys/arch/xen/xenbus: xenbus_client.c

Log Message:
correct/add protection against snprintf overflow.


To generate a diff of this commit:
cvs rdiff -u -r1.49 -r1.50 src/sys/arch/dreamcast/dev/maple/maple.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/ia64/disasm/disasm_format.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/ia64/stand/efi/libefi/devicename.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/ia64/stand/ia64/ski/devicename.c
cvs rdiff -u -r1.61 -r1.62 src/sys/arch/next68k/dev/esp.c
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/prep/prep/autoconf.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/prep/prep/residual.c
cvs rdiff -u -r1.242 -r1.243 src/sys/arch/sparc/sparc/cpu.c
cvs rdiff -u -r1.75 -r1.76 src/sys/arch/x86/acpi/acpi_cpu_md.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/x86/x86/est.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/x86/x86/odcm.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/x86/x86/procfs_machdep.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/xen/xen/pciback.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/xen/xenbus/xenbus_client.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/dreamcast/dev/maple/maple.c
diff -u src/sys/arch/dreamcast/dev/maple/maple.c:1.49 src/sys/arch/dreamcast/dev/maple/maple.c:1.50
--- src/sys/arch/dreamcast/dev/maple/maple.c:1.49	Wed Mar 26 12:08:45 2014
+++ src/sys/arch/dreamcast/dev/maple/maple.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: maple.c,v 1.49 2014/03/26 16:08:45 christos Exp $	*/
+/*	$NetBSD: maple.c,v 1.50 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: maple.c,v 1.49 2014/03/26 16:08:45 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: maple.c,v 1.50 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -353,7 +353,9 @@ maple_run_polling(device_t dev)
 static char *
 maple_unit_name(char *buf, size_t len, int port, int subunit)
 {
-	int l = snprintf(buf, len, "maple%c", port + 'A');
+	size_t l = snprintf(buf, len, "maple%c", port + 'A');
+	if (l > len)
+		l = len;
 	if (subunit)
 		snprintf(buf + l, len - l, "%d", subunit);
 

Index: src/sys/arch/ia64/disasm/disasm_format.c
diff -u src/sys/arch/ia64/disasm/disasm_format.c:1.2 src/sys/arch/ia64/disasm/disasm_format.c:1.3
--- src/sys/arch/ia64/disasm/disasm_format.c:1.2	Tue Mar 25 14:35:32 2014
+++ src/sys/arch/ia64/disasm/disasm_format.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: disasm_format.c,v 1.2 2014/03/25 18:35:32 christos Exp $	*/
+/*	$NetBSD: disasm_format.c,v 1.3 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 2000-2003 Marcel Moolenaar
@@ -277,6 +277,8 @@ asm_operand(const struct asm_oper *o, ch
 	}
 	if (n[0] != '\0') {
 		l = snprintf(buf, buflen, "%s[", n);
+		if (l > buflen)
+			l = buflen;
 		buf += l;
 		buflen -= l;
 	}
@@ -284,7 +286,11 @@ asm_operand(const struct asm_oper *o, ch
 	case 1:	l = strlcpy(buf, "gp", buflen); break;
 	case 12: l = strlcpy(buf, "sp", buflen); break;
 	case 13: l = strlcpy(buf, "tp", buflen); break;
-	default: l += snprintf(buf, buflen, "r%d", (int)o->o_value); break;
+	default:
+	    l += snprintf(buf, buflen, "r%d", (int)o->o_value);
+	    if (l > buflen)
+		l = buflen;
+	    break;
 	}
 	buf += l;
 	buflen -= l;

Index: src/sys/arch/ia64/stand/efi/libefi/devicename.c
diff -u src/sys/arch/ia64/stand/efi/libefi/devicename.c:1.6 src/sys/arch/ia64/stand/efi/libefi/devicename.c:1.7
--- src/sys/arch/ia64/stand/efi/libefi/devicename.c:1.6	Tue Mar 25 14:35:33 2014
+++ src/sys/arch/ia64/stand/efi/libefi/devicename.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: devicename.c,v 1.6 2014/03/25 18:35:33 christos Exp $	*/
+/*	$NetBSD: devicename.c,v 1.7 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998 Michael Smith <msm...@freebsd.org>
@@ -208,7 +208,7 @@ efi_fmtdev(void *vdev)
 {
 	struct efi_devdesc *dev = (struct efi_devdesc *)vdev;
 	static char	buf[128];	/* XXX device length constant? */
-	size_t		len;
+	size_t		len, buflen = sizeof(buf);
     
 	switch(dev->d_type) {
 	case DEVT_NONE:
@@ -216,16 +216,24 @@ efi_fmtdev(void *vdev)
 		break;
 
 	case DEVT_DISK:
-		len = snprintf(buf, sizeof(buf), "%s%d", dev->d_dev->dv_name, dev->d_kind.efidisk.unit);
-		if (dev->d_kind.efidisk.slice > 0)
-			len += snprintf(buf + len, sizeof(buf) - len, "s%d", dev->d_kind.efidisk.slice);
-		if (dev->d_kind.efidisk.partition >= 0)
-			len += snprintf(buf + len, sizeof(buf) - len, "%c", dev->d_kind.efidisk.partition + 'a');
+		len = snprintf(buf, buflen, "%s%d", dev->d_dev->dv_name, dev->d_kind.efidisk.unit);
+		if (len > buflen)
+			len = buflen;
+		if (dev->d_kind.efidisk.slice > 0) {
+			len += snprintf(buf + len, buflen - len, "s%d", dev->d_kind.efidisk.slice);
+			if (len > buflen)
+				len = buflen;
+		}
+		if (dev->d_kind.efidisk.partition >= 0) {
+			len += snprintf(buf + len, buflen - len, "%c", dev->d_kind.efidisk.partition + 'a');
+			if (len > buflen)
+		}
+				len = buflen;
 		strlcat(buf, ":", sizeof(buf) - len);
 		break;
 
 	case DEVT_NET:
-		snprintf(buf, sizeof(buf), "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
+		snprintf(buf, buflen, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
 		break;
 	}
 	return(buf);

Index: src/sys/arch/ia64/stand/ia64/ski/devicename.c
diff -u src/sys/arch/ia64/stand/ia64/ski/devicename.c:1.5 src/sys/arch/ia64/stand/ia64/ski/devicename.c:1.6
--- src/sys/arch/ia64/stand/ia64/ski/devicename.c:1.5	Tue Mar 25 14:35:33 2014
+++ src/sys/arch/ia64/stand/ia64/ski/devicename.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: devicename.c,v 1.5 2014/03/25 18:35:33 christos Exp $	*/
+/*	$NetBSD: devicename.c,v 1.6 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998 Michael Smith <msm...@freebsd.org>
@@ -203,24 +203,32 @@ ski_fmtdev(void *vdev)
 {
 	struct ski_devdesc *dev = (struct ski_devdesc *)vdev;
 	static char	buf[128];	/* XXX device length constant? */
-	size_t len;
+	size_t len, buflen = sizeof(buf);
     
 	switch(dev->d_type) {
 	case DEVT_NONE:
-		strcpy(buf, "(no device)");
+		strlcpy(buf, "(no device)", buflen);
 		break;
 
 	case DEVT_DISK:
-		len = snprintf(buf, sizeof(buf), "%s%d", dev->d_dev->dv_name, dev->d_kind.skidisk.unit);
-		if (dev->d_kind.skidisk.slice > 0)
-			len = snprintf(buf, sizeof(buf) - len, "s%d", dev->d_kind.skidisk.slice);
-		if (dev->d_kind.skidisk.partition >= 0)
-			len = snprintf(buf, sizeof(buf) - len, "%c", dev->d_kind.skidisk.partition + 'a');
-		strlcat(cp, ":", sizeof(buf) - len);
+		len = snprintf(buf, buflen, "%s%d", dev->d_dev->dv_name, dev->d_kind.skidisk.unit);
+		if (len > buflen)
+			len = buflen;
+		if (dev->d_kind.skidisk.slice > 0) {
+			len += snprintf(buf + len, buflen - len, "s%d", dev->d_kind.skidisk.slice);
+			if (len > buflen)
+				len = buflen;
+		}
+		if (dev->d_kind.skidisk.partition >= 0) {
+			len += snprintf(buf + len, buflen - len, "%c", dev->d_kind.skidisk.partition + 'a');
+			if (len > buflen)
+				len = buflen;
+		}
+		strlcat(cp, ":", buflen - len);
 		break;
 
 	case DEVT_NET:
-		snprintf(buf, sizeof(buf) - len, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
+		snprintf(buf, buflen - len, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
 		break;
 	}
 	return(buf);

Index: src/sys/arch/next68k/dev/esp.c
diff -u src/sys/arch/next68k/dev/esp.c:1.61 src/sys/arch/next68k/dev/esp.c:1.62
--- src/sys/arch/next68k/dev/esp.c:1.61	Tue Mar 25 15:41:32 2014
+++ src/sys/arch/next68k/dev/esp.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: esp.c,v 1.61 2014/03/25 19:41:32 christos Exp $	*/
+/*	$NetBSD: esp.c,v 1.62 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: esp.c,v 1.61 2014/03/25 19:41:32 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: esp.c,v 1.62 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1155,8 +1155,12 @@ esp_dma_store(struct ncr53c9x_softc *sc)
 	
 	l += snprintf(p + l, len - l, "%s: sc_datain=%d\n",
 	    device_xname(sc->sc_dev), esc->sc_datain);
+	if (l > len)
+		return;
 	l += snprintf(p + l, len - l, "%s: sc_loaded=0x%08x\n",
 	    device_xname(sc->sc_dev), esc->sc_loaded);
+	if (l > len)
+		return;
 
 	if (esc->sc_dmaaddr) {
 		l += snprintf(p + l, len - l, "%s: sc_dmaaddr=%p\n",
@@ -1165,6 +1169,8 @@ esp_dma_store(struct ncr53c9x_softc *sc)
 		l += snprintf(p + l, len - l, "%s: sc_dmaaddr=NULL\n",
 		    device_xname(sc->sc_dev));
 	}
+	if (l > len)
+		return;
 	if (esc->sc_dmalen) {
 		l += snprintf(p + l, len - l, "%s: sc_dmalen=0x%08x\n", 
 		    device_xname(sc->sc_dev), *esc->sc_dmalen);
@@ -1172,19 +1178,29 @@ esp_dma_store(struct ncr53c9x_softc *sc)
 		l += snprintf(p + l, len - l, "%s: sc_dmalen=NULL\n",
 		    device_xname(sc->sc_dev));
 	}
+	if (l > len)
+		return;
 	l += snprintf(p + l, len - l, "%s: sc_dmasize=0x%08x\n",
 	    device_xname(sc->sc_dev), esc->sc_dmasize);
+	if (l > len)
+		return;
 
 	l += snprintf(p + l, len - l, "%s: sc_begin = %p, sc_begin_size = 0x%08x\n",
+	if (l > len)
+		return;
 	    device_xname(sc->sc_dev), esc->sc_begin, esc->sc_begin_size);
 	l += snprintf(p + l, len - l, "%s: sc_main = %p, sc_main_size = 0x%08x\n",
 	    device_xname(sc->sc_dev), esc->sc_main, esc->sc_main_size);
+	if (l > len)
+		return;
 	/* if (esc->sc_main) */ {
 		int i;
 		bus_dmamap_t map = esc->sc_main_dmamap;
 		l += snprintf(p + l, len - l, "%s: sc_main_dmamap."
 		    " mapsize = 0x%08lx, nsegs = %d\n",
 		    device_xname(sc->sc_dev), map->dm_mapsize, map->dm_nsegs);
+		if (l > len)
+			return;
 		for(i = 0; i < map->dm_nsegs; i++) {
 			l += snprintf(p + l, len - l, "%s:"
 			    " map->dm_segs[%d].ds_addr = 0x%08lx,"
@@ -1192,16 +1208,22 @@ esp_dma_store(struct ncr53c9x_softc *sc)
 			    device_xname(sc->sc_dev),
 			    i, map->dm_segs[i].ds_addr,
 			    map->dm_segs[i].ds_len);
+			    if (l > len)
+				    return;
 		}
 	}
 	l += snprintf(p + l, len - l, "%s: sc_tail = %p, sc_tail_size = 0x%08x\n",
 	    device_xname(sc->sc_dev), esc->sc_tail, esc->sc_tail_size);
+	if (l > len)
+		return;
 	/* if (esc->sc_tail) */ {
 		int i;
 		bus_dmamap_t map = esc->sc_tail_dmamap;
 		l += snprintf(p + l, len - l, "%s: sc_tail_dmamap."
 		    " mapsize = 0x%08lx, nsegs = %d\n",
 		    device_xname(sc->sc_dev), map->dm_mapsize, map->dm_nsegs);
+		if (l > len)
+			return;
 		for (i = 0; i < map->dm_nsegs; i++) {
 			l += snprintf(p + l, len - l, "%s:"
 			    " map->dm_segs[%d].ds_addr = 0x%08lx,"
@@ -1209,6 +1231,8 @@ esp_dma_store(struct ncr53c9x_softc *sc)
 			    device_xname(sc->sc_dev),
 			    i, map->dm_segs[i].ds_addr,
 			     map->dm_segs[i].ds_len);
+			if (l > len)
+				return;
 		}
 	}
 }

Index: src/sys/arch/prep/prep/autoconf.c
diff -u src/sys/arch/prep/prep/autoconf.c:1.26 src/sys/arch/prep/prep/autoconf.c:1.27
--- src/sys/arch/prep/prep/autoconf.c:1.26	Fri Jun 28 10:42:31 2013
+++ src/sys/arch/prep/prep/autoconf.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.26 2013/06/28 14:42:31 christos Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.27 2014/03/27 18:22:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.26 2013/06/28 14:42:31 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.27 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -167,11 +167,15 @@ device_register(device_t dev, void *aux)
 		n = snprintf(devpath, sizeof(devpath), "%s@",
 		    pna->pna_devid);
 		io = SIMPLEQ_FIRST(&pna->pna_res.io);
+		if (n > sizeof(devpath))
+			n = sizeof(devpath);
 		if (io != NULL)
 			n += snprintf(devpath + n, sizeof(devpath) - n, "%x",
 			    io->minbase);
 	}
 
+	if (n > sizeof(devpath))
+		n = sizeof(devpath);
 	/* we can't trust the device tag on the ethernet, because
 	 * the spec lies about how it is formed.  Therefore we will leave it
 	 * blank, and trim the end off any ethernet stuff. */
@@ -190,8 +194,12 @@ device_register(device_t dev, void *aux)
 		struct scsipibus_attach_args *sa = aux;
 
 		/* periph_target is target for scsi, drive # for atapi */
+		if (n > sizeof(devpath))
+			n = sizeof(devpath);
 		n += snprintf(devpath + n, sizeof(devpath) - n, "%d",
 		    sa->sa_periph->periph_target);
+		if (n > sizeof(devpath))
+			n = sizeof(devpath);
 		if (device_is_a(parent, "scsibus"))
 			n += snprintf(devpath + n, sizeof(devpath) - n, ",%d",
 			    sa->sa_periph->periph_lun);
@@ -199,9 +207,13 @@ device_register(device_t dev, void *aux)
 	    device_is_a(parent, "pciide")) {
 		struct ata_device *adev = aux;
 
+		if (n > sizeof(devpath))
+			n = sizeof(devpath);
 		n += snprintf(devpath + n, sizeof(devpath) - n, "%d",
 		    adev->adev_drv_data->drive);
 	} else if (device_is_a(dev, "fd")) {
+		if (n > sizeof(devpath))
+			n = sizeof(devpath);
 		/* XXX device_unit() abuse */
 		n += snprintf(devpath + n, sizeof(devpath) - n, "%d",
 		    device_unit(dev));

Index: src/sys/arch/prep/prep/residual.c
diff -u src/sys/arch/prep/prep/residual.c:1.17 src/sys/arch/prep/prep/residual.c:1.18
--- src/sys/arch/prep/prep/residual.c:1.17	Wed Mar 26 12:01:43 2014
+++ src/sys/arch/prep/prep/residual.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*      $NetBSD: residual.c,v 1.17 2014/03/26 16:01:43 christos Exp $     */
+/*      $NetBSD: residual.c,v 1.18 2014/03/27 18:22:56 christos Exp $     */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: residual.c,v 1.17 2014/03/26 16:01:43 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: residual.c,v 1.18 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -965,6 +965,8 @@ large_vendor_pcibridge_subr(struct _L4_P
 				l += snprintf(tmpstr + l, sizeof(tmpstr) - l, 
 				    "%s%d(%c)", l == 0 ? "/" : "",
 				    line & 0x7fff, line & 0x8000 ? 'E' : 'L');
+				if (l > sizeof(tmpstr))
+					break;
 			}
 		}
 		printf("%s\n", tmpstr);

Index: src/sys/arch/sparc/sparc/cpu.c
diff -u src/sys/arch/sparc/sparc/cpu.c:1.242 src/sys/arch/sparc/sparc/cpu.c:1.243
--- src/sys/arch/sparc/sparc/cpu.c:1.242	Wed Mar 26 11:55:43 2014
+++ src/sys/arch/sparc/sparc/cpu.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.242 2014/03/26 15:55:43 christos Exp $ */
+/*	$NetBSD: cpu.c,v 1.243 2014/03/27 18:22:56 christos Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.242 2014/03/26 15:55:43 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.243 2014/03/27 18:22:56 christos Exp $");
 
 #include "opt_multiprocessor.h"
 #include "opt_lockdebug.h"
@@ -744,6 +744,8 @@ xcall(xcall_func_t func, xcall_trap_t tr
 			    "xcall(cpu%d,%p) from %p: couldn't ping cpus:",
 			    cpu_number(), fasttrap ? trap : func,
 			    __builtin_return_address(0));
+			if (wrsz > bufsz)
+				break;
 			bufsz -= wrsz;
 			bufp += wrsz;
 		}
@@ -757,11 +759,10 @@ xcall(xcall_func_t func, xcall_trap_t tr
 				if (i < 0) {
 					wrsz = snprintf(bufp, bufsz,
 							" cpu%d", cpi->ci_cpuid);
+					if (wrsz > bufsz)
+						break;
 					bufsz -= wrsz;
 					bufp += wrsz;
-					/* insanity */
-					if (bufsz < 0)
-						break;
 				} else {
 					done = 0;
 					break;

Index: src/sys/arch/x86/acpi/acpi_cpu_md.c
diff -u src/sys/arch/x86/acpi/acpi_cpu_md.c:1.75 src/sys/arch/x86/acpi/acpi_cpu_md.c:1.76
--- src/sys/arch/x86/acpi/acpi_cpu_md.c:1.75	Tue Dec 10 21:14:08 2013
+++ src/sys/arch/x86/acpi/acpi_cpu_md.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_cpu_md.c,v 1.75 2013/12/11 02:14:08 msaitoh Exp $ */
+/* $NetBSD: acpi_cpu_md.c,v 1.76 2014/03/27 18:22:56 christos Exp $ */
 
 /*-
  * Copyright (c) 2010, 2011 Jukka Ruohonen <jruoho...@iki.fi>
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_md.c,v 1.75 2013/12/11 02:14:08 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_md.c,v 1.76 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -1153,6 +1153,8 @@ acpicpu_md_pstate_sysctl_all(SYSCTLFN_AR
 		len += snprintf(buf + len, sizeof(buf) - len, "%u%s",
 		    sc->sc_pstate[i].ps_freq,
 		    i < (sc->sc_pstate_count - 1) ? " " : "");
+		if (len > sizeof(buf))
+			break;
 	}
 
 	mutex_exit(&sc->sc_mtx);

Index: src/sys/arch/x86/x86/est.c
diff -u src/sys/arch/x86/x86/est.c:1.28 src/sys/arch/x86/x86/est.c:1.29
--- src/sys/arch/x86/x86/est.c:1.28	Fri Nov 15 03:47:55 2013
+++ src/sys/arch/x86/x86/est.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: est.c,v 1.28 2013/11/15 08:47:55 msaitoh Exp $	*/
+/*	$NetBSD: est.c,v 1.29 2014/03/27 18:22:56 christos Exp $	*/
 /*
  * Copyright (c) 2003 Michael Eriksson.
  * All rights reserved.
@@ -76,7 +76,7 @@
  *   http://www.codemonkey.org.uk/projects/cpufreq/cpufreq-2.4.22-pre6-1.gz
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: est.c,v 1.28 2013/11/15 08:47:55 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: est.c,v 1.29 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -1276,6 +1276,8 @@ est_tables(device_t self)
 		len += snprintf(sc->sc_freqs + len, sc->sc_freqs_len - len,
 		    "%d%s", MSR2MHZ(sc->sc_fqlist->table[i], sc->sc_bus_clock),
 		    i < sc->sc_fqlist->n - 1 ? " " : "");
+		if (len > sc->sc_freqs_len)
+			break;
 	}
 
 	aprint_debug_dev(self, "%d mV, %d (MHz): %s\n", mv,

Index: src/sys/arch/x86/x86/odcm.c
diff -u src/sys/arch/x86/x86/odcm.c:1.3 src/sys/arch/x86/x86/odcm.c:1.4
--- src/sys/arch/x86/x86/odcm.c:1.3	Fri Nov 15 03:47:55 2013
+++ src/sys/arch/x86/x86/odcm.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: odcm.c,v 1.3 2013/11/15 08:47:55 msaitoh Exp $ */
+/*	$NetBSD: odcm.c,v 1.4 2014/03/27 18:22:56 christos Exp $ */
 /*      $OpenBSD: p4tcc.c,v 1.13 2006/12/20 17:50:40 gwk Exp $ */
 
 /*
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: odcm.c,v 1.3 2013/11/15 08:47:55 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: odcm.c,v 1.4 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -208,6 +208,8 @@ odcm_init(device_t self)
 		len += snprintf(sc->sc_names + len,
 		    sc->sc_names_len - len, "%d%s", state[i].level,
 		    i < __arraycount(state) ? " " : "");
+		if (len > sc->sc_names_len)
+			break;
 	}
 
 	/*

Index: src/sys/arch/x86/x86/procfs_machdep.c
diff -u src/sys/arch/x86/x86/procfs_machdep.c:1.4 src/sys/arch/x86/x86/procfs_machdep.c:1.5
--- src/sys/arch/x86/x86/procfs_machdep.c:1.4	Mon Mar 24 16:06:33 2014
+++ src/sys/arch/x86/x86/procfs_machdep.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_machdep.c,v 1.4 2014/03/24 20:06:33 christos Exp $ */
+/*	$NetBSD: procfs_machdep.c,v 1.5 2014/03/27 18:22:56 christos Exp $ */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_machdep.c,v 1.4 2014/03/24 20:06:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_machdep.c,v 1.5 2014/03/27 18:22:56 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -151,10 +151,10 @@ procfs_getonecpu(int xcpu, struct cpu_in
 	for (i = 0; i < 32; i++) {
 		if ((ci->ci_feat_val[0] & (1 << i)) && x86_features[i]) {
 			l = snprintf(p, left, "%s ", x86_features[i]);
+			if (l > left)
+				return 0;
 			left -= l;
 			p += l;
-			if (left <= 0)
-				break;
 		}
 	}
 
@@ -174,20 +174,20 @@ procfs_getonecpu(int xcpu, struct cpu_in
 	    cpu_brand_string
 	);
 
+	if (l > left)
+		return 0;
 	left -= l;
 	p += l;
-	if (left <= 0)
-		return 0;
 
 	if (cpuid_level >= 0)
 		l = snprintf(p, left, "%d\n", ci->ci_signature & 15);
 	else
 		l = snprintf(p, left, "unknown\n");
 
+	if (l > left)
+		return 0;
 	left -= l;
 	p += l;
-	if (left <= 0)
-		return 0;
 
 	if (ci->ci_data.cpu_cc_freq != 0) {
 		uint64_t freq, fraq;
@@ -199,10 +199,10 @@ procfs_getonecpu(int xcpu, struct cpu_in
 	} else
 		l = snprintf(p, left, "cpu MHz\t\t: unknown\n");
 
+	if (l > left)
+		return 0;
 	left -= l;
 	p += l;
-	if (left <= 0)
-		return 0;
 
 	l = snprintf(p, left,
 	    "fdiv_bug\t: %s\n"

Index: src/sys/arch/xen/xen/pciback.c
diff -u src/sys/arch/xen/xen/pciback.c:1.7 src/sys/arch/xen/xen/pciback.c:1.8
--- src/sys/arch/xen/xen/pciback.c:1.7	Thu Feb  2 14:43:01 2012
+++ src/sys/arch/xen/xen/pciback.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/*      $NetBSD: pciback.c,v 1.7 2012/02/02 19:43:01 tls Exp $      */
+/*      $NetBSD: pciback.c,v 1.8 2014/03/27 18:22:56 christos Exp $      */
 
 /*
  * Copyright (c) 2009 Manuel Bouyer.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pciback.c,v 1.7 2012/02/02 19:43:01 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pciback.c,v 1.8 2014/03/27 18:22:56 christos Exp $");
 
 #include "opt_xen.h"
 
@@ -311,23 +311,31 @@ pciback_kernfs_read(void *v)
 
 	off = uio->uio_offset;
 	len = 0;
-	len += snprintf(&buf[len], PCIBACK_KERNFS_SIZE - len,
+	len += snprintf(&buf[len], sizeof(buf) - len,
 	    "vendor: 0x%04x\nproduct: 0x%04x\n",
 	    PCI_VENDOR(sc->sc_id), PCI_PRODUCT(sc->sc_id));
-	len += snprintf(&buf[len], PCIBACK_KERNFS_SIZE - len,
+	if (len > sizeof(buf))
+		return ENOSPC;
+	len += snprintf(&buf[len], sizeof(buf) - len,
 	    "subsys_vendor: 0x%04x\nsubsys_product: 0x%04x\n",
 	    PCI_VENDOR(sc->sc_subid), PCI_PRODUCT(sc->sc_subid));
+	if (len > sizeof(buf))
+		return ENOSPC;
 	for(i = 0; i < PCI_NBARS; i++) {
 		if (sc->sc_bars[i].b_valid) {
-			len += snprintf(&buf[len], PCIBACK_KERNFS_SIZE - len,
+			len += snprintf(&buf[len], sizeof(buf) - len,
 			    "%s: 0x%08jx - 0x%08jx\n",
 			    (sc->sc_bars[i].b_type == PCI_MAPREG_TYPE_IO) ?
 			    "I/O" : "mem",
 			    (uintmax_t)sc->sc_bars[i].b_addr,
 			    (uintmax_t)(sc->sc_bars[i].b_addr + sc->sc_bars[i].b_size));
+			if (len > sizeof(buf))
+				return ENOSPC;
 		}
 	}
-	len += snprintf(&buf[len], PCIBACK_KERNFS_SIZE - len,
+	if (len > sizeof(buf))
+		return ENOSPC;
+	len += snprintf(&buf[len], sizeof(buf) - len,
 	    "irq: %d\n", sc->sc_irq);
 	if (off >= len) {
 		error = uiomove(buf, 0, uio);

Index: src/sys/arch/xen/xenbus/xenbus_client.c
diff -u src/sys/arch/xen/xenbus/xenbus_client.c:1.11 src/sys/arch/xen/xenbus/xenbus_client.c:1.12
--- src/sys/arch/xen/xenbus/xenbus_client.c:1.11	Sun Jul 17 16:54:49 2011
+++ src/sys/arch/xen/xenbus/xenbus_client.c	Thu Mar 27 14:22:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_client.c,v 1.11 2011/07/17 20:54:49 joerg Exp $ */
+/* $NetBSD: xenbus_client.c,v 1.12 2014/03/27 18:22:56 christos Exp $ */
 /******************************************************************************
  * Client-facing interface for the Xenbus driver.  In other words, the
  * interface between the Xenbus and the device-specific code, be it the
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_client.c,v 1.11 2011/07/17 20:54:49 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_client.c,v 1.12 2014/03/27 18:22:56 christos Exp $");
 
 #if 0
 #define DPRINTK(fmt, args...) \
@@ -169,8 +169,8 @@ _dev_error(struct xenbus_device *dev, in
 		goto fail;
 
 	len = snprintf(printf_buffer, PRINTF_BUFFER_SIZE, "%i ", -err);
+	KASSERT(len < PRINTF_BUFFER_SIZE);
 	ret = vsnprintf(printf_buffer+len, PRINTF_BUFFER_SIZE-len, fmt, ap);
-
 	KASSERT(len + ret < PRINTF_BUFFER_SIZE);
 	dev->xbusd_has_error = 1;
 

Reply via email to