mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-31 22:23:05 +00:00

Update to commit8430557fc5
("mm/page_table_check: support userfault wr-protect entries") scripts/checktransupdate.py reports: Documentation/translations/zh_CN/mm/page_table_check.rst commit8430557fc5
("mm/page_table_check: support userfault wr-protect entries") commit81a31a860b
("mm: page_table_check: Make it dependent on EXCLUSIVE_SYSTEM_RAM") commitee86588960
("docs/mm: remove useless markup") 3 commits needs resolving in total Signed-off-by: Dongliang Mu <dzm91@hust.edu.cn> Reviewed-by: Alex Shi <alexs@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <68b62a5713d5a465f09226c1a607dee7ec76a6aa.1729327831.git.dzm91@hust.edu.cn>
70 lines
3.0 KiB
ReStructuredText
70 lines
3.0 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
||
|
||
:Original: Documentation/mm/page_table_check.rst
|
||
|
||
:翻译:
|
||
|
||
司延腾 Yanteng Si <siyanteng@loongson.cn>
|
||
|
||
:校译:
|
||
|
||
|
||
========
|
||
页表检查
|
||
========
|
||
|
||
概述
|
||
====
|
||
|
||
页表检查允许通过确保防止某些类型的内存损坏来强化内核。
|
||
|
||
当新的页面可以从用户空间访问时,页表检查通过将它们的页表项(PTEs PMD等)添加到页表中来执行额外
|
||
的验证。
|
||
|
||
在检测到损坏的情况下,内核会被崩溃。页表检查有一个小的性能和内存开销。因此,它在默认情况下是禁用
|
||
的,但是在额外的加固超过性能成本的系统上,可以选择启用。另外,由于页表检查是同步的,它可以帮助调
|
||
试双映射内存损坏问题,在错误的映射发生时崩溃内核,而不是在内存损坏错误发生后内核崩溃。
|
||
|
||
双重映射检测逻辑
|
||
================
|
||
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
| Current Mapping | New mapping | Permissions | Rule |
|
||
+===================+===================+===================+==================+
|
||
| Anonymous | Anonymous | Read | Allow |
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
| Anonymous | Anonymous | Read / Write | Prohibit |
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
| Anonymous | Named | Any | Prohibit |
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
| Named | Anonymous | Any | Prohibit |
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
| Named | Named | Any | Allow |
|
||
+-------------------+-------------------+-------------------+------------------+
|
||
|
||
启用页表检查
|
||
============
|
||
|
||
用以下方法构建内核:
|
||
|
||
- PAGE_TABLE_CHECK=y
|
||
注意,它只能在ARCH_SUPPORTS_PAGE_TABLE_CHECK可用的平台上启用。
|
||
|
||
- 使用 "page_table_check=on" 内核参数启动。
|
||
|
||
可以选择用PAGE_TABLE_CHECK_ENFORCED来构建内核,以便在没有额外的内核参数的情况下获得页表
|
||
支持。
|
||
|
||
实现注意事项
|
||
============
|
||
|
||
我们特意决定不使用 VMA 信息,以避免依赖于 MM 状态(除了有限的 “struct page” 信息)。页表检查
|
||
独立于 Linux-MM 状态机,它验证用户可访问的页面不会被错误地共享。
|
||
|
||
PAGE_TABLE_CHECK 依赖于 EXCLUSIVE_SYSTEM_RAM。原因在于,若没有 EXCLUSIVE_SYSTEM_RAM,
|
||
用户被允许通过 /dev/mem 将任意物理内存区域映射到用户空间。同时,页面可能在映射到用户空间期间
|
||
改变自己的属性(例如,从匿名页面变为命名页面),导致页表检查检测到“损坏”。
|
||
|
||
即使有 EXCLUSIVE_SYSTEM_RAM,I/O 页面可能仍然被允许通过 /dev/mem 映射。然而,这些页面始终
|
||
被视为命名页面,所以它们不会破坏页表检查中使用的逻辑。
|