首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >托管启用了MTE的内核的QEMU不会引发故障

托管启用了MTE的内核的QEMU不会引发故障
EN

Stack Overflow用户
提问于 2021-04-13 16:29:34
回答 1查看 158关注 0票数 1

我正在尝试在QEMU环境(运行支持MTE的内核)上编译和测试ARMv8.5MTE扩展。

我尝试在托管启用了MTE的内核的QEMU上引发一个错误。我运行了一个简单的C代码,它应该会因为MTE而引发错误,但它运行得很好(附加了日志和信息)。我使用相关的clang MTE相关标志在x86机器上将代码交叉编译为arm64。

5.4.0-1040-gcp #43-Ubuntu SMP Fri Mar 19 17:49:48 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux上编译

使用CONFIG_ARM64_MTE=yLinux lab 5.11.13 #1 SMP PREEMPT Sun Apr 11 11:30:52 UTC 2021 aarch64 GNU/Linux上运行可执行文件

代码:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
 
int main()
{
        printf("Hi %ld\n", (long)getpid());
        int *array = (int*) malloc (sizeof(int) * 1);
        array[32] = 1;
        printf("here is the value: %d", array[32]);
        return 0;
}

clang-11标志:

代码语言:javascript
复制
clang-11 -target aarch64-linux-gnu -march=armv8+memtag -fsanitize=memtag main.c -static

QEMU版本:

代码语言:javascript
复制
lab@qemu-mte:~$ qemu-system-aarch64 --version
QEMU emulator version 5.2.92

QEMU标志:

代码语言:javascript
复制
sudo /opt/qemu/build/qemu-system-aarch64 -machine virt,mte=on -cpu max  -kernel Image -hda stretch.img -m 2G -display none -serial stdio -append "root=/dev/vda"

可执行的strace输出:

代码语言:javascript
复制
root@lab:/# strace ./test
execve("./test", ["./test"], [/* 11 vars */]) = 0
brk(NULL)                               = 0x3ada7000
brk(0x3ada7f80)                         = 0x3ada7f80
uname({sysname="Linux", nodename="lab", ...}) = 0
readlinkat(AT_FDCWD, "/proc/self/exe", "/test", 4096) = 5
brk(0x3adc8f80)                         = 0x3adc8f80
brk(0x3adc9000)                         = 0x3adc9000
mprotect(0x489000, 4096, PROT_READ)     = 0
getpid()                                = 235
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(204, 64), ...}) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "Hi 235\n", 7Hi 235
)                 = 7
write(1, "here is the value: 1", 20here is the value: 1)    = 20
exit_group(0)                           = ?
+++ exited with 0 +++

我是不是遗漏了什么?如果需要更多的信息,请告诉我。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-04-13 18:07:18

该strace日志中的任何内容似乎都没有为该进程启用MTE,这似乎很可疑。尝试构建并运行the kernel documentation中给出的用于MTE的示例MTE程序。完全“手动”执行MTE,也就是说,不需要编译器的帮助。如果它可以工作,那么您可以开始查看问题的另一面;如果它不能工作,那么您需要检查QEMU和内核。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67071289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档