The daxctl_dev_alloc_mem() helper which is used to instantiate a new memory object did so, but neglected to attach the memory object to the parent 'dev' object. As a result, every invocation of 'daxctl_dev_get_memory() resulted in a new, orphan memory object being created, which also resulted in libdaxctl leaking memory.
Fix the parent association for 'mem' objects, and in free_mem, remove the check for 'dev' being present - mem objects will always associated with a dev. Additionally, we were neglecting to free 'mem->mem_buf' in free_mem, so fix this up as well. Fixes: e8bf803e359b ("libdaxctl: add a 'daxctl_memory' object for memory based operations") Link: https://github.com/pmem/ndctl/issues/112 Reported-by: Michal Biesek <michal.bie...@intel.com> Signed-off-by: Vishal Verma <vishal.l.ve...@intel.com> --- daxctl/lib/libdaxctl.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/daxctl/lib/libdaxctl.c b/daxctl/lib/libdaxctl.c index 8abfd64..639224c 100644 --- a/daxctl/lib/libdaxctl.c +++ b/daxctl/lib/libdaxctl.c @@ -204,8 +204,9 @@ DAXCTL_EXPORT void daxctl_region_get_uuid(struct daxctl_region *region, uuid_t u static void free_mem(struct daxctl_dev *dev) { - if (dev && dev->mem) { + if (dev->mem) { free(dev->mem->node_path); + free(dev->mem->mem_buf); free(dev->mem); dev->mem = NULL; } @@ -450,6 +451,7 @@ static struct daxctl_memory *daxctl_dev_alloc_mem(struct daxctl_dev *dev) goto err_node; mem->buf_len = strlen(node_base) + 256; + dev->mem = mem; return mem; err_node: -- 2.20.1 _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org