Re: [PATCH, v2] x86: use the right protections for split-up pagetables

Ingo Molnar
2009-02-20T10:25:25Z

* Ingo Molnar <mingo@elte.hu> wrote:

> [...] There's never any good reason to play protection games
> with higher-level pagetable entries. We dont do it to
> user-space pagetables either - we just populate them to
> _PAGE_TABLE and that's it.

btw., this means that we could probably even use _PAGE_TABLE
here (i.e. with the _PAGE_USER bit set), and rely on the PTE
clearing the user bit ... but in this case that tiny bit of
paranoia seems justified.

Btw., i also checked when this bug got introduced, and it got
introduced 5 years ago (in May 2004) in 2.6.7-rc1, via this
commit [historic-git sha1]:

fb75a3d: [PATCH] x86-64 updates

Date: Fri May 14 20:40:53 2004 -0700

[...]
- Handle NX bit for code pages correctly in change_page_attr()
[...]

- set_pte(kpte,mk_pte(split, PAGE_KERNEL));
+ set_pte(kpte,mk_pte(split, ref_prot));

( That 'set_pte(kpte,...)' sequence is not a pte update but a
_pmd_ update, it is the ex-largepage pte, i.e. the pmd. )

So it's an ancient, dormant bug in the CPA code that nobody ever
triggered, and we didnt notice when we rewrote that code either.

Ingo