linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
@ 2022-11-22 17:40 Michael Kelley
  2022-11-25 15:19 ` Wei Liu
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Kelley @ 2022-11-22 17:40 UTC (permalink / raw)
  To: hpa, kys, haiyangz, wei.liu, decui, luto, peterz, davem,
	edumazet, kuba, pabeni, lpieralisi, robh, kw, bhelgaas, arnd,
	hch, m.szyprowski, robin.murphy, thomas.lendacky, brijesh.singh,
	tglx, mingo, bp, dave.hansen, Tianyu.Lan, kirill.shutemov,
	sathyanarayanan.kuppuswamy, ak, isaku.yamahata, dan.j.williams,
	jane.chu, seanjc, tony.luck, x86, linux-kernel, linux-hyperv,
	netdev, linux-pci, linux-arch, iommu
  Cc: mikelley

Current code re-calculates the size after aligning the starting and
ending physical addresses on a page boundary. But the re-calculation
also embeds the masking of high order bits that exceed the size of
the physical address space (via PHYSICAL_PAGE_MASK). If the masking
removes any high order bits, the size calculation results in a huge
value that is likely to immediately fail.

Fix this by re-calculating the page-aligned size first. Then mask any
high order bits using PHYSICAL_PAGE_MASK.

Fixes: ffa71f33a820 ("x86, ioremap: Fix incorrect physical address handling in PAE mode")
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Michael Kelley <mikelley@microsoft.com>
---

This patch was previously Patch 1 of a larger series[1].  Breaking
it out separately per discussion with Dave Hansen and Boris Petkov.

[1] https://lore.kernel.org/linux-hyperv/1668624097-14884-1-git-send-email-mikelley@microsoft.com/

 arch/x86/mm/ioremap.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 78c5bc6..6453fba 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -217,9 +217,15 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
 	 * Mappings have to be page-aligned
 	 */
 	offset = phys_addr & ~PAGE_MASK;
-	phys_addr &= PHYSICAL_PAGE_MASK;
+	phys_addr &= PAGE_MASK;
 	size = PAGE_ALIGN(last_addr+1) - phys_addr;
 
+	/*
+	 * Mask out any bits not part of the actual physical
+	 * address, like memory encryption bits.
+	 */
+	phys_addr &= PHYSICAL_PAGE_MASK;
+
 	retval = memtype_reserve(phys_addr, (u64)phys_addr + size,
 						pcm, &new_pcm);
 	if (retval) {
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
  2022-11-22 17:40 [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller() Michael Kelley
@ 2022-11-25 15:19 ` Wei Liu
  2022-11-28 14:43   ` Michael Kelley (LINUX)
  0 siblings, 1 reply; 5+ messages in thread
From: Wei Liu @ 2022-11-25 15:19 UTC (permalink / raw)
  To: Michael Kelley
  Cc: hpa, kys, haiyangz, wei.liu, decui, luto, peterz, davem,
	edumazet, kuba, pabeni, lpieralisi, robh, kw, bhelgaas, arnd,
	hch, m.szyprowski, robin.murphy, thomas.lendacky, brijesh.singh,
	tglx, mingo, bp, dave.hansen, Tianyu.Lan, kirill.shutemov,
	sathyanarayanan.kuppuswamy, ak, isaku.yamahata, dan.j.williams,
	jane.chu, seanjc, tony.luck, x86, linux-kernel, linux-hyperv,
	netdev, linux-pci, linux-arch, iommu

On Tue, Nov 22, 2022 at 09:40:42AM -0800, Michael Kelley wrote:
> Current code re-calculates the size after aligning the starting and
> ending physical addresses on a page boundary. But the re-calculation
> also embeds the masking of high order bits that exceed the size of
> the physical address space (via PHYSICAL_PAGE_MASK). If the masking
> removes any high order bits, the size calculation results in a huge
> value that is likely to immediately fail.
> 
> Fix this by re-calculating the page-aligned size first. Then mask any
> high order bits using PHYSICAL_PAGE_MASK.
> 
> Fixes: ffa71f33a820 ("x86, ioremap: Fix incorrect physical address handling in PAE mode")
> Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
> Signed-off-by: Michael Kelley <mikelley@microsoft.com>

Reviewed-by: Wei Liu <wei.liu@kernel.org>

> ---
> 
> This patch was previously Patch 1 of a larger series[1].  Breaking
> it out separately per discussion with Dave Hansen and Boris Petkov.
> 
> [1] https://lore.kernel.org/linux-hyperv/1668624097-14884-1-git-send-email-mikelley@microsoft.com/
> 
>  arch/x86/mm/ioremap.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
> index 78c5bc6..6453fba 100644
> --- a/arch/x86/mm/ioremap.c
> +++ b/arch/x86/mm/ioremap.c
> @@ -217,9 +217,15 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
>  	 * Mappings have to be page-aligned
>  	 */
>  	offset = phys_addr & ~PAGE_MASK;
> -	phys_addr &= PHYSICAL_PAGE_MASK;
> +	phys_addr &= PAGE_MASK;
>  	size = PAGE_ALIGN(last_addr+1) - phys_addr;
>  
> +	/*
> +	 * Mask out any bits not part of the actual physical
> +	 * address, like memory encryption bits.
> +	 */
> +	phys_addr &= PHYSICAL_PAGE_MASK;
> +
>  	retval = memtype_reserve(phys_addr, (u64)phys_addr + size,
>  						pcm, &new_pcm);
>  	if (retval) {
> -- 
> 1.8.3.1
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
  2022-11-25 15:19 ` Wei Liu
@ 2022-11-28 14:43   ` Michael Kelley (LINUX)
  2022-11-28 15:45     ` Borislav Petkov
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Kelley (LINUX) @ 2022-11-28 14:43 UTC (permalink / raw)
  To: Wei Liu, bp
  Cc: hpa, KY Srinivasan, Haiyang Zhang, Dexuan Cui, luto, peterz,
	davem, edumazet, kuba, pabeni, lpieralisi, robh, kw, bhelgaas,
	arnd, hch, m.szyprowski, robin.murphy, thomas.lendacky,
	brijesh.singh, tglx, mingo, dave.hansen, Tianyu Lan,
	kirill.shutemov, sathyanarayanan.kuppuswamy, ak, isaku.yamahata,
	Williams, Dan J, jane.chu, seanjc, tony.luck, x86, linux-kernel,
	linux-hyperv, netdev, linux-pci, linux-arch, iommu

From: Wei Liu <wei.liu@kernel.org> Sent: Friday, November 25, 2022 7:20 AM
> 
> On Tue, Nov 22, 2022 at 09:40:42AM -0800, Michael Kelley wrote:
> > Current code re-calculates the size after aligning the starting and
> > ending physical addresses on a page boundary. But the re-calculation
> > also embeds the masking of high order bits that exceed the size of
> > the physical address space (via PHYSICAL_PAGE_MASK). If the masking
> > removes any high order bits, the size calculation results in a huge
> > value that is likely to immediately fail.
> >
> > Fix this by re-calculating the page-aligned size first. Then mask any
> > high order bits using PHYSICAL_PAGE_MASK.
> >
> > Fixes: ffa71f33a820 ("x86, ioremap: Fix incorrect physical address handling in PAE mode")
> > Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
> > Signed-off-by: Michael Kelley <mikelley@microsoft.com>
> 
> Reviewed-by: Wei Liu <wei.liu@kernel.org>
> 
> > ---
> >
> > This patch was previously Patch 1 of a larger series[1].  Breaking
> > it out separately per discussion with Dave Hansen and Boris Petkov.
> >
> > [1] https://lore.kernel.org/linux-hyperv/1668624097-14884-1-git-send-email-mikelley@microsoft.com/
> >

Boris -- you were going to pick up this patch separately
though urgent.  Can you go ahead and do that?

https://lore.kernel.org/linux-hyperv/Y3vo5drAFPQSsrF4@zn.tnic/

Michael

> >  arch/x86/mm/ioremap.c | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
> > index 78c5bc6..6453fba 100644
> > --- a/arch/x86/mm/ioremap.c
> > +++ b/arch/x86/mm/ioremap.c
> > @@ -217,9 +217,15 @@ static void __ioremap_check_mem(resource_size_t addr, unsigned long size,
> >  	 * Mappings have to be page-aligned
> >  	 */
> >  	offset = phys_addr & ~PAGE_MASK;
> > -	phys_addr &= PHYSICAL_PAGE_MASK;
> > +	phys_addr &= PAGE_MASK;
> >  	size = PAGE_ALIGN(last_addr+1) - phys_addr;
> >
> > +	/*
> > +	 * Mask out any bits not part of the actual physical
> > +	 * address, like memory encryption bits.
> > +	 */
> > +	phys_addr &= PHYSICAL_PAGE_MASK;
> > +
> >  	retval = memtype_reserve(phys_addr, (u64)phys_addr + size,
> >  						pcm, &new_pcm);
> >  	if (retval) {
> > --
> > 1.8.3.1
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
  2022-11-28 14:43   ` Michael Kelley (LINUX)
@ 2022-11-28 15:45     ` Borislav Petkov
  2022-11-28 16:04       ` Michael Kelley (LINUX)
  0 siblings, 1 reply; 5+ messages in thread
From: Borislav Petkov @ 2022-11-28 15:45 UTC (permalink / raw)
  To: Michael Kelley (LINUX)
  Cc: Wei Liu, hpa, KY Srinivasan, Haiyang Zhang, Dexuan Cui, luto,
	peterz, davem, edumazet, kuba, pabeni, lpieralisi, robh, kw,
	bhelgaas, arnd, hch, m.szyprowski, robin.murphy, thomas.lendacky,
	brijesh.singh, tglx, mingo, dave.hansen, Tianyu Lan,
	kirill.shutemov, sathyanarayanan.kuppuswamy, ak, isaku.yamahata,
	Williams, Dan J, jane.chu, seanjc, tony.luck, x86, linux-kernel,
	linux-hyperv, netdev, linux-pci, linux-arch, iommu

On Mon, Nov 28, 2022 at 02:43:28PM +0000, Michael Kelley (LINUX) wrote:
> Boris -- you were going to pick up this patch separately
> though urgent.  Can you go ahead and do that?

Did you not get the tip-bot notification?

https://lore.kernel.org/r/166911713030.4906.16935727667401525991.tip-bot2@tip-bot2

you're on Cc there too.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
  2022-11-28 15:45     ` Borislav Petkov
@ 2022-11-28 16:04       ` Michael Kelley (LINUX)
  0 siblings, 0 replies; 5+ messages in thread
From: Michael Kelley (LINUX) @ 2022-11-28 16:04 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: Wei Liu, hpa, KY Srinivasan, Haiyang Zhang, Dexuan Cui, luto,
	peterz, davem, edumazet, kuba, pabeni, lpieralisi, robh, kw,
	bhelgaas, arnd, hch, m.szyprowski, robin.murphy, thomas.lendacky,
	brijesh.singh, tglx, mingo, dave.hansen, Tianyu Lan,
	kirill.shutemov, sathyanarayanan.kuppuswamy, ak, isaku.yamahata,
	Williams, Dan J, jane.chu, seanjc, tony.luck, x86, linux-kernel,
	linux-hyperv, netdev, linux-pci, linux-arch, iommu

From: Borislav Petkov <bp@alien8.de> Sent: Monday, November 28, 2022 7:46 AM
> 
> On Mon, Nov 28, 2022 at 02:43:28PM +0000, Michael Kelley (LINUX) wrote:
> > Boris -- you were going to pick up this patch separately
> > though urgent.  Can you go ahead and do that?
> 
> Did you not get the tip-bot notification?
> 
> https://lore.kernel.org/all/166911713030.4906.16935727667401525991.tip-bot2@tip-bot2/
> 
> you're on Cc there too.
> 

Argh.  My mistake.  Thanks.

Michael



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-11-28 16:04 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-22 17:40 [PATCH v4 1/1] x86/ioremap: Fix page aligned size calculation in __ioremap_caller() Michael Kelley
2022-11-25 15:19 ` Wei Liu
2022-11-28 14:43   ` Michael Kelley (LINUX)
2022-11-28 15:45     ` Borislav Petkov
2022-11-28 16:04       ` Michael Kelley (LINUX)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).