From: Wim Van Sebroeck Date: Wed, 15 Oct 2008 08:53:06 +0000 (+0000) Subject: [WATCHDOG] ib700wdt.c - fix buffer_underflow bug X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=7c2500f17d65092d93345f3996cf82ebca17e9ff;p=openwrt%2Fstaging%2Fblogic.git [WATCHDOG] ib700wdt.c - fix buffer_underflow bug This fixes Bug 11399: if ibwdt_set_heartbeat(int t) is called with value 30 then the check "if ((t < 0) || (t > 30))" in ibwdt_set_heartbeat is not going to fail because t == 30, but in the loop, the check wd_times[i] > t is never going to be true because none of the wd_times are greater than the value of t (i.e. 30). So we are exiting the loop with i == -1 and therefore setting wd_margin to -1 which is wrong. Reported-by: Zvonimir Rakamaric Signed-off-by: Wim Van Sebroeck --- diff --git a/drivers/watchdog/ib700wdt.c b/drivers/watchdog/ib700wdt.c index 05a28106e8eb..8782ec1f5aa0 100644 --- a/drivers/watchdog/ib700wdt.c +++ b/drivers/watchdog/ib700wdt.c @@ -154,7 +154,7 @@ static int ibwdt_set_heartbeat(int t) return -EINVAL; for (i = 0x0F; i > -1; i--) - if (wd_times[i] > t) + if (wd_times[i] >= t) break; wd_margin = i; return 0;