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 PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 13 Jan 2021 16:43:21 -0800 From: Dan Williams <dan.j.williams@...el.com> To: akpm@...ux-foundation.org Cc: Qian Cai <cai@....pw>, Michal Hocko <mhocko@...e.com>, Oscar Salvador <osalvador@...e.de>, David Hildenbrand <david@...hat.com>, David Hildenbrand <david@...hat.com>, Oscar Salvador <osalvador@...e.de>, linux-mm@...ck.org, linux-nvdimm@...ts.01.org, linux-kernel@...r.kernel.org Subject: [PATCH v4 2/5] mm: Teach pfn_to_online_page() to consider subsection validity pfn_section_valid() determines pfn validity on subsection granularity where pfn_valid() may be limited to coarse section granularity. Explicitly validate subsections after pfn_valid() succeeds. Fixes: b13bc35193d9 ("mm/hotplug: invalid PFNs from pfn_to_online_page()") Cc: Qian Cai <cai@....pw> Cc: Michal Hocko <mhocko@...e.com> Cc: Oscar Salvador <osalvador@...e.de> Reported-by: David Hildenbrand <david@...hat.com> Reviewed-by: David Hildenbrand <david@...hat.com> Reviewed-by: Oscar Salvador <osalvador@...e.de> Signed-off-by: Dan Williams <dan.j.williams@...el.com> --- mm/memory_hotplug.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 55a69d4396e7..d0c81f7a3347 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -308,11 +308,26 @@ static int check_hotplug_memory_addressable(unsigned long pfn, struct page *pfn_to_online_page(unsigned long pfn) { unsigned long nr = pfn_to_section_nr(pfn); + struct mem_section *ms; + + if (nr >= NR_MEM_SECTIONS) + return NULL; + + ms = __nr_to_section(nr); + if (!online_section(ms)) + return NULL; + + /* + * Save some code text when online_section() + + * pfn_section_valid() are sufficient. + */ + if (IS_ENABLED(CONFIG_HAVE_ARCH_PFN_VALID) && !pfn_valid(pfn)) + return NULL; + + if (!pfn_section_valid(ms, pfn)) + return NULL; - if (nr < NR_MEM_SECTIONS && online_section_nr(nr) && - pfn_valid_within(pfn)) - return pfn_to_page(pfn); - return NULL; + return pfn_to_page(pfn); } EXPORT_SYMBOL_GPL(pfn_to_online_page);
Powered by blists - more mailing lists