diff options
author | Lee Duncan <lduncan@suse.com> | 2021-01-26 11:48:32 -0800 |
---|---|---|
committer | Lee Duncan <lduncan@suse.com> | 2021-01-26 11:48:32 -0800 |
commit | 76a5ebf955702f676a5ea5f7b43bb8fb436edc40 (patch) | |
tree | 4cd6318a961d5e935de7f3bfe43c9ce86f2913a9 | |
parent | 43345fb99b93158aedbbf7fda89d03da06c896f0 (diff) | |
download | open-iscsi-76a5ebf955702f676a5ea5f7b43bb8fb436edc40.tar.gz |
Fix iscsiadm segfault when exiting
Commit b532ad67d495d added some cleanup code
to iscsiadm right before it exits, but it
used a list_for_each_entry() to iterate through
a list was being deleted, when it should use
list_for_each_entry_safe().
Fixes: b532ad67d495d
-rw-r--r-- | usr/iscsiadm.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c index 4249af8..41b7e6f 100644 --- a/usr/iscsiadm.c +++ b/usr/iscsiadm.c @@ -3582,11 +3582,11 @@ main(int argc, char **argv) struct sigaction sa_old; struct sigaction sa_new; LIST_HEAD(ifaces); - struct iface_rec *iface = NULL, *tmp; + struct iface_rec *iface = NULL, *tmp_iface; struct node_rec *rec = NULL; uint32_t host_no = MAX_HOST_NO + 1; uint64_t index = ULLONG_MAX; - struct user_param *param; + struct user_param *param, *tmp_param; LIST_HEAD(params); struct iscsi_context *ctx = NULL; int librc = LIBISCSI_OK; @@ -4070,11 +4070,11 @@ out: free(rec); iscsi_sessions_free(ses, se_count); idbm_terminate(); - list_for_each_entry_safe(iface, tmp, &ifaces, list) { + list_for_each_entry_safe(iface, tmp_iface, &ifaces, list) { list_del(&iface->list); free(iface); } - list_for_each_entry(param, ¶ms, list) { + list_for_each_entry_safe(param, tmp_param, ¶ms, list) { list_del(¶m->list); idbm_free_user_param(param); } |