Переполнение стека на QEMU с ядром с поддержкой MTE не вызывает ошибки
Я тестирую переполнение стека с помощью linux 5.10 и qemu 5.2.93. Он также не может обнаружить переполнение стека. Вот мой примерный пример
#include <stdio.h>
int main(int argc, char** argv)
{
volatile char pad[10];
char s[10];
for(int i=0; i<atoi(argv[1]); i++)
{
s[i] = i;
}
return 0;
}
Скомпилировал с помощью clang-13
clang -target aarch64-linux -march=armv8+memtag -fuse-ld=lld stack.c -o stack -fsanitize=memtag -static
Я запускаю qemu с простой файловой системой
qemu-system-aarch64 -machine virt,mte=on -cpu max -kernel ./linux/arch/arm64/boot/Image -nographic -append "console=ttyAMA0" -m 1024 -initrd ./filesystem.cpio.gz -net nic -monitor /dev/null
а также
./stack 17
Ничего не случилось.
Или кто-нибудь может сказать мне, как запустить это на мониторе fvp. Я также использую ядро с поддержкой MTE, fvp версии 11.8.37. И я включаю fvp mte с помощью
-C cluster0.memory_tagging_support_level=2
. После всего этого ничего не произошло с вышеуказанной программой переполнения стека.