Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs/zh_CN: Add dev-tools/ubsan Chinese translation

Translate dev-tools/ubsan.rst into Chinese, add it into
zh_CN/dev-tools/index.rst.

Signed-off-by: Dongliang Mu <dzm91@hust.edu.cn>
Reviewed-by: Yanteng Si <siyanteng@loongson.cn>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Link: https://lore.kernel.org/r/20240302140058.1527765-1-dzm91@hust.edu.cn

authored by

Dongliang Mu and committed by
Jonathan Corbet
9e192b39 3dfa8cd9

+92 -1
+1 -1
Documentation/translations/zh_CN/dev-tools/index.rst
··· 22 22 sparse 23 23 gcov 24 24 kasan 25 + ubsan 25 26 gdb-kernel-debugging 26 27 27 28 Todolist: 28 29 29 30 - coccinelle 30 31 - kcov 31 - - ubsan 32 32 - kmemleak 33 33 - kcsan 34 34 - kfence
+91
Documentation/translations/zh_CN/dev-tools/ubsan.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + .. include:: ../disclaimer-zh_CN.rst 4 + 5 + :Original: Documentation/dev-tools/ubsan.rst 6 + :Translator: Dongliang Mu <dzm91@hust.edu.cn> 7 + 8 + 未定义行为消毒剂 - UBSAN 9 + ==================================== 10 + 11 + UBSAN是一种动态未定义行为检查工具。 12 + 13 + UBSAN使用编译时插桩捕捉未定义行为。编译器在可能导致未定义行为的操作前插入特定 14 + 检测代码。如果检查失败,即检测到未定义行为,__ubsan_handle_* 函数将被调用打印 15 + 错误信息。 16 + 17 + GCC自4.9.x [1_] (详见 ``-fsanitize=undefined`` 选项及其子选项)版本后引入这 18 + 一特性。GCC 5.x 版本实现了更多检查器 [2_]。 19 + 20 + 报告样例 21 + -------------- 22 + 23 + :: 24 + 25 + ================================================================================ 26 + UBSAN: Undefined behaviour in ../include/linux/bitops.h:110:33 27 + shift exponent 32 is to large for 32-bit type 'unsigned int' 28 + CPU: 0 PID: 0 Comm: swapper Not tainted 4.4.0-rc1+ #26 29 + 0000000000000000 ffffffff82403cc8 ffffffff815e6cd6 0000000000000001 30 + ffffffff82403cf8 ffffffff82403ce0 ffffffff8163a5ed 0000000000000020 31 + ffffffff82403d78 ffffffff8163ac2b ffffffff815f0001 0000000000000002 32 + Call Trace: 33 + [<ffffffff815e6cd6>] dump_stack+0x45/0x5f 34 + [<ffffffff8163a5ed>] ubsan_epilogue+0xd/0x40 35 + [<ffffffff8163ac2b>] __ubsan_handle_shift_out_of_bounds+0xeb/0x130 36 + [<ffffffff815f0001>] ? radix_tree_gang_lookup_slot+0x51/0x150 37 + [<ffffffff8173c586>] _mix_pool_bytes+0x1e6/0x480 38 + [<ffffffff83105653>] ? dmi_walk_early+0x48/0x5c 39 + [<ffffffff8173c881>] add_device_randomness+0x61/0x130 40 + [<ffffffff83105b35>] ? dmi_save_one_device+0xaa/0xaa 41 + [<ffffffff83105653>] dmi_walk_early+0x48/0x5c 42 + [<ffffffff831066ae>] dmi_scan_machine+0x278/0x4b4 43 + [<ffffffff8111d58a>] ? vprintk_default+0x1a/0x20 44 + [<ffffffff830ad120>] ? early_idt_handler_array+0x120/0x120 45 + [<ffffffff830b2240>] setup_arch+0x405/0xc2c 46 + [<ffffffff830ad120>] ? early_idt_handler_array+0x120/0x120 47 + [<ffffffff830ae053>] start_kernel+0x83/0x49a 48 + [<ffffffff830ad120>] ? early_idt_handler_array+0x120/0x120 49 + [<ffffffff830ad386>] x86_64_start_reservations+0x2a/0x2c 50 + [<ffffffff830ad4f3>] x86_64_start_kernel+0x16b/0x17a 51 + ================================================================================ 52 + 53 + 用法 54 + ----- 55 + 56 + 使用如下内核配置启用UBSAN:: 57 + 58 + CONFIG_UBSAN=y 59 + 60 + 使用如下内核配置检查整个内核:: 61 + 62 + CONFIG_UBSAN_SANITIZE_ALL=y 63 + 64 + 为了在特定文件或目录启动代码插桩,需要在相应的内核Makefile中添加一行类似内容: 65 + 66 + - 单文件(如main.o):: 67 + 68 + UBSAN_SANITIZE_main.o := y 69 + 70 + - 一个目录中的所有文件:: 71 + 72 + UBSAN_SANITIZE := y 73 + 74 + 即使设置了``CONFIG_UBSAN_SANITIZE_ALL=y``,为了避免文件被插桩,可使用:: 75 + 76 + UBSAN_SANITIZE_main.o := n 77 + 78 + 与:: 79 + 80 + UBSAN_SANITIZE := n 81 + 82 + 未对齐的内存访问检测可通过开启独立选项 - CONFIG_UBSAN_ALIGNMENT 检测。 83 + 该选项在支持未对齐访问的架构上(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y) 84 + 默认为关闭。该选项仍可通过内核配置启用,但它将产生大量的UBSAN报告。 85 + 86 + 参考文献 87 + ---------- 88 + 89 + .. _1: https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Debugging-Options.html 90 + .. _2: https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html 91 + .. _3: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html