libfdtgen: fix string_buf overwriting

string_buf will be overwritten by recursive calls,
need to back up the string_buf before recursive calls
and free after that.
diff --git a/libfdtgen/fdtgen.c b/libfdtgen/fdtgen.c
index 571e167..acc5e40 100644
--- a/libfdtgen/fdtgen.c
+++ b/libfdtgen/fdtgen.c
@@ -114,14 +114,15 @@
         strcat(handle->string_buf, "/");
         const char *n = fdt_get_name(dtb, child, NULL);
         strcat(handle->string_buf, n);
+        char *curr = strdup(handle->string_buf);
 
         int keep = keep_node_and_parents(handle, child, target);
         if (keep) {
             path_node_t *target_node = NULL;
-            HASH_FIND_STR(handle->nodes_table, handle->string_buf, target_node);
+            HASH_FIND_STR(handle->nodes_table, curr, target_node);
             if (target_node == NULL) {
                 target_node = malloc(sizeof(path_node_t));
-                target_node->name = strdup(handle->string_buf);
+                target_node->name = strdup(curr);
                 target_node->offset = offset;
                 target_node->cnt = 0;
                 target_node->flag = DEVICE_KEEP;
@@ -129,7 +130,7 @@
             }
 
             dependency_t *dep;
-            HASH_FIND_STR(handle->dep_table, handle->string_buf, dep);
+            HASH_FIND_STR(handle->dep_table, curr, dep);
             if (dep == NULL) {
                 register_node_dependencies(handle, child);
             }
@@ -138,6 +139,7 @@
         }
 
         handle->string_buf[new_len] = '\0';
+        free(curr);
     }
 
     return 0;