Răsfoiți Sursa

qnetd-algo: Fix list traversal corruption when freeing partitions.

TAILQ_* doesn't have a safe iterator for use when freeing entries, so the
only safe way of doing it (without assuming implementation) is to
restart the iterator after freeing the structure.

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Christine Caulfield 10 ani în urmă
părinte
comite
09b904e7ae
1 a modificat fișierele cu 4 adăugiri și 0 ștergeri
  1. 4 0
      qdevices/qnetd-algo-utils.c

+ 4 - 0
qdevices/qnetd-algo-utils.c

@@ -131,9 +131,13 @@ qnetd_algo_free_partitions(partitions_list_t *partitions_list)
 {
 	struct qnetd_algo_partition *cur_partition;
 
+restart:
 	TAILQ_FOREACH(cur_partition, partitions_list, entries) {
 		TAILQ_REMOVE(partitions_list, cur_partition, entries);
 		free(cur_partition);
+
+		/* TAILQ doesn't have a safe-removal interator */
+		goto restart;
 	}
 }