在Linux v5.10中,在处理
SVE
函数中的do_sve_acc()
访问异常时,为什么要将线程的SVE状态归零?
我认为在恢复SVE状态之前不应该将SVE状态归零。我说得对吗?
https://elixir.bootlin.com/linux/v5.10.205/source/arch/arm64/kernel/fpsimd.c#L513
评论说:
用户任务尝试执行 SVE 指令会导致调用
,它会进行一些准备工作,然后设置 TIF_SVE。do_sve_acc()
因此,在此之前,SVE regs 可能有来自另一个进程的过时垃圾,并且 我们需要防止数据泄漏。 同样的原因,来自 mmap(MAP_ANONYMOUS)
的新页面被归零。其他评论如
https://elixir.bootlin.com/linux/v5.10.205/source/arch/arm64/kernel/fpsimd.c#L501也有类似的内容。这看起来像是 SVE 状态的惰性初始化,假设大多数进程根本不会使用 SVE。因此,不要总是在 execve 上为其分配和清零空间,而是在任务中首次使用时执行此操作,这会触发此陷阱。