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). MFC after: 2 weeks
This commit is contained in:
parent
f671769766
commit
780154cbaf
@ -185,7 +185,7 @@ pmcpl_ct_samples_free(struct pmcpl_ct_sample *samples)
|
||||
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_sample *samples)
|
||||
|
||||
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_sample *samples)
|
||||
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 *maxsize, struct pmcpl_ct_arc **items)
|
||||
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),
|
||||
|
@ -535,8 +535,8 @@ pmcstat_image_add_symbols(struct pmcstat_image *image, Elf *e,
|
||||
* 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_image *image, Elf *e,
|
||||
* 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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user