Преглед на файлове

[settings] Use list_first_entry() when unregistering child settings

Unregistering a child settings block can have almost arbitrary
effects, due to the call to apply_settings().  Avoid potentially
dereferencing a stale pointer by using list_first_entry() rather than
list_for_each_entry_safe() to iterate over the list of child settings.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown преди 9 години
родител
ревизия
0af3d14a23
променени са 1 файла, в които са добавени 2 реда и са изтрити 2 реда
  1. 2
    2
      src/core/settings.c

+ 2
- 2
src/core/settings.c Целия файл

@@ -499,10 +499,10 @@ int register_settings ( struct settings *settings, struct settings *parent,
499 499
  */
500 500
 void unregister_settings ( struct settings *settings ) {
501 501
 	struct settings *child;
502
-	struct settings *tmp;
503 502
 
504 503
 	/* Unregister child settings */
505
-	list_for_each_entry_safe ( child, tmp, &settings->children, siblings ) {
504
+	while ( ( child = list_first_entry ( &settings->children,
505
+					     struct settings, siblings ) ) ) {
506 506
 		unregister_settings ( child );
507 507
 	}
508 508
 

Loading…
Отказ
Запис