lkml.org 
[lkml]   [2012]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH -alternative] mm: hugetlbfs: Close race during teardown of hugetlbfs shared page tables V2 (resend)
    On 07/20/2012 10:36 AM, Michal Hocko wrote:

    > --- a/arch/x86/mm/hugetlbpage.c
    > +++ b/arch/x86/mm/hugetlbpage.c
    > @@ -81,7 +81,12 @@ static void huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
    > if (saddr) {
    > spte = huge_pte_offset(svma->vm_mm, saddr);
    > if (spte) {
    > - get_page(virt_to_page(spte));
    > + struct page *spte_page = virt_to_page(spte);
    > + if (!is_hugetlb_pmd_page_valid(spte_page)) {

    What prevents somebody else from marking the hugetlb
    pmd invalid, between here...

    > + spte = NULL;
    > + continue;
    > + }

    ... and here?

    > + get_page(spte_page);
    > break;
    > }

    I think need to take the refcount before checking whether
    the hugetlb pmd is still valid.

    Also, disregard my previous email in this thread, I just
    read Mel's detailed explanation and wrapped my brain
    around the bug :)


    \
     
     \ /
      Last update: 2012-07-26 21:21    [W:4.105 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site