On Tue, Oct 15, 2019 at 3:06 AM Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> wrote:
On Tue, Oct 08, 2019 at 11:37:11AM +0200, Thomas HellstrÃm (VMware) wrote:The _devmap() check in these paths near _trans_unstable() has always
From: Thomas Hellstrom <thellstrom@xxxxxxxxxx>I *think* it is correct and we should do the same for PMD, but I may be
A huge pud page can theoretically be faulted in racing with pmd_alloc()
in __handle_mm_fault(). That will lead to pmd_alloc() returning an
invalid pmd pointer. Fix this by adding a pud_trans_unstable() function
similar to pmd_trans_unstable() and check whether the pud is really stable
before using the pmd pointer.
Race:
Thread 1: Thread 2: Comment
create_huge_pud() Fallback - not taken.
create_huge_pud() Taken.
pmd_alloc() Returns an invalid pointer.
Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx>
Fixes: a00cc7d9dd93 ("mm, x86: add support for PUD-sized transparent hugepages")
Signed-off-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx>
---
RFC: We include pud_devmap() as an unstable PUD flag. Is this correct?
Do the same for pmds?
wrong.
Dan, Matthew, could you comment on this?
been about avoiding assumptions that the corresponding page might be
page cache or anonymous which for dax it's neither and does not behave
like a typical page.