Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Mar 2021 19:38:37 GMT
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: eda8f0575dda - stable/13 - libkvm: Plug couple of memory leaks and check possible calloc(3) failure
Message-ID:  <202103061938.126JcbeD007033@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by jkim:

URL: https://cgit.FreeBSD.org/src/commit/?id=eda8f0575dda15346116d3be84b205c51c83e20b

commit eda8f0575dda15346116d3be84b205c51c83e20b
Author:     Jung-uk Kim <jkim@FreeBSD.org>
AuthorDate: 2021-03-03 23:10:00 +0000
Commit:     Jung-uk Kim <jkim@FreeBSD.org>
CommitDate: 2021-03-06 19:32:51 +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 95c5a580a2dd..b98f2f25e619 100644
--- a/lib/libkvm/kvm.c
+++ b/lib/libkvm/kvm.c
@@ -297,6 +297,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)
@@ -340,6 +342,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);
@@ -349,6 +355,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);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202103061938.126JcbeD007033>