[coreboot-gerrit] Patch set updated for coreboot: fmaptool: Make sure strings are not destroyed on hdestroy()

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Thu Apr 21 23:08:04 CEST 2016


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14443

-gerrit

commit 26741639fcd50947676368a0e1311efa53c7c5b5
Author: Stefan Reinauer <stefan.reinauer at coreboot.org>
Date:   Wed Apr 20 22:11:25 2016 -0700

    fmaptool: Make sure strings are not destroyed on hdestroy()
    
    On Mac OS X hdestroy seems to overwrite node->name. Hence
    duplicate the string before stuffing it into the hash search
    table.
    
    Change-Id: Ieac2025f5c960cdb8d509dde7e92ba0dd32644b0
    Signed-off-by: Stefan Reinauer <stefan.reinauer at coreboot.org>
---
 util/cbfstool/fmd.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/util/cbfstool/fmd.c b/util/cbfstool/fmd.c
index a11b7f0..afd8701 100644
--- a/util/cbfstool/fmd.c
+++ b/util/cbfstool/fmd.c
@@ -48,10 +48,23 @@
  * @return      Whether the node is valid
  */
 static bool validate_descriptor_node(const struct flashmap_descriptor *node,
-		struct unsigned_option start, struct unsigned_option end) {
+		struct unsigned_option start, struct unsigned_option end)
+{
 	assert(node);
 
+#if __GLIBC__
+	/* GLIBC is different than the BSD libc implementations:
+	 *   The  hdestroy() [function does] not free the buffers pointed
+	 *   to by the key and data elements of the hash table entries.
+	 * vs:
+	 *   The hdestroy() function calls free(3) for each comparison key in
+	 *   the search table but not the data item associated with the key.
+	 */
 	ENTRY search_key = {node->name, NULL};
+#else
+	ENTRY search_key = {strdup(node->name), NULL};
+#endif
+
 	if (hsearch(search_key, FIND)) {
 		ERROR("Multiple sections with name '%s'\n", node->name);
 		return false;



More information about the coreboot-gerrit mailing list