On Tue, Nov 11, 2014 at 11:41:33AM +0100, Pino Toscano wrote:
Hi,
On Monday 10 November 2014 18:28:52 Mahmoud Al-Qudsi wrote:
> I’m not able to pin it myself from a brief look, but it seems that
> under certain conditions a call to hivex_node_delete_child can cause
> the allocations from _hivex_get_children to not be freed properly?
>
> I know that if the return value of _hivex_get_children is -1, no free
> is called; but from what I can see, -1 means there is nothing to be
> freed/it’s been taken care of.
>
> I’ve attached the valgrind log together with the output of
> HIVEX_OPEN_DEBUG, please let me know if there’s anything else I can
> provide to make this easier.
It seems like rather hivex_node_delete_child leaks the "blocks" array
returned by _hivex_get_children every time. The patch should be easy,
would you be able to give it a try to check whether it fixes the leak in
your application?
Thanks,
--
Pino Toscano
>From 854a8e763a83870e8248e132ec3a9a063f334035 Mon Sep 17 00:00:00
2001
From: Pino Toscano <ptoscano(a)redhat.com>
Date: Tue, 11 Nov 2014 11:36:30 +0100
Subject: [PATCH] lib: write: fix memory leak
Free the "blocks" array got from _hivex_get_children.
Thanks: Mahmoud Al-Qudsi
---
lib/write.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lib/write.c b/lib/write.c
index abd12c5..33b64e4 100644
--- a/lib/write.c
+++ b/lib/write.c
@@ -902,10 +902,13 @@ hivex_node_delete_child (hive_h *h, hive_node_h node)
}
}
}
+ free (blocks);
SET_ERRNO (ENOTSUP, "could not find parent to child link");
return -1;
found:;
+ free (blocks);
+
struct ntreg_nk_record *nk =
(struct ntreg_nk_record *) ((char *) h->addr + parent);
size_t nr_subkeys_in_nk = le32toh (nk->nr_subkeys);
--
1.9.3
ACK. I've included this in my tree, and I'm testing it using afl-fuzz.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW