在Linux内核中,为什么在处理SVE异常陷阱时将task->thread.sve_state清零?

问题描述 投票:0回答:1

在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

linux-kernel simd arm64 cpu-registers sve
1个回答
0
投票

评论说:

用户任务尝试执行 SVE 指令会导致调用

do_sve_acc()
,它会进行一些准备工作,然后设置 TIF_SVE。

因此,在此之前,SVE regs 可能有来自另一个进程的过时垃圾,并且 我们需要防止数据泄漏。 同样的原因,来自 mmap(MAP_ANONYMOUS)

 的新页面被归零。

其他评论如

https://elixir.bootlin.com/linux/v5.10.205/source/arch/arm64/kernel/fpsimd.c#L501也有类似的内容。这看起来像是 SVE 状态的惰性初始化,假设大多数进程根本不会使用 SVE。因此,不要总是在 execve 上为其分配和清零空间,而是在任务中首次使用时执行此操作,这会触发此陷阱。

© www.soinside.com 2019 - 2024. All rights reserved.