diff options
author | Andrew Turner <andrew@FreeBSD.org> | 2018-08-27 11:14:49 +0000 |
---|---|---|
committer | Andrew Turner <andrew@FreeBSD.org> | 2018-08-27 11:14:49 +0000 |
commit | 78da60464191371524fd3d85da0a9efe63369497 (patch) | |
tree | 092d295c18b5d98a95294d4103909062803b580b /stand/efi/loader/arch/arm64 | |
parent | 9ea0458663f0e58baf933e9919eed9a2de571828 (diff) | |
download | src-78da60464191371524fd3d85da0a9efe63369497.tar.gz src-78da60464191371524fd3d85da0a9efe63369497.zip |
Ensure we have a large enough stack for the lua loader
Lua has a few places where it allocates a large buffer on the stack. This
is normally fine, except there are a few places where there can be multiple
frames with this buffer. This can cause a stack overflow on some arm64 SoCs.
Fix this by allocating our own stack in loader.efi large enough for these
objects. The required size has been found by tracing how the stack pointer
changes in a virtual machine and found to be no larger than 50kB. A
larger stack is allocated to reduce the likelihood of overflow from future
changes.
Reviewed by: kevans
Approved by: re (kib)
Differential Revision: https://reviews.freebsd.org/D16886
Notes
Notes:
svn path=/head/; revision=338337
Diffstat (limited to 'stand/efi/loader/arch/arm64')
-rw-r--r-- | stand/efi/loader/arch/arm64/start.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/stand/efi/loader/arch/arm64/start.S b/stand/efi/loader/arch/arm64/start.S index b58c2c50be9f..bddc2d088a64 100644 --- a/stand/efi/loader/arch/arm64/start.S +++ b/stand/efi/loader/arch/arm64/start.S @@ -160,6 +160,23 @@ _start: ldp x0, x1, [sp], #16 +#ifndef EFI_BOOT1 + /* + * Load the stack to use. The default stack may be too small for + * the lua loader. + */ + adr x2, initstack_end + mov sp, x2 +#endif + bl efi_main 1: b 1b + +#ifndef EFI_BOOT1 +.bss + .align 4 +initstack: + .space (64 * 1024) +initstack_end: +#endif |