2018-04-26 15:15:48

by Joerg Roedel

[permalink] [raw]
Subject: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"

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



2018-04-26 15:28:52

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"

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>

2018-04-26 15:33:23

by Jörg Rödel

[permalink] [raw]
Subject: Re: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"

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


2018-04-26 16:31:21

by Kani, Toshimitsu

[permalink] [raw]
Subject: Re: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"

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

2018-04-27 06:29:56

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"


* 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

2018-04-27 19:50:34

by Kani, Toshimitsu

[permalink] [raw]
Subject: Re: [PATCH] Revert "x86/mm: implement free pmd/pte page interfaces"

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