linux-loongson/Documentation/translations/zh_CN/mm/page_table_check.rst
Dongliang Mu 9d197b627e docs/zh_CN: update the translation of mm/page_table_check.rst
Update to commit 8430557fc5 ("mm/page_table_check: support
userfault wr-protect entries")

scripts/checktransupdate.py reports:

Documentation/translations/zh_CN/mm/page_table_check.rst
commit 8430557fc5 ("mm/page_table_check: support userfault wr-protect
entries")
commit 81a31a860b ("mm: page_table_check: Make it dependent on
EXCLUSIVE_SYSTEM_RAM")
commit ee86588960 ("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>
2024-10-24 14:54:45 -06:00

70 lines
3.0 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. 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_RAMI/O 页面可能仍然被允许通过 /dev/mem 映射。然而,这些页面始终
被视为命名页面,所以它们不会破坏页表检查中使用的逻辑。