summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Duncan <lduncan@suse.com>2021-01-26 11:48:32 -0800
committerLee Duncan <lduncan@suse.com>2021-01-26 11:48:32 -0800
commit76a5ebf955702f676a5ea5f7b43bb8fb436edc40 (patch)
tree4cd6318a961d5e935de7f3bfe43c9ce86f2913a9
parent43345fb99b93158aedbbf7fda89d03da06c896f0 (diff)
downloadopen-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.c8
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, &params, list) {
+ list_for_each_entry_safe(param, tmp_param, &params, list) {
list_del(&param->list);
idbm_free_user_param(param);
}