All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: linux-tip-commits@vger.kernel.org,
	Dave Hansen <dave.hansen@linux.intel.com>,
	stable@vger.kernel.org, x86@kernel.org
Subject: Re: [tip: x86/urgent] x86/mm: Avoid using set_pgd() outside of real PGD pages
Date: Mon, 26 Jun 2023 09:54:50 +0100	[thread overview]
Message-ID: <20230626085450.GA1344014@google.com> (raw)
In-Reply-To: <168694160067.404.13343792487331756749.tip-bot2@tip-bot2>

Dear Stable,

On Fri, 16 Jun 2023, tip-bot2 for Lee Jones wrote:

> The following commit has been merged into the x86/urgent branch of tip:
> 
> Commit-ID:     d082d48737c75d2b3cc1f972b8c8674c25131534
> Gitweb:        https://git.kernel.org/tip/d082d48737c75d2b3cc1f972b8c8674c25131534
> Author:        Lee Jones <lee@kernel.org>
> AuthorDate:    Wed, 14 Jun 2023 17:38:54 +01:00
> Committer:     Dave Hansen <dave.hansen@linux.intel.com>
> CommitterDate: Fri, 16 Jun 2023 11:46:42 -07:00
> 
> x86/mm: Avoid using set_pgd() outside of real PGD pages
> 
> KPTI keeps around two PGDs: one for userspace and another for the
> kernel. Among other things, set_pgd() contains infrastructure to
> ensure that updates to the kernel PGD are reflected in the user PGD
> as well.
> 
> One side-effect of this is that set_pgd() expects to be passed whole
> pages.  Unfortunately, init_trampoline_kaslr() passes in a single entry:
> 'trampoline_pgd_entry'.
> 
> When KPTI is on, set_pgd() will update 'trampoline_pgd_entry' (an
> 8-Byte globally stored [.bss] variable) and will then proceed to
> replicate that value into the non-existent neighboring user page
> (located +4k away), leading to the corruption of other global [.bss]
> stored variables.
> 
> Fix it by directly assigning 'trampoline_pgd_entry' and avoiding
> set_pgd().
> 
> [ dhansen: tweak subject and changelog ]
> 
> Fixes: 0925dda5962e ("x86/mm/KASLR: Use only one PUD entry for real mode trampoline")
> Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
> Signed-off-by: Lee Jones <lee@kernel.org>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: <stable@vger.kernel.org>
> Link: https://lore.kernel.org/all/20230614163859.924309-1-lee@kernel.org/g
> ---
>  arch/x86/mm/kaslr.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c
> index 557f0fe..37db264 100644
> --- a/arch/x86/mm/kaslr.c
> +++ b/arch/x86/mm/kaslr.c
> @@ -172,10 +172,10 @@ void __meminit init_trampoline_kaslr(void)
>  		set_p4d(p4d_tramp,
>  			__p4d(_KERNPG_TABLE | __pa(pud_page_tramp)));
>  
> -		set_pgd(&trampoline_pgd_entry,
> -			__pgd(_KERNPG_TABLE | __pa(p4d_page_tramp)));
> +		trampoline_pgd_entry =
> +			__pgd(_KERNPG_TABLE | __pa(p4d_page_tramp));
>  	} else {
> -		set_pgd(&trampoline_pgd_entry,
> -			__pgd(_KERNPG_TABLE | __pa(pud_page_tramp)));
> +		trampoline_pgd_entry =
> +			__pgd(_KERNPG_TABLE | __pa(pud_page_tramp));
>  	}
>  }

Could we have this expedited please?  There are users waiting for it.

Upstream commit is:

  d082d48737c75 ("x86/mm: Avoid using set_pgd() outside of real PGD pages")

Thanks muchly.

-- 
Lee Jones [李琼斯]

  reply	other threads:[~2023-06-26  9:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-16 18:53 [tip: x86/urgent] x86/mm: Avoid using set_pgd() outside of real PGD pages tip-bot2 for Lee Jones
2023-06-26  8:54 ` Lee Jones [this message]
2023-06-26  9:08   ` Greg KH
2023-06-26  9:11     ` Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230626085450.GA1344014@google.com \
    --to=lee@kernel.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.