lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 28 Jul 2011 16:11:28 +0800 From: Alex Shi <alex.shi@...el.com> To: mgorman@...e.de Cc: minchan.kim@...il.com, stable@...nel.org, linux-kernel@...r.kernel.org, andrea@...share.com, tim.c.chen@...el.com, shaohua.li@...el.com Subject: [PATCH] kswapd: assign new_order and new_classzone_idx after wakeup in sleeping There 2 place to read pgdat in kswapd. One is return from a successful balance, another is waked up from sleeping. But the new_order and new_classzone_idx are not assigned after kswapd_try_to_sleep(), that will cause a bug in the following scenario. After the last time successful balance, kswapd goes to sleep. So the new_order and new_classzone_idx were assigned to 0 and MAX-1 since there is no new wakeup during last time balancing. Now, a new wakeup came and finish balancing successful with order > 0. But since new_order is still 0, this time successful balancing were judged as a failed balance. so, if there is another new wakeup coming during balancing, kswapd cann't read this and still want to try to sleep. And if the new wakeup is a tighter request, kswapd may goes to sleep, not to do balancing. That is incorrect. So, to avoid above problem, the new_order and new_classzone_idx need to be assigned for later successful comparison. Signed-off-by: Alex Shi <alex.shi@...el.com> --- mm/vmscan.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 7ef6912..eb7bcce 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2850,6 +2850,8 @@ static int kswapd(void *p) kswapd_try_to_sleep(pgdat, order, classzone_idx); order = pgdat->kswapd_max_order; classzone_idx = pgdat->classzone_idx; + new_order = order; + new_classzone_idx = classzone_idx; pgdat->kswapd_max_order = 0; pgdat->classzone_idx = pgdat->nr_zones - 1; } -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists