Re: [PATCH v2] mm: teach dump_page() to correctly output poisoned struct pages
On Mon, 2 Jul 2018 14:05:36 -0400 Pavel Tatashin wrote: > If struct page is poisoned, and uninitialized access is detected via > PF_POISONED_CHECK(page) dump_page() is called to output the page. But, > the dump_page() itself accesses struct page to determine how to print > it, and therefore gets into a recursive loop. > > For example: > dump_page() > __dump_page() > PageSlab(page) >PF_POISONED_CHECK(page) > VM_BUG_ON_PGFLAGS(PagePoisoned(page), page) > dump_page() recursion loop. > > Fixes: f165b378bbdf ("mm: uninitialized struct page poisoning sanity > checking") > > Signed-off-by: Pavel Tatashin > Acked-by: Michal Hocko Thanks. I added a cc:stable to make sure this gets into 4.17.x.
Re: [PATCH v2] mm: teach dump_page() to correctly output poisoned struct pages
On Mon, 2 Jul 2018 14:05:36 -0400 Pavel Tatashin wrote: > If struct page is poisoned, and uninitialized access is detected via > PF_POISONED_CHECK(page) dump_page() is called to output the page. But, > the dump_page() itself accesses struct page to determine how to print > it, and therefore gets into a recursive loop. > > For example: > dump_page() > __dump_page() > PageSlab(page) >PF_POISONED_CHECK(page) > VM_BUG_ON_PGFLAGS(PagePoisoned(page), page) > dump_page() recursion loop. > > Fixes: f165b378bbdf ("mm: uninitialized struct page poisoning sanity > checking") > > Signed-off-by: Pavel Tatashin > Acked-by: Michal Hocko Thanks. I added a cc:stable to make sure this gets into 4.17.x.
Re: [PATCH v2] mm: teach dump_page() to correctly output poisoned struct pages
On Mon 02-07-18 14:05:36, Pavel Tatashin wrote: [...] > void __dump_page(struct page *page, const char *reason) > { > + bool page_poisoned = PagePoisoned(page); > + int mapcount; > + > + /* > + * If struct page is poisoned don't access Page*() functions as that > + * leads to recursive loop. Page*() check for poisoned pages, and calls > + * dump_page() when detected. > + */ > + if (page_poisoned) { > + pr_emerg("page:%px is uninitialized and poisoned", page); > + goto hex_only; > + } Thanks for the updated comment. Exactly what I was looking for! -- Michal Hocko SUSE Labs
Re: [PATCH v2] mm: teach dump_page() to correctly output poisoned struct pages
On Mon 02-07-18 14:05:36, Pavel Tatashin wrote: [...] > void __dump_page(struct page *page, const char *reason) > { > + bool page_poisoned = PagePoisoned(page); > + int mapcount; > + > + /* > + * If struct page is poisoned don't access Page*() functions as that > + * leads to recursive loop. Page*() check for poisoned pages, and calls > + * dump_page() when detected. > + */ > + if (page_poisoned) { > + pr_emerg("page:%px is uninitialized and poisoned", page); > + goto hex_only; > + } Thanks for the updated comment. Exactly what I was looking for! -- Michal Hocko SUSE Labs