calloc() and realloc() modernization.

This commit replaces calloc calls, which called calloc() as if it were
malloc() by allocating a multiple of objects as a sizeof multiplied by
the number of objects. The patch rectifies this by calling calloc() as
it was meant to be called.

This commit also replaces realloc() with reallocarray() in a similar
fashion as above. Instead of calculating the memory to reallocated
(changed) by multiplying sizeof by the number of objects, the sizeof
and number are passed as separate arguments to reallocarray(), letting
reallocarray() do the multiplication instead. Like the calloc()
adjustment above, this is approach is cleaner and more elegant than
than the previous code.

This has been tested on my production firewall and a laptop (also
running ipfilter).

Submitted by:	pfg
MFC after:	6 weeks
This commit is contained in:
cy 2017-03-16 04:40:07 +00:00
parent 6a7cf1f692
commit 8ddae1aa96
12 changed files with 17 additions and 16 deletions

View File

@ -317,8 +317,8 @@ get_unit(name, family)
} else {
old_ifneta = ifneta;
nifs++;
ifneta = (struct ifnet **)realloc(ifneta,
(nifs + 1) * sizeof(ifp));
ifneta = (struct ifnet **)reallocarray(ifneta, nifs + 1,
sizeof(ifp));
if (!ifneta) {
free(old_ifneta);
nifs = 0;

View File

@ -195,7 +195,8 @@ void push_proto()
if (!prstack)
prstack = (int *)malloc(sizeof(int));
else
prstack = (int *)realloc((char *)prstack, numpr * sizeof(int));
prstack = (int *)reallocarray((char *)prstack, numpr,
sizeof(int));
prstack[numpr - 1] = oldipproto;
}

View File

@ -129,7 +129,7 @@ int detect(ip, tcp)
if (++ihp->sd_cnt == ihp->sd_sz)
{
ihp->sd_sz += 8;
sh = realloc(sh, ihp->sd_sz * sizeof(*sh));
sh = reallocarray(sh, ihp->sd_sz, sizeof(*sh));
ihp->sd_hit = sh;
}
qsort(sh, ihp->sd_cnt, sizeof(*sh), ipcmp);

View File

@ -140,7 +140,7 @@ int detect(srcip, dport, date)
if (++ihp->sd_cnt == ihp->sd_sz)
{
ihp->sd_sz += 8;
sh = realloc(sh, ihp->sd_sz * sizeof(*sh));
sh = reallocarray(sh, ihp->sd_sz, sizeof(*sh));
ihp->sd_hit = sh;
}
qsort(sh, ihp->sd_cnt, sizeof(*sh), ipcmp);

View File

@ -163,7 +163,7 @@ struct sock *find_tcp(fd, ti)
return NULL;
fs = p->files;
o = (struct file **)calloc(1, sizeof(*o) * (fs->count + 1));
o = (struct file **)calloc(fs->count + 1, sizeof(*o));
if (KMCPY(o, fs->fd, (fs->count + 1) * sizeof(*o)) == -1)
{
fprintf(stderr, "read(%#x,%#x,%d) - fd - failed\n",

View File

@ -226,7 +226,7 @@ struct tcpcb *find_tcp(fd, ti)
}
#endif
o = (struct file **)calloc(1, sizeof(*o) * (up->u_lastfile + 1));
o = (struct file **)calloc(up->u_lastfile + 1, sizeof(*o));
if (KMCPY(o, up->u_ofile, (up->u_lastfile + 1) * sizeof(*o)) == -1)
{
fprintf(stderr, "read(%#x,%#x,%d) - u_ofile - failed\n",
@ -330,7 +330,7 @@ struct tcpcb *find_tcp(tfd, ti)
i = NULL;
t = NULL;
o = (struct file **)calloc(1, sizeof(*o) * (fd->fd_lastfile + 1));
o = (struct file **)calloc(fd->fd_lastfile + 1, sizeof(*o));
if (KMCPY(o, fd->fd_ofiles, (fd->fd_lastfile + 1) * sizeof(*o)) == -1)
{
fprintf(stderr, "read(%#lx,%#lx,%lu) - u_ofile - failed\n",

View File

@ -31,7 +31,7 @@ wordtab_t *parsefields(table, arg)
if (fields == NULL) {
fields = malloc(2 * sizeof(*fields));
} else {
fields = realloc(fields, (num + 1) * sizeof(*fields));
fields = reallocarray(fields, num + 1, sizeof(*fields));
}
if (t == NULL) {

View File

@ -123,9 +123,9 @@ parseipfexpr(line, errorptr)
osize = asize;
asize += 4 + (items * e->ipoe_nbasearg * e->ipoe_argsize);
if (oplist == NULL)
oplist = calloc(1, sizeof(int) * (asize + 2));
oplist = calloc(asize + 2, sizeof(int));
else
oplist = realloc(oplist, sizeof(int) * (asize + 2));
oplist = reallocarray(oplist, asize + 2, sizeof(int));
if (oplist == NULL) {
error = "oplist alloc failed";
goto parseerror;

View File

@ -1192,7 +1192,7 @@ buildtab(void)
if (lines == 1)
tab = malloc(sizeof(*tab) * 2);
else
tab = realloc(tab, (lines + 1) * sizeof(*tab));
tab = reallocarray(tab, lines + 1, sizeof(*tab));
tab[lines - 1].host = strdup(line);
s = strchr(tab[lines - 1].host, '/');
*s++ = '\0';

View File

@ -2194,7 +2194,7 @@ char *phrase;
for (i = 0, s = strtok(phrase, " \r\n\t"); s != NULL;
s = strtok(NULL, " \r\n\t"), i++) {
fb = realloc(fb, (i / 4 + 1) * sizeof(*fb));
fb = reallocarray(fb, i / 4 + 1, sizeof(*fb));
l = (u_32_t)strtol(s, NULL, 0);
switch (i & 3)
{

View File

@ -965,7 +965,7 @@ void printC(dir)
frgroup_t *g;
if (m == NULL)
m = (mc_t *)calloc(1, sizeof(*m) * FRC_MAX);
m = (mc_t *)calloc(FRC_MAX, sizeof(*m));
for (g = groups; g != NULL; g = g->fg_next) {
if ((dir == 0) && ((g->fg_flags & FR_INQUE) != 0))

View File

@ -1422,8 +1422,8 @@ static void topipstates(saddr, daddr, sport, dport, protocol, ver,
tsentry++;
if (!maxtsentries || tsentry == maxtsentries) {
maxtsentries += STGROWSIZE;
tstable = realloc(tstable,
maxtsentries * sizeof(statetop_t));
tstable = reallocarray(tstable, maxtsentries,
sizeof(statetop_t));
if (tstable == NULL) {
perror("realloc");
exit(-1);