diff mbox

[edk2] MdePkg/BaseLib AARCH64: terminate stack frame list on stack switch

Message ID 1473405686-5465-1-git-send-email-ard.biesheuvel@linaro.org
State Accepted
Commit 35071e15748fa54809e485935b631dbe58c1f078
Headers show

Commit Message

Ard Biesheuvel Sept. 9, 2016, 7:21 a.m. UTC
When switching to the DXE phase stack, set the frame pointer to zero so
that code walking the stack frame will not try to access stack frames\
belonging to the old stack.

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

---
 MdePkg/Library/BaseLib/AArch64/SwitchStack.S | 1 +
 1 file changed, 1 insertion(+)

-- 
2.7.4

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

Comments

Leif Lindholm Sept. 9, 2016, 11:18 a.m. UTC | #1
On Fri, Sep 09, 2016 at 08:21:26AM +0100, Ard Biesheuvel wrote:
> When switching to the DXE phase stack, set the frame pointer to zero so

> that code walking the stack frame will not try to access stack frames\


Trailing '\'.

> belonging to the old stack.


Do you mean that code will check for zero and stop processing, or that
it will be accessing rubbish instead of parsing a valid-looking frame?

Either is an improvement, but if it is the latter I would prefer it
more explicitly stated.

You can fix up on commit:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>


> Contributed-under: TianoCore Contribution Agreement 1.0

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

> ---

>  MdePkg/Library/BaseLib/AArch64/SwitchStack.S | 1 +

>  1 file changed, 1 insertion(+)

> 

> diff --git a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

> index 2bce9c998f4f..c3ac8d7e4dfe 100644

> --- a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

> +++ b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

> @@ -40,6 +40,7 @@ InternalSwitchStackAsm (

>    );

>  **/

>  ASM_PFX(InternalSwitchStackAsm):

> +    mov   x29, #0

>      mov   x30, x0

>      mov   sp, x3

>      mov   x0, x1

> -- 

> 2.7.4

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Sept. 9, 2016, 12:03 p.m. UTC | #2
On 9 September 2016 at 12:18, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Fri, Sep 09, 2016 at 08:21:26AM +0100, Ard Biesheuvel wrote:

>> When switching to the DXE phase stack, set the frame pointer to zero so

>> that code walking the stack frame will not try to access stack frames\

>

> Trailing '\'.

>

>> belonging to the old stack.

>

> Do you mean that code will check for zero and stop processing, or that

> it will be accessing rubbish instead of parsing a valid-looking frame?

>


I don't understand this question. If it is zero, it will stop
processing. If it is not zero, it will proceed, and potentially
traverse stack frames in memory that is now owned by someone else.

> Either is an improvement, but if it is the latter I would prefer it

> more explicitly stated.

>



> You can fix up on commit:

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

>

>> Contributed-under: TianoCore Contribution Agreement 1.0

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

>> ---

>>  MdePkg/Library/BaseLib/AArch64/SwitchStack.S | 1 +

>>  1 file changed, 1 insertion(+)

>>

>> diff --git a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

>> index 2bce9c998f4f..c3ac8d7e4dfe 100644

>> --- a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

>> +++ b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S

>> @@ -40,6 +40,7 @@ InternalSwitchStackAsm (

>>    );

>>  **/

>>  ASM_PFX(InternalSwitchStackAsm):

>> +    mov   x29, #0

>>      mov   x30, x0

>>      mov   sp, x3

>>      mov   x0, x1

>> --

>> 2.7.4

>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm Sept. 9, 2016, 12:10 p.m. UTC | #3
On Fri, Sep 09, 2016 at 01:03:59PM +0100, Ard Biesheuvel wrote:
> On 9 September 2016 at 12:18, Leif Lindholm <leif.lindholm@linaro.org> wrote:

> > On Fri, Sep 09, 2016 at 08:21:26AM +0100, Ard Biesheuvel wrote:

> >> When switching to the DXE phase stack, set the frame pointer to zero so

> >> that code walking the stack frame will not try to access stack frames\

> >

> > Trailing '\'.

> >

> >> belonging to the old stack.

> >

> > Do you mean that code will check for zero and stop processing, or that

> > it will be accessing rubbish instead of parsing a valid-looking frame?

> 

> I don't understand this question. If it is zero, it will stop

> processing. If it is not zero, it will proceed, and potentially

> traverse stack frames in memory that is now owned by someone else.


Which was exactly what I was asking :)
So no need to change (but drop the '\').

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

Patch

diff --git a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S
index 2bce9c998f4f..c3ac8d7e4dfe 100644
--- a/MdePkg/Library/BaseLib/AArch64/SwitchStack.S
+++ b/MdePkg/Library/BaseLib/AArch64/SwitchStack.S
@@ -40,6 +40,7 @@  InternalSwitchStackAsm (
   );
 **/
 ASM_PFX(InternalSwitchStackAsm):
+    mov   x29, #0
     mov   x30, x0
     mov   sp, x3
     mov   x0, x1