瀏覽代碼

[PATCH] ns558 list handling fix

Need to use list_for_entry_safe(), as we're removing items during the
traversal.  list_for_each_entry() uses the first ptr also as an iterator, if
you kfree() it slab takes it, might poison it and then you try to use it to
iterate to the next object in list.

Cc: Vojtech Pavlik <vojtech@suse.cz>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Alexander Nyberg 20 年之前
父節點
當前提交
22d0def9d0
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/input/gameport/ns558.c

+ 2 - 2
drivers/input/gameport/ns558.c

@@ -275,9 +275,9 @@ static int __init ns558_init(void)
 
 
 static void __exit ns558_exit(void)
 static void __exit ns558_exit(void)
 {
 {
-	struct ns558 *ns558;
+	struct ns558 *ns558, *safe;
 
 
-	list_for_each_entry(ns558, &ns558_list, node) {
+	list_for_each_entry_safe(ns558, safe, &ns558_list, node) {
 		gameport_unregister_port(ns558->gameport);
 		gameport_unregister_port(ns558->gameport);
 		release_region(ns558->io & ~(ns558->size - 1), ns558->size);
 		release_region(ns558->io & ~(ns558->size - 1), ns558->size);
 		kfree(ns558);
 		kfree(ns558);