首页 > 解决方案 > 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。毕竟,上面的堆栈溢出程序也没有发生任何事情。

标签: linuxsecurityqemufvp

解决方案


推荐阅读