[arch][arm64] Support user shadow call stack

Make the platform register (x18) point to the shadow call stack when
entering user space via the arch_enter_uspace function.

The DEFAULT_SHADOW_STACK_SIZE is PAGE_SIZE unless its size
is specified via the CUSTOM_DEFAULT_SHADOW_STACK_SIZE flag.
This mirrors the flags controlling the regular stack size.

Shadow call stack can be toggled via the USER_SCS_ENABLED flag. If
shadow call stack is disabled or unsupported, the stack protector
is enabled as a fallback mitigation.

Test: build.py qemu-generic-arm64-test-debug
Bug: 79994372
Change-Id: Idb345cd0eba3434cd9e9bf170de4be1297fa160c
9 files changed
tree: e1819a35af5e49101df356cc675b498dbaf33204
  1. app/
  2. arch/
  3. dev/
  4. external/
  5. hosttests/
  6. include/
  7. kernel/
  8. lib/
  9. make/
  10. platform/
  11. target/
  12. tools/
  13. top/
  14. .clang-format
  15. .gitignore
  16. build-config-kerneltests
  17. engine.mk
  18. kerneltests-inc.mk
  19. LICENSE
  20. lk_inc.mk.example
  21. makefile
  22. README.md
README.md

LK

The LK embedded kernel. An SMP-aware kernel designed for small systems.

See https://github.com/littlekernel/lk for the latest version.

See https://github.com/littlekernel/lk/wiki for documentation.

Builds

Build Status

To build and test for ARM on linux

  1. install or build qemu. v2.4 and above is recommended.
  2. install gcc for embedded arm (see note 1)
  3. run scripts/do-qemuarm (from the lk directory)
  4. you should see ‘welcome to lk/MP’

This will get you a interactive prompt into LK which is running in qemu arm machine ‘virt’ emulation. type ‘help’ for commands.

note 1: for ubuntu: sudo apt-get install gcc-arm-none-eabi or fetch a prebuilt toolchain from http://newos.org/toolchains/arm-eabi-5.3.0-Linux-x86_64.tar.xz