git: 24ee1eb2b680 - stable/12 - libkvm: Plug couple of memory leaks and check possible calloc(3) failure
Jung-uk Kim
jkim at FreeBSD.org
Sat Mar 6 19:38:47 UTC 2021
The branch stable/12 has been updated by jkim:
URL: https://cgit.FreeBSD.org/src/commit/?id=24ee1eb2b680b5ee1e6943f6dbc76d98a640d9d8
commit 24ee1eb2b680b5ee1e6943f6dbc76d98a640d9d8
Author: Jung-uk Kim <jkim at FreeBSD.org>
AuthorDate: 2021-03-03 23:10:00 +0000
Commit: Jung-uk Kim <jkim at FreeBSD.org>
CommitDate: 2021-03-06 19:35:10 +0000
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.
Differential Revision: https://reviews.freebsd.org/D29019
(cherry picked from commit 645eaa2ccaed6eea801d07d6a092974fc1713896)
(cherry picked from commit 483c6da3a20b2064cd655f7cb19e6b98dee677ff)
---
lib/libkvm/kvm.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/lib/libkvm/kvm.c b/lib/libkvm/kvm.c
index 2f35f26df1ca..2a148399a211 100644
--- a/lib/libkvm/kvm.c
+++ b/lib/libkvm/kvm.c
@@ -295,6 +295,8 @@ kvm_close(kvm_t *kd)
free((void *) kd->argspc);
if (kd->argv != 0)
free((void *)kd->argv);
+ if (kd->dpcpu_initialized != 0)
+ free(kd->dpcpu_off);
if (kd->pt_map != NULL)
free(kd->pt_map);
if (kd->page_map != NULL)
@@ -338,6 +340,10 @@ kvm_nlist(kvm_t *kd, struct nlist *nl)
if (count == 0)
return (0);
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++)
kl[i].n_name = nl[i].n_name;
nfail = kvm_nlist2(kd, kl);
@@ -347,6 +353,7 @@ kvm_nlist(kvm_t *kd, struct nlist *nl)
nl[i].n_desc = 0;
nl[i].n_value = kl[i].n_value;
}
+ free(kl);
return (nfail);
}
More information about the dev-commits-src-all
mailing list