From: Joerg Roedel <[email protected]>
This reverts commit 28ee90fe6048fa7b7ceaeb8831c0e4e454a4cf89.
This commit is broken for x86, as it unmaps the PTE and PMD
pages and immediatly frees them without doing a TLB flush.
Further this lacks synchronization with other page-tables in
the system when the PMD pages are not shared between
mm_structs.
On x86-32 with PAE and PTI patches on-top this patch
triggers the BUG_ON in vmalloc_sync_one() because the kernel
and the process page-table were not synchronized.
Signed-off-by: Joerg Roedel <[email protected]>
---
arch/x86/mm/pgtable.c | 28 ++--------------------------
1 file changed, 2 insertions(+), 26 deletions(-)
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index ae98d4c5e32a..fd02a537a80f 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -787,22 +787,7 @@ int pmd_clear_huge(pmd_t *pmd)
*/
int pud_free_pmd_page(pud_t *pud)
{
- pmd_t *pmd;
- int i;
-
- if (pud_none(*pud))
- return 1;
-
- pmd = (pmd_t *)pud_page_vaddr(*pud);
-
- for (i = 0; i < PTRS_PER_PMD; i++)
- if (!pmd_free_pte_page(&pmd[i]))
- return 0;
-
- pud_clear(pud);
- free_page((unsigned long)pmd);
-
- return 1;
+ return pud_none(*pud);
}
/**
@@ -814,15 +799,6 @@ int pud_free_pmd_page(pud_t *pud)
*/
int pmd_free_pte_page(pmd_t *pmd)
{
- pte_t *pte;
-
- if (pmd_none(*pmd))
- return 1;
-
- pte = (pte_t *)pmd_page_vaddr(*pmd);
- pmd_clear(pmd);
- free_page((unsigned long)pte);
-
- return 1;
+ return pmd_none(*pmd);
}
#endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
--
2.13.6
On Thu, Apr 26, 2018 at 05:14:07PM +0200, Joerg Roedel wrote:
> From: Joerg Roedel <[email protected]>
>
> This reverts commit 28ee90fe6048fa7b7ceaeb8831c0e4e454a4cf89.
>
> This commit is broken for x86, as it unmaps the PTE and PMD
> pages and immediatly frees them without doing a TLB flush.
>
> Further this lacks synchronization with other page-tables in
> the system when the PMD pages are not shared between
> mm_structs.
>
> On x86-32 with PAE and PTI patches on-top this patch
> triggers the BUG_ON in vmalloc_sync_one() because the kernel
> and the process page-table were not synchronized.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> arch/x86/mm/pgtable.c | 28 ++--------------------------
> 1 file changed, 2 insertions(+), 26 deletions(-)
<formletter>
This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.
</formletter>
On Thu, Apr 26, 2018 at 05:27:12PM +0200, Greg KH wrote:
> <formletter>
>
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree. Please read:
> https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
>
> </formletter>
That is fine, as this is an upstream-first submission. When this commit
gets accepted it can also be applied to stable, given the original
commit was applied there too (didn't check that).
I just cc'ed stable because it was cc'ed on the original patch.
Thanks,
Joerg
On Thu, 2018-04-26 at 17:14 +0200, Joerg Roedel wrote:
> From: Joerg Roedel <[email protected]>
>
> This reverts commit 28ee90fe6048fa7b7ceaeb8831c0e4e454a4cf89.
>
> This commit is broken for x86, as it unmaps the PTE and PMD
> pages and immediatly frees them without doing a TLB flush.
>
> Further this lacks synchronization with other page-tables in
> the system when the PMD pages are not shared between
> mm_structs.
>
> On x86-32 with PAE and PTI patches on-top this patch
> triggers the BUG_ON in vmalloc_sync_one() because the kernel
> and the process page-table were not synchronized.
>
> Signed-off-by: Joerg Roedel <[email protected]>
I do not agree with the comments and this revert. Let's discuss further
on the original thread.
Thanks,
-Toshi
* Kani, Toshi <[email protected]> wrote:
> On Thu, 2018-04-26 at 17:14 +0200, Joerg Roedel wrote:
> > From: Joerg Roedel <[email protected]>
> >
> > This reverts commit 28ee90fe6048fa7b7ceaeb8831c0e4e454a4cf89.
> >
> > This commit is broken for x86, as it unmaps the PTE and PMD
> > pages and immediatly frees them without doing a TLB flush.
> >
> > Further this lacks synchronization with other page-tables in
> > the system when the PMD pages are not shared between
> > mm_structs.
> >
> > On x86-32 with PAE and PTI patches on-top this patch
> > triggers the BUG_ON in vmalloc_sync_one() because the kernel
> > and the process page-table were not synchronized.
> >
> > Signed-off-by: Joerg Roedel <[email protected]>
>
> I do not agree with the comments and this revert. Let's discuss further
> on the original thread.
The original patch is totally broken (it's based on a misunderstanding), so unless
you have a fix the revert is justified.
Thanks,
Ingo
On Fri, 2018-04-27 at 08:28 +0200, Ingo Molnar wrote:
> * Kani, Toshi <[email protected]> wrote:
>
> > On Thu, 2018-04-26 at 17:14 +0200, Joerg Roedel wrote:
> > > From: Joerg Roedel <[email protected]>
> > >
> > > This reverts commit 28ee90fe6048fa7b7ceaeb8831c0e4e454a4cf89.
> > >
> > > This commit is broken for x86, as it unmaps the PTE and PMD
> > > pages and immediatly frees them without doing a TLB flush.
> > >
> > > Further this lacks synchronization with other page-tables in
> > > the system when the PMD pages are not shared between
> > > mm_structs.
> > >
> > > On x86-32 with PAE and PTI patches on-top this patch
> > > triggers the BUG_ON in vmalloc_sync_one() because the kernel
> > > and the process page-table were not synchronized.
> > >
> > > Signed-off-by: Joerg Roedel <[email protected]>
> >
> > I do not agree with the comments and this revert. Let's discuss further
> > on the original thread.
>
> The original patch is totally broken (it's based on a misunderstanding), so unless
> you have a fix the revert is justified.
I am working on a fix on top of this patch.
Thanks,
-Toshi