libkvm: Plug couple of memory leaks and check possible calloc(3) failure
First, r204494 introduced dpcpu_off in struct __kvm and it was allocated from _kvm_dpcpu_init() but it was not free(3)'ed from kvm_close(3). Second, r291406 introduced kvm_nlist2(3) and converted kvm_nlist(3) to use the new function but it did not free the temporary buffer. Also, check possible calloc(3) failure while I am in the neighborhood. MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D29019
This commit is contained in:
parent
e6cfd2939a
commit
645eaa2cca
@ -301,6 +301,8 @@ kvm_close(kvm_t *kd)
|
|||||||
free(kd->pt_map);
|
free(kd->pt_map);
|
||||||
if (kd->page_map != NULL)
|
if (kd->page_map != NULL)
|
||||||
free(kd->page_map);
|
free(kd->page_map);
|
||||||
|
if (kd->dpcpu_initialized != 0)
|
||||||
|
free(kd->dpcpu_off);
|
||||||
if (kd->sparse_map != MAP_FAILED)
|
if (kd->sparse_map != MAP_FAILED)
|
||||||
munmap(kd->sparse_map, kd->pt_sparse_size);
|
munmap(kd->sparse_map, kd->pt_sparse_size);
|
||||||
free((void *)kd);
|
free((void *)kd);
|
||||||
@ -340,6 +342,10 @@ kvm_nlist(kvm_t *kd, struct nlist *nl)
|
|||||||
if (count == 0)
|
if (count == 0)
|
||||||
return (0);
|
return (0);
|
||||||
kl = calloc(count + 1, sizeof(*kl));
|
kl = calloc(count + 1, sizeof(*kl));
|
||||||
|
if (kl == NULL) {
|
||||||
|
_kvm_err(kd, kd->program, "cannot allocate memory");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
kl[i].n_name = nl[i].n_name;
|
kl[i].n_name = nl[i].n_name;
|
||||||
nfail = kvm_nlist2(kd, kl);
|
nfail = kvm_nlist2(kd, kl);
|
||||||
@ -349,6 +355,7 @@ kvm_nlist(kvm_t *kd, struct nlist *nl)
|
|||||||
nl[i].n_desc = 0;
|
nl[i].n_desc = 0;
|
||||||
nl[i].n_value = kl[i].n_value;
|
nl[i].n_value = kl[i].n_value;
|
||||||
}
|
}
|
||||||
|
free(kl);
|
||||||
return (nfail);
|
return (nfail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user