From: Will Newton Date: Thu, 13 Jan 2011 00:59:26 +0000 (-0800) Subject: arch/um/drivers/line.c: safely iterate over list of winch handlers X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=48a0b7404db9b83799e97a7d599fceb8df66bf59;p=deliverable%2Flinux.git arch/um/drivers/line.c: safely iterate over list of winch handlers unregister_winch() should use list_for_each_safe(), as it can delete from the list. Signed-off-by: Will Newton Cc: richard -rw- weinberger Acked-by: WANG Cong Cc: Jeff Dike Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 1664cce7b0ac..050e4ddbbb65 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -821,12 +821,12 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_struct *tty, static void unregister_winch(struct tty_struct *tty) { - struct list_head *ele; + struct list_head *ele, *next; struct winch *winch; spin_lock(&winch_handler_lock); - list_for_each(ele, &winch_handlers) { + list_for_each_safe(ele, next, &winch_handlers) { winch = list_entry(ele, struct winch, list); if (winch->tty == tty) { free_winch(winch, 1);