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: Tue, 25 Feb 2020 17:29:52 -0800 From: Matthew Wilcox <willy@...radead.org> To: Qian Cai <cai@....pw> Cc: akpm@...ux-foundation.org, elver@...gle.com, linux-mm@...ck.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH] mm/vmscan: fix data races at kswapd_classzone_idx On Tue, Feb 25, 2020 at 11:55:26AM -0500, Qian Cai wrote: > - if (pgdat->kswapd_classzone_idx == MAX_NR_ZONES) > - pgdat->kswapd_classzone_idx = classzone_idx; > - else > - pgdat->kswapd_classzone_idx = max(pgdat->kswapd_classzone_idx, > - classzone_idx); > + if (READ_ONCE(pgdat->kswapd_classzone_idx) == MAX_NR_ZONES || > + READ_ONCE(pgdat->kswapd_classzone_idx) < classzone_idx) > + WRITE_ONCE(pgdat->kswapd_classzone_idx, classzone_idx); > + > pgdat->kswapd_order = max(pgdat->kswapd_order, order); Doesn't this line have the exact same problem you're "solving" above? Also, why would you do this crazy "f(READ_ONCE(x)) || g(READ_ONCE(x))? Surely you should be stashing READ_ONCE(x) into a local variable? And there are a _lot_ of places which access kswapd_classzone_idx without a lock. Are you sure this patch is sufficient?
Powered by blists - more mailing lists