loader: strdup name strings from dataset walker

The removal of zfs scratch buffer did miss the fact the dataset
lookup was picking up the names from zap list.
This commit is contained in:
Toomas Soome 2020-03-28 21:50:27 +00:00
parent c907ec9e16
commit 215597f05f

View File

@ -92,7 +92,7 @@ static int zfs_env_count;
SLIST_HEAD(zfs_be_list, zfs_be_entry) zfs_be_head = SLIST_HEAD_INITIALIZER(zfs_be_head);
struct zfs_be_list *zfs_be_headp;
struct zfs_be_entry {
const char *name;
cha *name;
SLIST_ENTRY(zfs_be_entry) entries;
} *zfs_be, *zfs_be_tmp;
@ -906,6 +906,7 @@ zfs_bootenv_initial(const char *name)
while (!SLIST_EMPTY(&zfs_be_head)) {
zfs_be = SLIST_FIRST(&zfs_be_head);
SLIST_REMOVE_HEAD(&zfs_be_head, entries);
free(zfs_be->name);
free(zfs_be);
}
@ -973,6 +974,7 @@ zfs_bootenv(const char *name)
while (!SLIST_EMPTY(&zfs_be_head)) {
zfs_be = SLIST_FIRST(&zfs_be_head);
SLIST_REMOVE_HEAD(&zfs_be_head, entries);
free(zfs_be->name);
free(zfs_be);
}
@ -992,7 +994,11 @@ zfs_belist_add(const char *name, uint64_t value __unused)
if (zfs_be == NULL) {
return (ENOMEM);
}
zfs_be->name = name;
zfs_be->name = strdup(name);
if (zfs_be->name == NULL) {
free(zfs_be);
return (ENOMEM);
}
SLIST_INSERT_HEAD(&zfs_be_head, zfs_be, entries);
zfs_env_count++;