watchdog: avoid usage of iterator after loop
If potentially no valid element is found, 'p' would contain an invalid pointer past the iterator loop. To ensure 'p' is valid under any circumstances, the kfree() should be within the loop body. Additionally, Linus proposed to avoid any use of the list iterator variable after the loop, in the attempt to move the list iterator variable declaration into the macro to avoid any potential misuse after the loop [1]. Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1] Signed-off-by: Jakob Koschel <jkl820.git@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20230301-watchdog-avoid-iter-after-loop-v2-1-8411e3bbe0de@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
This commit is contained in:
parent
fc0c5db58f
commit
33e4945352
|
@ -207,10 +207,9 @@ void watchdog_unregister_pretimeout(struct watchdog_device *wdd)
|
|||
list_for_each_entry_safe(p, t, &pretimeout_list, entry) {
|
||||
if (p->wdd == wdd) {
|
||||
list_del(&p->entry);
|
||||
kfree(p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irq(&pretimeout_lock);
|
||||
|
||||
kfree(p);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue