linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* Can the huge zero page be partially mapped?
@ 2024-03-04 16:54 Matthew Wilcox
  2024-03-04 19:19 ` Yang Shi
  0 siblings, 1 reply; 3+ messages in thread
From: Matthew Wilcox @ 2024-03-04 16:54 UTC (permalink / raw)
  To: linux-mm

I looked at the definition of is_huge_zero_page():

static inline bool is_huge_zero_page(struct page *page)
{
        return READ_ONCE(huge_zero_page) == page;
}

That made me raise my eyebrows a bit because it will return false for
tail pages of the HZP (that was at least unexpected for me).  Then we
have this beauty:

void free_page_and_swap_cache(struct page *page)
{
        struct folio *folio = page_folio(page);

        free_swap_cache(folio);
        if (!is_huge_zero_page(page))
                folio_put(folio);
}

So if we can call free_page_and_swap_cache() with a tail of the HZP
we can absolutely screw up its refcounting.  Now, we have VM_BUGs
to catch the refcount going below 0, and I haven't seen them being
hit, so I _presume_ it doesn't happen, but maybe somebody inventive
could come up with a way of putting a HZP tail into a page table ...?


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-03-04 21:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-04 16:54 Can the huge zero page be partially mapped? Matthew Wilcox
2024-03-04 19:19 ` Yang Shi
2024-03-04 21:52   ` David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox