Re: [RFC 2/2] x86/mm/cpa: drop pgprot_clear_protnone_bits()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2022-06-14 at 15:53 +0900, Hyeonggon Yoo wrote:
> On Tue, Jun 14, 2022 at 03:39:33PM +0900, Hyeonggon Yoo wrote:
> > commit a8aed3e0752b4 ("x86/mm/pageattr: Prevent PSE and GLOABL
> > leftovers
> > to confuse pmd/pte_present and pmd_huge") made CPA clear
> > _PAGE_GLOBAL when
> > _PAGE_PRESENT is not set. This prevents kernel crashing when kernel
> > reads
> > a page with !_PAGE_PRESENT and _PAGE_PROTNONE (_PAGE_GLOBAL). And
> > then it
> > set _PAGE_GLOBAL back when setting _PAGE_PRESENT again.
> > 
> > After commit d1440b23c922d ("x86/mm: Factor out pageattr
> > _PAGE_GLOBAL
> > setting") made kernel not set unconditionally _PAGE_GLOBAL, pages
> > lose
> > global flag after _set_pages_np() and _set_pages_p() are called.
> > 
> > But after commit 3166851142411 ("x86: skip check for spurious
> > faults for
> > non-present faults"), spurious_kernel_fault() does not confuse
> > pte/pmd entries with _PAGE_PROTNONE as present anymore. So simply
> > drop pgprot_clear_protnone_bits().
> 
>  
> Looks like I forgot to Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx>
> 
> Plus I did check that kernel does not crash when reading from/writing
> to
> non-present pages with this patch applied.

Thanks for the history.

I think we should still fix pte_present() to not check prot_none if the
user bit is clear. The spurious fault handler infinite loop may no
longer be a problem, but pte_present() still would return true for
kernel NP pages, so be fragile. Today I see at least the oops message
and memory hotunplug (see remove_pagetable()) that would get confused.





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux