diff mbox series

[edk2] ArmPkg/ArmMmuLib ARM: disregard high memory when setting permissions

Message ID 20190107065649.2003-1-ard.biesheuvel@linaro.org
State Accepted
Commit d08575759e5a853e157e6e418e9fea5d5864f725
Headers show
Series [edk2] ArmPkg/ArmMmuLib ARM: disregard high memory when setting permissions | expand

Commit Message

Ard Biesheuvel Jan. 7, 2019, 6:56 a.m. UTC
Ignore calls to ArmSetMemoryAttributes () when the region described
is outside of the 32-bit addressable range. This memory is not
mapped in the first place, and the current code does not deal with
the high bits correctly, resulting in hangs.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.20.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Leif Lindholm Jan. 14, 2019, 11:43 a.m. UTC | #1
On Mon, Jan 07, 2019 at 07:56:49AM +0100, Ard Biesheuvel wrote:
> Ignore calls to ArmSetMemoryAttributes () when the region described

> is outside of the 32-bit addressable range. This memory is not

> mapped in the first place, and the current code does not deal with

> the high bits correctly, resulting in hangs.

> 

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>


Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>


> ---

>  ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> index 3b3b20aa9b78..bffab83d4fd0 100644

> --- a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> +++ b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> @@ -744,6 +744,10 @@ ArmSetMemoryAttributes (

>    UINT64        ChunkLength;

>    BOOLEAN       FlushTlbs;

>  

> +  if (BaseAddress > (UINT64)MAX_ADDRESS - Length + 1) {

> +    return EFI_UNSUPPORTED;

> +  }

> +

>    if (Length == 0) {

>      return EFI_SUCCESS;

>    }

> -- 

> 2.20.1

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Jan. 14, 2019, 6:46 p.m. UTC | #2
On Mon, 14 Jan 2019 at 12:43, Leif Lindholm <leif.lindholm@linaro.org> wrote:
>

> On Mon, Jan 07, 2019 at 07:56:49AM +0100, Ard Biesheuvel wrote:

> > Ignore calls to ArmSetMemoryAttributes () when the region described

> > is outside of the 32-bit addressable range. This memory is not

> > mapped in the first place, and the current code does not deal with

> > the high bits correctly, resulting in hangs.

> >

> > Contributed-under: TianoCore Contribution Agreement 1.1

> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>

> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

>


Thanks

Pushed as e695e44545b4..d08575759e5a

> > ---

> >  ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c | 4 ++++

> >  1 file changed, 4 insertions(+)

> >

> > diff --git a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> > index 3b3b20aa9b78..bffab83d4fd0 100644

> > --- a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> > +++ b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c

> > @@ -744,6 +744,10 @@ ArmSetMemoryAttributes (

> >    UINT64        ChunkLength;

> >    BOOLEAN       FlushTlbs;

> >

> > +  if (BaseAddress > (UINT64)MAX_ADDRESS - Length + 1) {

> > +    return EFI_UNSUPPORTED;

> > +  }

> > +

> >    if (Length == 0) {

> >      return EFI_SUCCESS;

> >    }

> > --

> > 2.20.1

> >

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox series

Patch

diff --git a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
index 3b3b20aa9b78..bffab83d4fd0 100644
--- a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
+++ b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
@@ -744,6 +744,10 @@  ArmSetMemoryAttributes (
   UINT64        ChunkLength;
   BOOLEAN       FlushTlbs;
 
+  if (BaseAddress > (UINT64)MAX_ADDRESS - Length + 1) {
+    return EFI_UNSUPPORTED;
+  }
+
   if (Length == 0) {
     return EFI_SUCCESS;
   }