Re: Possible usage of uninitalized task_ratelimit variable in mm/page-writeback.c
From: Wu Fengguang <hidden>
Date: 2011-11-07 09:17:16
Also in:
linux-fsdevel
On Mon, Nov 07, 2011 at 04:18:24PM +0800, Witold Baryluk wrote:
Hi, I found a minor issue when compiling kernel today CC mm/page-writeback.o mm/page-writeback.c: In function a??balance_dirty_pages_ratelimited_nra??: include/trace/events/writeback.h:281:1: warning: a??task_ratelimita?? may be used uninitialized in this function [-Wuninitialized] mm/page-writeback.c:1018:16: note: a??task_ratelimita?? was declared here Indeed in balance_dirty_pages a task_ratelimit may be not initialized (initialization skiped by goto pause;), and then used when calling tracing hook.
Witold, thanks for the report! This patch should fix the bug. Thanks, Fengguang --- writeback: fix uninitialized task_ratelimit In balance_dirty_pages() task_ratelimit may be not initialized (initialization skiped by goto pause;), and then used when calling tracing hook. Fix it by moving the task_ratelimit assignment before goto pause. Reported-by: Witold Baryluk <redacted> Signed-off-by: Wu Fengguang <redacted> --- mm/page-writeback.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
--- linux.orig/mm/page-writeback.c 2011-11-07 17:07:04.080000043 +0800
+++ linux/mm/page-writeback.c 2011-11-07 17:08:43.232000031 +0800@@ -1097,13 +1097,13 @@ static void balance_dirty_pages(struct a pos_ratio = bdi_position_ratio(bdi, dirty_thresh, background_thresh, nr_dirty, bdi_thresh, bdi_dirty); - if (unlikely(pos_ratio == 0)) { + task_ratelimit = (u64)dirty_ratelimit * + pos_ratio >> RATELIMIT_CALC_SHIFT; + if (unlikely(task_ratelimit == 0)) { pause = max_pause; goto pause; } - task_ratelimit = (u64)dirty_ratelimit * - pos_ratio >> RATELIMIT_CALC_SHIFT; - pause = (HZ * pages_dirtied) / (task_ratelimit | 1); + pause = (HZ * pages_dirtied) / task_ratelimit; if (unlikely(pause <= 0)) { trace_balance_dirty_pages(bdi, dirty_thresh, --
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>