svn commit: r317861 - stable/11/usr.sbin/pmcstat

Pedro F. Giffuni pfg at FreeBSD.org
Sat May 6 02:43:28 UTC 2017


Author: pfg
Date: Sat May  6 02:43:26 2017
New Revision: 317861
URL: https://svnweb.freebsd.org/changeset/base/317861

Log:
  MFC r317284:
  pmcstat(8); unsign some allocation variables and use reallocarray(3).
  
  Use unsigned values in some internal variables that will be used during
  allocation. The variables are used in reduced scope and have no chance of
  becoming negative.
  
  Provide bounds checking through reallocarray(3).

Modified:
  stable/11/usr.sbin/pmcstat/pmcpl_calltree.c
  stable/11/usr.sbin/pmcstat/pmcstat_log.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.sbin/pmcstat/pmcpl_calltree.c
==============================================================================
--- stable/11/usr.sbin/pmcstat/pmcpl_calltree.c	Sat May  6 02:39:11 2017	(r317860)
+++ stable/11/usr.sbin/pmcstat/pmcpl_calltree.c	Sat May  6 02:43:26 2017	(r317861)
@@ -185,7 +185,7 @@ pmcpl_ct_samples_free(struct pmcpl_ct_sa
 static void
 pmcpl_ct_samples_grow(struct pmcpl_ct_sample *samples)
 {
-	int npmcs;
+	unsigned int npmcs;
 
 	/* Enough storage. */
 	if (pmcstat_npmcs <= samples->npmcs)
@@ -193,7 +193,7 @@ pmcpl_ct_samples_grow(struct pmcpl_ct_sa
 
 	npmcs = samples->npmcs +
 	    max(pmcstat_npmcs - samples->npmcs, PMCPL_CT_GROWSIZE);
-	samples->sb = realloc(samples->sb, npmcs * sizeof(unsigned));
+	samples->sb = reallocarray(samples->sb, npmcs, sizeof(unsigned));
 	if (samples->sb == NULL)
 		errx(EX_SOFTWARE, "ERROR: out of memory");
 	bzero((char *)samples->sb + samples->npmcs * sizeof(unsigned),
@@ -226,13 +226,13 @@ pmcpl_ct_samples_root(struct pmcpl_ct_sa
 static void
 pmcpl_ct_arc_grow(int cursize, int *maxsize, struct pmcpl_ct_arc **items)
 {
-	int nmaxsize;
+	unsigned int nmaxsize;
 
 	if (cursize < *maxsize)
 		return;
 
 	nmaxsize = *maxsize + max(cursize + 1 - *maxsize, PMCPL_CT_GROWSIZE);
-	*items = realloc(*items, nmaxsize * sizeof(struct pmcpl_ct_arc));
+	*items = reallocarray(*items, nmaxsize, sizeof(struct pmcpl_ct_arc));
 	if (*items == NULL)
 		errx(EX_SOFTWARE, "ERROR: out of memory");
 	bzero((char *)*items + *maxsize * sizeof(struct pmcpl_ct_arc),
@@ -247,13 +247,13 @@ pmcpl_ct_arc_grow(int cursize, int *maxs
 static void
 pmcpl_ct_instr_grow(int cursize, int *maxsize, struct pmcpl_ct_instr **items)
 {
-	int nmaxsize;
+	unsigned int nmaxsize;
 
 	if (cursize < *maxsize)
 		return;
 
 	nmaxsize = *maxsize + max(cursize + 1 - *maxsize, PMCPL_CT_GROWSIZE);
-	*items = realloc(*items, nmaxsize * sizeof(struct pmcpl_ct_instr));
+	*items = reallocarray(*items, nmaxsize, sizeof(struct pmcpl_ct_instr));
 	if (*items == NULL)
 		errx(EX_SOFTWARE, "ERROR: out of memory");
 	bzero((char *)*items + *maxsize * sizeof(struct pmcpl_ct_instr),

Modified: stable/11/usr.sbin/pmcstat/pmcstat_log.c
==============================================================================
--- stable/11/usr.sbin/pmcstat/pmcstat_log.c	Sat May  6 02:39:11 2017	(r317860)
+++ stable/11/usr.sbin/pmcstat/pmcstat_log.c	Sat May  6 02:43:26 2017	(r317861)
@@ -535,8 +535,8 @@ pmcstat_image_add_symbols(struct pmcstat
 	 * Allocate space for the new entries.
 	 */
 	firsttime = image->pi_symbols == NULL;
-	symptr = realloc(image->pi_symbols,
-	    sizeof(*symptr) * (image->pi_symcount + nfuncsyms));
+	symptr = reallocarray(image->pi_symbols,
+	    image->pi_symcount + nfuncsyms, sizeof(*symptr));
 	if (symptr == image->pi_symbols) /* realloc() failed. */
 		return;
 	image->pi_symbols = symptr;
@@ -587,8 +587,8 @@ pmcstat_image_add_symbols(struct pmcstat
 	 * Return space to the system if there were duplicates.
 	 */
 	if (newsyms < nfuncsyms)
-		image->pi_symbols = realloc(image->pi_symbols,
-		    sizeof(*symptr) * image->pi_symcount);
+		image->pi_symbols = reallocarray(image->pi_symbols,
+		    image->pi_symcount, sizeof(*symptr));
 
 	/*
 	 * Keep the list of symbols sorted.


More information about the svn-src-all mailing list