static int get_syms(char ***symsp, size_t *cntp)
 {
        size_t cap = 0, cnt = 0, i;
-       char *name, **syms = NULL;
+       char *name = NULL, **syms = NULL;
        struct hashmap *map;
        char buf[256];
        FILE *f;
                /* skip modules */
                if (strchr(buf, '['))
                        continue;
+
+               free(name);
                if (sscanf(buf, "%ms$*[^\n]\n", &name) != 1)
                        continue;
                /*
                if (!strncmp(name, "__ftrace_invalid_address__",
                             sizeof("__ftrace_invalid_address__") - 1))
                        continue;
+
                err = hashmap__add(map, name, NULL);
-               if (err) {
-                       free(name);
-                       if (err == -EEXIST)
-                               continue;
+               if (err == -EEXIST)
+                       continue;
+               if (err)
                        goto error;
-               }
+
                err = libbpf_ensure_mem((void **) &syms, &cap,
                                        sizeof(*syms), cnt + 1);
-               if (err) {
-                       free(name);
+               if (err)
                        goto error;
-               }
-               syms[cnt] = name;
-               cnt++;
+
+               syms[cnt++] = name;
+               name = NULL;
        }
 
        *symsp = syms;
        *cntp = cnt;
 
 error:
+       free(name);
        fclose(f);
        hashmap__free(map);
        if (err) {
                for (i = 0; i < cnt; i++)
-                       free(syms[cnt]);
+                       free(syms[i]);
                free(syms);
        }
        return err;