From 749bb4a796c9ec3c290280b8ed42b020e6f39255 Mon Sep 17 00:00:00 2001 From: gatieme Date: Sun, 11 Apr 2021 20:51:54 +0800 Subject: [PATCH] =?UTF-8?q?kptr=5Frestrict=20=E5=90=91=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E5=86=85=E6=A0=B8=E4=B8=AD=E7=9A=84=E6=8C=87?= =?UTF-8?q?=E9=92=88(/proc/kallsyms-modules=E6=98=BE=E7=A4=BAvalue?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E4=B8=BA0)--http://blog.csdn.net/gatieme/art?= =?UTF-8?q?icle/details/78311841?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filesystem/procfs/kptr_restrict/README.md | 268 ++++++- .../kptr_restrict/kptr_restrict_3_test.png | Bin 0 -> 23514 bytes .../kptr_restrict_for_4.13.excalidraw | 407 ++++++++++ .../kptr_restrict/kptr_restrict_for_4.13.png | Bin 0 -> 28851 bytes .../kptr_restrict_for_5.1.excalidraw | 717 ++++++++++++++++++ .../kptr_restrict/kptr_restrict_for_5.1.png | Bin 0 -> 49043 bytes 6 files changed, 1383 insertions(+), 9 deletions(-) create mode 100644 study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_3_test.png create mode 100644 study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_4.13.excalidraw create mode 100644 study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_4.13.png create mode 100644 study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.excalidraw create mode 100644 study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.png diff --git a/study/debug/filesystem/procfs/kptr_restrict/README.md b/study/debug/filesystem/procfs/kptr_restrict/README.md index f2c9e59..4f642d5 100644 --- a/study/debug/filesystem/procfs/kptr_restrict/README.md +++ b/study/debug/filesystem/procfs/kptr_restrict/README.md @@ -90,26 +90,40 @@ When kptr_restrict is set to (2), kernel pointers printed using >注意 `kptr_restrict` 对内核中很多地址和符号表的信息导出都有影响, 比如 `/proc/modules` 等. -#3 kptr_restrict的设计 +# 3 kptr_restrict的设计 ------- | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| -| 2020/09/17 | Dan Rosenberg | [kptr_restrict for hiding kernel pointers from unprivileged users](https://lore.kernel.org/patchwork/cover/229987) | 引入 kptr_restrict 限制都内核指针的读取 | v7 ☑ 2.6.38-rc1| [v7 PatchWork](https://lore.kernel.org/patchwork/cover/228326)
*-*-*-*-*-*-*-*
[v7 PatchWork](https://lore.kernel.org/patchwork/cover/229987)
*-*-*-*-*-*-*-*
[commit 455cd5ab305c](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=455cd5ab305c90ffc422dd2e0fb634730942b257) | +| 2010/12/23 | Dan Rosenberg | [kptr_restrict for hiding kernel pointers from unprivileged users](https://lore.kernel.org/patchwork/cover/229987) | 引入 kptr_restrict 限制都内核指针的读取 | v7 ☑ 2.6.38-rc1| [v7 PatchWork](https://lore.kernel.org/patchwork/cover/228326)
*-*-*-*-*-*-*-*
[v7 PatchWork](https://lore.kernel.org/patchwork/cover/229987)
*-*-*-*-*-*-*-*
[commit 455cd5ab305c](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=455cd5ab305c90ffc422dd2e0fb634730942b257) | | 2017/11/19 | Tobin C. Harding | [hash addresses printed with %p](https://lore.kernel.org/patchwork/cover/856356) | 内核中 %p 打印的地址会暴露内核态地址信息, 是极其不安全的, 因此限制 %p 的打印信息, 它将打印一个散列值, 并不是实际的地址. 如果想要打印实际地址, 需要显式指定 %px. | v11 ☑ 4.15-rc2 | [PatchWork](https://lore.kernel.org/patchwork/cover/856356)
*-*-*-*-*-*-*-*
[关键 commit 57e734423add](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=57e734423adda83f3b05505875343284efe3b39c) | -| 2019/04/17 | Petr Mladek | [vsprintf: Prevent silent crashes and consolidate error handling](https://lore.kernel.org/patchwork/cover/1063193) | 此处填写补丁描述 | v7 ☑ 5.2-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1063193)
*-*-*-*-*-*-*-*
[commit 6eea242f9bcd](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6eea242f9bcdf828bb56334d8ee5c7cb466e4bcd) | +| 2017/11/29 | Linus Torvalds | vsprintf: don't use 'restricted_pointer()' when not restricting | 如果发现 kptr_restrict 为 0, 则直接跳过 restricted_pointer() 流程. 这个补丁将影响 kptr_restrict 为 0 时, %pK 等同于 %p 输出散列地址. | v1 4.15-rc2 | [commit ef0010a30935 ("vsprintf: don't use 'restricted_pointer()' when not restricting")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ef0010a30935de4e0211cbc7bdffc30446cdee9b) | +| 2018/02/16 | Andy Shevchenko | [lib/vsprintf: Deduplicate pointer_string()](https://lore.kernel.org/patchwork/patch/888079) | 简单的重构, 删除了一些重复的判断, 逻辑没有任何修正 | [PatchWork](https://lore.kernel.org/patchwork/cover/888079)
*-*-*-*-*-*-*-*
[关键 commit 496a9a5f3806](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=496a9a5f3806d58b14ae06b390d5b1ffa26e9f9a) | +| 2019/04/17 | Petr Mladek | [hvsprintf: Prevent silent crashes and consolidate error handling](https://lore.kernel.org/patchwork/cover/1063203) | 修复上面补丁引入的一个小问题, 限制 restricted_pointer 中 kptr_restrict 为 0 时, 输出散列地址. | v7 ☑ 5.2-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1063193)
*-*-*-*-*-*-*-*
[关键 commit 1ac2f9789c4b](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1ac2f9789c4b76ad749870c25ffae0cbcd1f510f) | +| 2020/02/19 | Ilya Dryomov | [vsprintf: don't obfuscate NULL and error pointers](https://lore.kernel.org/patchwork/patch/1196790) | 同样的, 之前 NULL 指针和错误指针的输出也很混乱, 进行了归一化. | v2 ☑ 5.7-rc7 | [PatchWork](https://lore.kernel.org/patchwork/cover/1196790)
*-*-*-*-*-*-*-*
[关键 commit 7bd57fbc4a4d](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7bd57fbc4a4ddedc664cad0bbced1b469e24e921) | -## 3.1 v4.14 之前设计 +## 3.1 v4.14 之前的设计 ------- -在 4.x 的内核中 `kptr_restrict` 在内核 [`commit 455cd5ab305c ("kptr_restrict for hiding kernel pointers from unprivileged users")`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=455cd5ab305c90ffc422dd2e0fb634730942b257), 具体实现源码位于 [`lib/vsprintf.c, line 1708`](http://elixir.free-electrons.com/linux/v4.13.9/source/lib/vsprintf.c#L1708) +在 linux 2.6.38 中 [`commit 455cd5ab305c ("kptr_restrict for hiding kernel pointers from unprivileged users")`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=455cd5ab305c90ffc422dd2e0fb634730942b257) 引入了 `kptr_restrict` 用来限制用户态读取内核指针的显示. + +![v4.14 之前设计](./kptr_restrict_for_4.13.png) + +具体处理 kptr_restrict 实现在 pointer 函数中, 该函数用于处理指针格式的 fmt 输出, 源码位于 [`lib/vsprintf.c, v4.13.9, line 1794`](http://elixir.free-electrons.com/linux/v4.13.9/source/lib/vsprintf.c#L1794), 自 2.6.x 到 4.14 之前的版本这段流程没有太大的改动. + ```cpp -// https://elixir.bootlin.com/linux/v4.13.9/source/lib/vsprintf.c#L1708 +// https://elixir.bootlin.com/linux/v4.13.9/source/lib/vsprintf.c#L1794 +static noinline_for_stack +char *pointer(const char *fmt, char *buf, char *end, void *ptr, + struct printf_spec spec) +{ + // ...... + case 'K': switch (kptr_restrict) { case 0: @@ -151,9 +165,29 @@ When kptr_restrict is set to (2), kernel pointers printed using break; } break; + // ...... +} ``` -## 3.2 v5.2 之前设计 +可见, kptr_restrict + +* 为 0 时, 未作任何处理, 直接输出, 这样对所有用户都没有限制. + +* 为 1 时, 中断上下文则不允许输出, 否则则校验了用户的权限. + +* 为 2 时, 将指针直接置 NULL, 这样所有用户都只能看到全 0. + +整体思路还是比较清晰的. 想要详细了解实现全貌的, 可以直接查阅该特性合入时的 patchwork 或者 commit. + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2010/12/23 | Dan Rosenberg | [kptr_restrict for hiding kernel pointers from unprivileged users](https://lore.kernel.org/patchwork/cover/229987) | 引入 kptr_restrict 限制都内核指针的读取 | v7 ☑ 2.6.38-rc1| [v7 PatchWork](https://lore.kernel.org/patchwork/cover/228326)
*-*-*-*-*-*-*-*
[v7 PatchWork](https://lore.kernel.org/patchwork/cover/229987)
*-*-*-*-*-*-*-*
[commit 455cd5ab305c](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=455cd5ab305c90ffc422dd2e0fb634730942b257) | + + +## 3.2 v4.15 开始的设计 +------- + +### 3.2.1 printk 地址散列化 ------- ```CPP @@ -161,9 +195,225 @@ When kptr_restrict is set to (2), kernel pointers printed using ``` -## 3.3 v5.2 之后设计 +在 linux 4.15 中 [commit 57e734423add ("vsprintf: refactor %pK code out of pointer()")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=57e734423adda83f3b05505875343284efe3b39c) 将 point 中对 `%pK`(kptr_restrict) 的处理都封装到了 restricted_pointer 函数中. 这个修改比较简单, 就不详细描述了. 想要详细了解的同学可以查看提交的 commit + +这次修改所属的 patchset 最主要是为了限制 %p 直接暴露内核的地址. 在早期内核中, 我们可以通过 System.map 或者 vmlinux 获取内核符号的地址信息, 内核中也较多的使用 %p 输出一些调试信息, 帮助用户显示一些符号的地址. 但是随着内核不断的演进, 开发者们发现, 随意暴露内核的地址是十分不安全的. + +内核实现了越老越多的安全特性, 比如[内核地址随机化](https://lore.kernel.org/patchwork/cover/639469)等等. 正常情况下, kernel image 会按照 vmlinux 链接脚本中的链接地址去映射虚拟地址, 如果开启kaslr, 则会重新再映射一次, 映射到 链接地址 + offset的新地址上去. 如果 offset 每次开机都由 bootloader 随机生成, 那么每次开机后, kernel image最后映射的虚拟地址都不一样, 这就是内核地址随机化. + +通过反汇编 vmlinux 以及读取 System.map 得不到内核中函数或者汇编语句的真正地址, 因为攻击者并不知道 kaslr 的 offset. 但是 %p 暴露内核地址将打破了这个限定. 攻击者通过 %p 打印中获取到的地址和 vmlinux 中该符号的地址进行比较, 就可以直接获取到 offset 偏移, 进而整个地址随机化机制将形同虚设. + +最直接的办法就是将 %p 的打印全部处理掉. + +1. 没必要的从内核中删除掉 + +2. 有必要但是可以限制的限制下(比如替换成 %pK). + +3. 特殊流程下, 要绕过限制直接打印实际地址的, 不做修改(比如 crash 流程输出 PANIC 日志的时候, 有必要输出实际地址.). + +但是这些打印太多了, 改起来太麻烦了. 因此社区讨论后, 提出了一种新的方案. + +1. 限制 %p 的输出, 不再输出实际的地址, 而是输出一个散列化的地址. + +2. 想要在 crash 等流程输出实际地址时, 则使用 %px 输出内核符号的实际地址. + +这样不用繁多的删动 %p 打印, 只需要限制 %p 的输出即可. 对于那些有必要输出实际地址的流程, 将 %p 替换为 %px, 这种路径通常是极少的, 改动起来也很少. + +### 3.2.2 对 %pK 输出的影响 ------- +那么在 %p 的输出被散列的情况下, 对 %pK 输出的影响是什么呢? +首先我们看下实现 + +![kptr_restrict_for_5.1](./kptr_restrict_for_5.1.png) + +```cpp +// https://elixir.bootlin.com/linux/v5.1/source/lib/vsprintf.c#L1481 +static noinline_for_stack +char *restricted_pointer(char *buf, char *end, const void *ptr, + struct printf_spec spec) +{ + switch (kptr_restrict) { + case 0: + /* Always print %pK values */ + break; + case 1: { + const struct cred *cred; + + /* + * kptr_restrict==1 cannot be used in IRQ context + * because its test for CAP_SYSLOG would be meaningless. + */ + if (in_irq() || in_serving_softirq() || in_nmi()) { + if (spec.field_width == -1) + spec.field_width = 2 * sizeof(ptr); + return string(buf, end, "pK-error", spec); + } + + /* + * Only print the real pointer value if the current + * process has CAP_SYSLOG and is running with the + * same credentials it started with. This is because + * access to files is checked at open() time, but %pK + * checks permission at read() time. We don't want to + * leak pointer values if a binary opens a file using + * %pK and then elevates privileges before reading it. + */ + cred = current_cred(); + if (!has_capability_noaudit(current, CAP_SYSLOG) || + !uid_eq(cred->euid, cred->uid) || + !gid_eq(cred->egid, cred->gid)) + ptr = NULL; + break; + } + case 2: + default: + /* Always print 0's for %pK */ + ptr = NULL; + break; + } + + return pointer_string(buf, end, ptr, spec); +} +``` + +| kptr_restrict | 实现 | 输出 | +|:-------------:|:---:|:----:| +| 0 | 不做任何处理, 直接 pointer_string 输出 | 不限制, 所有用户都可以看到实际地址 | +| 1 | 如果有权限(root 用户等), 直接 pointer_string 输出, 否则置 NULL | 部分限制, 普通用户看到全 0, root 等用户看到实际地址 | +| 2 | 直接置 NULL | 全限制, 任何用户都看到全 0 | + +想要详细了解具体实现的, 可以直接查阅该特性合入时的 [patchwork ("hash addresses printed with %p")](https://lore.kernel.org/patchwork/cover/856356) 或者 [commit 57e734423add ("vsprintf: refactor %pK code out of pointer()")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=57e734423adda83f3b05505875343284efe3b39c). +, 可以直接查看 [`restricted_pointer 函数, v5.1, Line 1481`](https://elixir.bootlin.com/linux/v5.1/source/lib/vsprintf.c#L1481). + +上面的提交是最早一版本实现, 后来 Linus 提交了 [commit ef0010a30935 ("vsprintf: don't use 'restricted_pointer()' when not restricting")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ef0010a30935de4e0211cbc7bdffc30446cdee9b). + +```cpp +static noinline_for_stack +char *pointer(const char *fmt, char *buf, char *end, void *ptr, + struct printf_spec spec) +{ + // ...... + case 'K': + if (!kptr_restrict) + break; + return restricted_pointer(buf, end, ptr, spec); + // ...... + + /* default is to _not_ leak addresses, hash before printing */ + return ptr_to_id(buf, end, ptr, spec); +} +``` + +这个提交在发现如果 kptr_restrict 为 0 的时候, 就不再走 restricted_pointer() 流程, 而是走标准的 %p 格式处理流程, 这个会打印散列的地址. 这本身是合理的, 但是 kptr_restrict 的影响发生了变化. 当然只是 kptr_restrict == 0 时, 等同于 %p, 输出的是散列地址. + + +| kptr_restrict | 实现 | 输出 | +|:-------------:|:---:|:----:| +| 0 | 不做任何处理, 直接跳过 restricted_pointer() 流程, 使用 ptr_to_id() 输出散列地址 | 限制, 所有用户都可以看到散列地址, 相当于 %p 输出. | +| 1 | 如果有权限(root 用户等), 直接 pointer_string() 输出, 否则置 NULL | 部分限制, 普通用户看到全 0, root 等用户看到实际地址 | +| 2 | 直接置 NULL | 全限制, 任何用户都看到全 0 | + +但是大家发现没发现, 上面的补丁其实有个问题, 存在一个空隙. 如果在处理 %pK 输出 + +1. 在走到 pointer 的时候, 判断 kptr_restrict 不为 0, 走到 restricted_pointer() 流程. + +2. restricted_pointer() 流程中, 如果会继续检查 kptr_restrict 的值, 去做不同的处理. + +这里就有间隙了. 前后两次判断 kptr_restrict 的过程中, 并没有加锁, 因此如果前后读取的过程中 kptr_restrict 的值被修改了, 那么行为会变的很奇怪. 因为在 restricted_pointer 流程中, 如果发现 kptr_restrict 为 0, 则是直接用 pointer_string() 输出了实际地址的. 而如果在 restricted_pointer 函数外面, 则等同于 %p, 输出的散列地址. 可见不同时机 %pK 的输出在 kptr_restrict == 0 的时候表现竟然不一样. + +这有两种处理办法, 一种是加锁, 让这段流程成为临界区, 互斥执行. 但是这显然没必要. 另外一种方法最简单, 不保证互斥, 只是在 restricted_pointer 流程中如果发现用户期望不限制(kptr_restrict == 0), 则同样打印散列地址. + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2017/11/19 | Tobin C. Harding | [hash addresses printed with %p](https://lore.kernel.org/patchwork/cover/856356) | 内核中 %p 打印的地址会暴露内核态地址信息, 是极其不安全的, 因此限制 %p 的打印信息, 它将打印一个散列值, 并不是实际的地址. 如果想要打印实际地址, 需要显式指定 %px. | v11 ☑ 4.15-rc2 | [PatchWork](https://lore.kernel.org/patchwork/cover/856356)
*-*-*-*-*-*-*-*
[关键 commit 57e734423add](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=57e734423adda83f3b05505875343284efe3b39c) | +| 2017/11/29 | Linus Torvalds | vsprintf: don't use 'restricted_pointer()' when not restricting | 如果发现 kptr_restrict 为 0, 则直接跳过 restricted_pointer() 流程. 这个补丁将影响 kptr_restrict 为 0 时, %pK 等同于 %p 输出散列地址. | v1 4.15-rc2 | [commit ef0010a30935 ("vsprintf: don't use 'restricted_pointer()' when not restricting")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ef0010a30935de4e0211cbc7bdffc30446cdee9b) | +| 2019/04/17 | Petr Mladek | [hvsprintf: Prevent silent crashes and consolidate error handling](https://lore.kernel.org/patchwork/cover/1063203) | 修复上面补丁引入的一个小问题, 限制 restricted_pointer 中 kptr_restrict 为 0 时, 输出散列地址. | v7 ☑ 5.2-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1063193)
*-*-*-*-*-*-*-*
[关键 commit 1ac2f9789c4b](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1ac2f9789c4b76ad749870c25ffae0cbcd1f510f) | + + +### 3.2.3 示例 +------- + +我们制作一个非常简单的用例, 分别用 %p, %pK, %px 打印一下子驱动中指针指向的数组的地址(指针的值)和指针本身的地址. + +```cpp +#include +#include + +#include +#include + +#include +#include +#include + + +#define SIZE 10 +int array[SIZE]; + +int *p_arr = array; +static int __init exam_seq_init(void) +{ + pr_info("%%p = %p, %%pK = %pK, %%px = %px\n", p_arr, p_arr, p_arr); + pr_info("%%p = %p, %%pK = %pK, %%px = %px\n", &p_arr, &p_arr, &p_arr); + + return 0; +} + +static void __exit exam_seq_exit(void) +{ + +} + +module_init(exam_seq_init); +module_exit(exam_seq_exit); +MODULE_LICENSE("GPL"); +``` + +我们写个脚本, 分别在 kptr_restrict 为 0, 1, 2 时插入模块, 显示下 %p* 的输出. + +```cpp +#cat test.sh +#!/bin/bash + +dmesg -c + + +for kptr in `seq 0 2` +do + echo $kptr > /proc/sys/kernel/kptr_restrict + KPTR=`cat /proc/sys/kernel/kptr_restrict` + echo "/proc/sys/kernel/kptr_restrict: $KPTR" + insmod ./kptr_restrict_test.ko + dmesg -c +done +``` + +![test kptr restrict](./kptr_restrict_3_test.png) + +可以看到输出的内容与我的分析一致. + + + +### 3.2.4 v5.7 的修正 +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2020/02/19 | Ilya Dryomov | [vsprintf: don't obfuscate NULL and error pointers](https://lore.kernel.org/patchwork/patch/1196790) | 同样的, 之前 NULL 指针和错误指针的输出也很混乱, 进行了归一化. | v2 ☑ 5.7-rc7 | [PatchWork](https://lore.kernel.org/patchwork/cover/1196790)
*-*-*-*-*-*-*-*
[关键 commit 7bd57fbc4a4d](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7bd57fbc4a4ddedc664cad0bbced1b469e24e921) | + +进一步处理了 errr-ptr 和 NULL-ptr 的输出, 让在所有情况下, 显示都保持清晰, 一致. + +```cpp + ptr error-ptr NULL + %p: 0000000001f8cc5b fffffffffffffff2 0000000000000000 + %pK, kptr = 0: 0000000001f8cc5b fffffffffffffff2 0000000000000000 + %px: ffff888048c04020 fffffffffffffff2 0000000000000000 + %pK, kptr = 1: ffff888048c04020 fffffffffffffff2 0000000000000000 + %pK, kptr = 2: 0000000000000000 0000000000000000 0000000000000000 + +``` + # 4 参考 ------- @@ -182,4 +432,4 @@ When kptr_restrict is set to (2), kernel pointers printed using * 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. -* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系. +* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系. diff --git a/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_3_test.png b/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_3_test.png new file mode 100644 index 0000000000000000000000000000000000000000..8f320959b33a4f8cfc393ec06c6dd8a8be5f1172 GIT binary patch literal 23514 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

L_Oo@>{=~nF!uVfK0DWF! z{Njz%jP-jJS53W`|BP3!w*240s}4K=z^l0`0zju9CjNByx`l356DGs8O@A;x3H4+U3rzYxuc0=u>T0#G`ePqB(7@* z*trTSLb(u`#P5V$ssEYki661Wq=1^0X8e20O@by|qGk*AkJvKR$$1BdKMz8&;KE6! zLjU+qggCtabF+|M6QkMX<+)ejk5;I`a0@v*yLj}2^U&t6NoNJ8XJ6{SK<9S!W*%?Pxrn=nn@hQz zx1&q58z9}bM z9PYa9oLYYn`tXOx{hRrtegVeMkfCA=xU88^F6`Ui>h-5p;GcrHb2fdmF7|GG@P=_q z;aq~Q_a&_Y&LO%AV6`_AlwS-w{7hFHqO+s802dn!zU810Gn(p>{V~(v*XzCymN)Xg z;dayEwV%##{ts2Kv@!~8)YiFTla}R_k^TjjWF^N(KqJqsq+=~(F2%GU=MEZY2<8Iu zegd>Z7%3~7k3i6W`rr99-okxpKD%m@hNL_p&#A}NK(mAl{VN@GUQ07>?*o-Cw`Yuy z&CZ5_%&evUjBwBKFExoXynDRx-l~QAg$n_Ty%t;uZr3eyqIwt;$awh06}Oz?7y4FS zwtPDM-lNq65!FLEUSp5AeD)8n>h~wyb9tl%1>o`%{-3Uyh_{c zlstY%t`!*A?aQty97?K!^w~~~v6dZqm~0b^SOzRO(pb5KalgFf5_WFzcJS4r(pNqC zwb~etDlS|gjm|O5^0yVsF&iFmD{7l1U021rSA!e#L4hF1w$?}=`qX+#V7>RcH8>w} zoMA%)fx5|%dcjxCr5bpR@Ed-PA5a0WlFWxC2iu|qjdaUA#>6+FOnZ58n1zUE~JuvYd zTcI<{b*K8!uR@b#Ev)Q=<0fLTHa>m7%-GkAye=(OtUrS4;+GY+S;=?~LqI z#d^@NHwm@(;J%*b|LNsS+@aq4KJJKwI)v9P#6(xhR6xos` z8B#iJhcPoTW2dIZNSGvMqp{pG7={>Q8_P4pDV_T{&viY|bv^g}NBn-@_w{+dUT?8; z#@k5T;hkak&}Ur;tq;vD z=+incb#vOsbfYwF7{WmQUI>LD*gC7ua#d_!;-dauP@>Lw7CWlHG*xqF%(>b;eJJ+1 zE?zS#GWzOjTMcCUTWRz-*eelC5MUURjFA(`9lJ(^&v8#2dY5c`8>Mb{ofyls88(aG znRCeabQYD^Nv>l}Dz13-smB}UIK~|OQwa^E-{IYLAnSLX6kVUr_^;i?2Bo&~lnUeg zR8_7NYWtHEsvis)ol8b^@IQ@An^5elRw5*U$GzV?#{hWO9po5Z_%GKTH&GGd?X_Cu zZ~kE;L#*joH`%p6(uw!+U8)zL@7;%MBP-kt;@707&B7$OU8yvh2gEzc2|Wln>+wb! z4fiw7com#r)hEFqm+eByZ`^P8zr~4~aW1L0Cx5PaDU9_gsvAGkE3hepMpsCo>4S~| z28^k8UUkZbKX?D-i0bkv${FzOf@dT+bx={_#y+zu|N7@4!J`Y5skB{SG&*F-$UeoX zAWZ3ytcbnfw-t0dw=RJi7_I>;aGY`nvc z4^%qkp}c)lmxiK+fP z-dmIsTv?nv?ae6MqnSe;lTRd<;oO*NK`})4I&>B1xIQ&?2%{uAiIRv$o~}=D0eT;7x`Q-uZg(5 z)D&EAPmG|UmP31C-CA(`_qMcE43P}RMj7!;(A}BRvu4lfLKyZ3M>*d4NeH`VuuUN~ zjiKnVpbC@};PeHax>&Fn)<+EkS@JlGO%>F77Pps6zYkU~B&e?L^4Or?%Tg>-#dMqc zZfif~JyQMDFm0pG{*T*2T&lks-p_cl`!5Xq!ikP(2e0Y_aomv%R8HkdfQ>yu>Gd-K z*izBN=i$2=ixNHNkA^2HsBSCJzRQwkvg4O+&#>#ChC(XRxnGtUgoJUO&hr6HmA8C7AJ9M6g#&7dqHoggi}nb9VX-WAAa ziLN2`J-m~9karHE7Q!K*)XR45 z3>1bV=F;3oshl(&E+8*TajD!tS{U3R7G0cPGWb-)oOkCb zkKXoO5LJ|cMT`%@>(s0!82*Ia3%OS0ThrI<;$#Q-F}x=t`i`&bm$qir;5M`uX6D&!`+yH zRxVWrx&c#?U@eedwMM#mNl+SdFJwa3Asg=tEeI6>y6=HrVV|s(s+Nb!6TddW=nPik zA6ce>ou`R24NAbYe(ZMNesWI}0%WN5MG?9RXpjdk&4;IPgj$kddrO*osI;YOXE?D_ zW!9xo*>Y3_=s;tY@U?a&9G3^){a`WPi!M&VoEPg(i3 zpQXO`iK8CI%gpqzo0)m#0hiA=Jo!p@_H|L_4r6RlgsHaJ3mKQ^>ea(%^yo?lB1`VX zv;gwpD~1+xFML;HGTJN`#R<%-H#{aKpxaJC?FL(XJuzR0cAyc(zs{V#>(_J>))#ee zx<u+)f?6|r z5wzV`Pc)8z(;@1DTG5Jg>9)4({ z=f%@p+rm83@i^g!c=mM#H_3xh`N|u%=(qFyBV1c_dAuYfaH@YMIWwqeU~w)tpFJky z8@w%nfrGzX=9jR_>+eho2cGLUZ;f4eA^`siI~H$%rMf~>8FM}P4<|m=`T83RAQ{)< z^I)a`Qr^@L7_o*2BZ`~+1S4Ly@uAOxuI=uiZsEWBF{1JD`JA@FflQ7t!$115ukKZ9 z;WxHGiNlMR%Zi7!rw6+nDv(pJ^`S}A2A5eIIeJD{07$H;E>5cTx(bK7OP1dxHye8$ zT!$4^QbdhT>L?4H)omBW4xG7Shj_RA)0~Qzwp!6|K2fU;3yjIk&YkEH0_^sC>YJ1W z1#qP%qlJ9mu#=OM>9Q>UiemT!L0pf`w5=$sK*9HXiwQL?e^#P)N>UC0JD#NQhumAd`0WV^jWp&M2Z$pF+4qId+S( z(t|5@&Ah@!(SOd$N9Xe~QAf2@SxDua^^9zTP$T-r5v{nq?=-HJ)hnHN zDv7yk>&T@E1Me^U3G{LkRaFSMci|IL)Eg>jIWA2)P7JlIh>gxYwU|dyUq=d4n@#NF z=Nx`sOYt}zQS1NRV|6M`zE9dY0Fo+>k(bD}lnkxX`RMalKRW_x*2+Mu{0R|Kr-Q2A z?$1uQCSvBupclH4cH%Tgvx_mPQoz2A$avI+RX;oTHbws0WPFgvc06u!i6|ytf^8HC zPB7u7#bj9gG3U3bO210{Rz6TVa~NI+5IAqfWIa;k)t$i8IBJ|%`9CUAk=+DTQq3PW z3jqNuS4<~+MtdR^Z~|?tw8ixFSR= z#<01Ks47^DOBCimJfo1pO~m7PTvy^Zk+GGR>8pj80PShyQ?1b$fba$Kp)bbQ%Xe&H zs?K;_F#r27tl!t00D>C(YbFjU@%B+d z6uOveZnVo6NO9Lx)Jw37pLaVQ9ivH3Md!G-lM6_h8NN;8=saKk(cLBh)Du5jj5L}M zU|cL0%x`aN&Trnz>qAeubOA_&7xD4oZs2KZRmVgoUeh z#Ng?k6tW5iwdVNfHkS(6*hqBHr6J2;?)qH zwuJR4Chsjz0=gz!s~#wxWkfCd?F%`QK-QAX7(rfa=X~f_&SGTGcIRncI`Cc)aMVVn%_;v#Wn>MW^glc9WNu=f`0!0AeB?EBU64$=3 zpYU-9GrlF9XNB;J=M4)Ku!}jo+LjC}B?JuBk@`uq@@!LeKpx^nu}4PTe09kRev4_fBs&q zx8VGi$>3yIRwHEQ1QhJkbO;o53)JaMUQC$S|8*M?qd)R5fp+(n!L+v4in(O}cj3B* z%D8l4Aa=Cyw{Xq%_Hu{Wv-#+=e3t*G_-fq!ckvYt0eC{W@%7)YfkrHkb2t4sS!)v* z&+mJ}1J1V)v;_ip=5HDwe|QzS%%tYF!rpj_zClH-H9uGzS>wb%SmUhubTW&96%>t6 s0elUb;wA)EFZ3u%KWSw;dr;+EY+XFIugxB}-#{Dq=#VK0o?N+~e-Lw0r~;p`|nDRWCR4D&b$EdQrDTu;26)mi_Ltw z_`}T!^SI>5kx6EIPx$?^X=68i!19LU?_CdZe-X|)&ZLYlfrWii_bPHqQpvsyL+eqG zDoSF(2EAvV-SFq0FJ3Ejotx0Vc^yajpHBUj7n;4;{sv~tDP8cJvZEaM9KYK#5`IzS)6-6HQrD7y!;fD z8(BLV^Fxlp*a6}Dob3*NNTvu#VIOlcO3@O9Zf(R(6PiSCPM@q@rdsDE>7?4}Unh#& zPHJCe>eT)0KkU)9E~I6!AudsCuqk}jI)A$1!eX~0Xvuc*iCC!F5bBJ5%#DUEh!BcA zz0pWRG@Z|Z9id}A_*)}6wcJo+(O5^PZc-sPNwV#AQc`Z1#c0}`j_h9> z51XL8fcW8?842cBP^qQAzPr>(#Qq&7bb7`;Z@7$UAu zj9UL9a88PncB^oJ|9+Gpv9p-)NrqeM+x*3xZ}}RzGTeaij`*#)x5;#&{FHCGh~g_S zgW7R|5+hTHLG9*jz0rA>7hUB~w+fUudkXEp8?ivSE^GtwWUYMKnn&MX(JJ=-bwZ-R z8|ZKmC!(KKE?e;j;{_V;{N#49Ja6i4R~&oM3HhBr?r_cl|M7(1ve=LZiv90I>;v{u z`WTitHu?u17~j|EpD?Jd1#R|5Y*)6PMz1P-9{$JLB{Z)%N)h!WXk6ohVilk-m=vx# z(AAecXVZ*rTebHUb|*-i7?CZTh}!3Qhl+la5cAndHn$0WQuIX#GEz(AURfs7tL>`U zsj+aJRI>ii+jndeyNWQQ4;p9Iuy4JmaobBy%cHm422Tk--COd+^)B`ve)GF6j1-zN zjTxjFbm%Ip>WCg??-Zi;vZnvXvd5#Z(>hb}A`7u6iqy29=rL{AytQbf*1HWR<@+xB z6P6?$_v`Jru3V|*pf>wS&-|PU@Wm09)K|i}A&E9jqq z@gM+0g$+vl8gf1|TD384N&IyeJL*B;6Ly*Cc)cdY@9=sA3?NT^hZNn?b=8|Zq2@P7 zFN}R&nA~0BgW3r~cK1Y{`#YWQZ01>9&(?&^EEZz_8eRL<=_ zWgxt*OO80luFVewS_XoL+ZP>*?>tToTo0z{ra%08{QEZ0D<%fpd5HN8eHg<1rg|vK z+#F=BuODHQh<~Er`>X(-ZoK#1O}*uPm#~;8ebS#36Wmvm6W4yJ?^Rw#rV!X0YQ{3% zrqj(~QJi#^n@CE=cDP1`E(;!4_x7|KR%!nY*hpd!Z2LaXVG}y{Ito2*L#M*XMWh$_ z^5G;mJ;)ZNFC3t{zZ~`TOgh)Nq$t);nCxh)!_Tw6?Yj%gp0Y8aS81W=V%cIDx!nMB z2=@2>9Hb+{DeQR5@pz$#Nw% zTgR;v1G4qlY+dj$Up$7v-D{p|lML?L5I&xrjm)$_ce-f;w0~hr>*=3}Q#oGQ>5JtM zoVwXB)Bw>eN;b0F246I?ceigrDCkeI zCx3mLQ0}#AoRjo5J815vTi=U9zRK`F06bp3XZgcI&>4`#Os}4Tqj`KcnXg3Z7qlRx zP_WqYgU~68ch-iSVc93iH{gM>an`LZPcXeaOFQt)XgMw*9dA1^B{{4wyMFsQZ;c_b zP1M^A@%ay1mC`o~XERQf&I)n`|Na&&8jo7)6`J-=aruy8Su;p zgl}qHrvRX~Iz&;W->}vhIo`z^J3*NRPVn@}OR<(7D8oO`a$}7}$GV>*=!W(dXzOOe zXJN;`8jNtb-MKeUB@8mdEeKdkPr1~M)V^~QkwZ)C~6K7Od1did8V zeP5UEk093+xvVXK6 zdtoGq$W0EG=5iLV{qB`Uzw0n~hOcS6{&1+cS}}|Sm#vMz9V|=oh2vVLApQB?UUDq! z5mV&(&fG8_2U&~<^ObObUQzBq=#4!f%18Hci+gYBNsw+xsCfCHyIA$CFKZpeX(^F~ z)LBEJw1|xMm)%ix&E1jEBY;VNPmt(ykPXSLD7X6ar+g>@tfWwg6>>@WpyA}qXun(3 zf&1Y`Ke`QZ=)D6Ovy;zZb*hYZ@8R{Q;#lTumvdZjzPv&BxDg7S$+=(^PZG@29_>=f z!iQW(y+ym}k~iZ$PTeWvzE*a9u^el6xBl{6+}AwWd5ZGNex+a_;mGCuiNO3=^DLr` zptvq_La?IF|FF&Vg_NF0Okn7jkj)+sf8PCq$GtN<4@Z_Z=5Z1v z1vsSGjT7Ef9W`5R#f^f-Jnb2t4UJ;`6L|Y-o9`hmNfxa5P3vNxuOJAkV(M5f10*^v zMw7jm=$wKSuy5(f=qwva!4u@{ODyJpW#({L0pk}I}O?K^y_cPOSF>5(q6gw z#6_vUs>l`!^@1=)%6fqunL3<41m9KjD!(tuwQ*!cK-O~%e#IFq!fkiNnP2$VJYGzq zch;^cXUp`TH0UQTa@=i%3+I_Rw28;RzKdhQ>PU-*X-6bYD*v1K|GT5&kt8{*z9{>B(Z6 z*k--k==Ih=9Am@KWzJvK1*g8WlL-HAVWU9BXAz6RXSFVf&MN-P*l=GN8(xTN|HF1? zPa@{+8}_-DESRXe$~3O5-7L=!9K2Pd1AnfMl2TLg#$}J{{!%37SC?id^~Bj@zthFP z=Mpk7R8|05=WR+R2Q2m^j;u3nS`1XL*P;PFIPS;i-Xt~}e@RjaIb?p8XZ|@gj?Z}jFor`(b4wQC zmi-p1{&}9bE?{#cwncBOB<<)cImxd|JHf}N+jVunN)e^M#Q@$br?}%1G@1L6y64ls0y4@%s+kr4KdX(j zf|H=0sAOp9pU)wg+MafG1(dqlF0{P&dE>cxo7pS@bkh}#N3dViH}u@CT?K%z>Ml-O z&t$ff{-FJn-)_8L2Z)z#5XK$TP3FXAZsE`0V)UOPq5{(jPG2t`i(z}rIvO30_fa?hdy3hqDI|a>?-$0s}EDXT9~@4*}hS_J8oo2qOYn zl}hVse8k=uzgCCwPVN%5St;D538U>yUehPx@uHOZye) z#M+@uHm_Z^S${O+7cGjfuXR}0T7pnZv-jjqt^OCEhzuW7Ao1(_L`$vT5V;ym9oQ@of3TDgE(8kR7Ch;lILm z*3hwT^Rg1M7eRY}3Tod2>YFX~oW$83xqEFmdvCl&APkt_g)>lTymcr>%zl2GysATp zv}Ongh*@>Shdnh*AZ2cz^kGi`ojOyA46{9?j&P(S+OIc`!h0H!cOm>H<6V>)ANU+W z-bHSi;*d7FeG|yxrAwc^8r}p)$u`9nuTHC}9R#bG#v>`g@G&4V)F(+2qp2A367q5xwo2!0sh_)H}KlbXLP0W3;i2^ z5MKRTT|MbDt5GuJizH5cE<Xk&uM#Lb2r^M?WA&yM@s`kW=zW&Rc0vM zcARf?i>`Uv;uHTkgNO)uw+J#avNLe~@g0Tozu=69BnI6#@6gGG2&+1u1)QCot*L#+ zHUAT@O0eOq;{fa}`_#VRalYRzZZ>i6mAF3qC#6}#1nJRC~&nkld z*@#!6%^L3YswAfHd(v2d$B+L>aFKYggJ$zN#N)H-ZM-TUc;)rL|0VN1B_4)t1p#qD6EI3~1QV!^MvzYPD zH27!mKh}fXfW?J0i{dnqCrSaz@gScN0xPv$O)GN1rs4ljs4KzS0&^JZqx~!s7maU(L{aGFN46e6wu}QSr)6igy3EeFdU}nR$5$ z2)&+wYH+_em$f!8 zLVzP>8oP1)@v*HP%ztyD{EijbGH}2DEn%x}QluA>Hfv0K!!uwMQOo{Yvs4b?K>lIP z=gjo_a89Sqv*zdj5nwfuAXi@=)?cO~z=IS4u}szV)&Il6Y!o<2mb`mC;3e*4 zxiMrp#_HcRsRn0;98~g#;dXPS!G@rTB}}mJ^Z$DZl&Won9MMZPsx}ZuLZGN)rTb5^ zc$Lid*=0=wZ^O|^3Lsg>^KzJ>0r`LC$dG`T15`6e9^-zpw3#1*(bImrMxtqAW%|Fz zOWuH}B1ox&R^{{gR$Wv6|LcK-`snR=K@3o?4;x$i)pQ0-887N+7q(Jw1m-P42!>YU zs(W_myZ0pCksmv<%_KJ zJ!n_xeTcq;0dL@t;cSd$a&=n>Y9*t|0A2RRuq$%bhPnN;={PX=#xFB>#lI$2Q=LEr zFoSZ$IeGm?`~DeK(Ks?e_l>=5hXK<2L$o`Uj@>rq)vU< zgdApYDuB&U;xZjtF5Xa?3CdKfGD2vqYpT5ZmJJ zyB=Y#3cY%~Jg>%K=%vIU;Z@3YpgS?Sm5BxzvJsH`-7 zdPNr#T!8}6W}&h_iXk_$yqrY|2*8e@@b@e{RR4CLc*WLw%=yAq32`ZnECxisQ)X*9 zo(y-QSOA6hKGnNq4KMw&RM~jiU88nyWGlq9eyqzF_71{i`k|wW-TXwyb-&w9$Yz4m z%Y>5IF|WEfKg96msCEjds&b5>n)PdF+sanBez57Pm*W4Yk; z69#F%gO(jS4eO0g3wzx<|2k+1Gm=y)Kt64j_H*uziNOM2P2~`&_hD&qw0phXGA|k= z*h6&Fwt!p?HCPLC#4Np#Bz3Qx9;|$hugPQb8MJ9#oE=X$%clG&HKakim@Kl&IF^)) z;6>WWi|xUXPy6yI^uw1$YHz|g_q_JMMrc{F3Cx1_-CjX?Mve7h3n<|B!#y=e`mx;m8qUePo!(;VhwcaWPOL)9t{(c*eS!<&x-Ka*!Q$iVm z8HWv&_&2IzS-tK9TFos4y;1l{>FERqEweiQyVwjAgd-YQTp2T=3W!Wu-bBJo87_$p zI0M~789w*7VFX5u51G^TR;PS=-@PzE@o~j=(ilo@@h)G-@|JA8)@pc)oTe||*)4G^ ztpI8wGb9OZYNP}GEVYhB&?{3R(#{p8W6JjH6@6{K9R+i>tGjvf;7XKy^) z9HGzz{6z+=-{M+|g{d4fD-yywx#4vxyi{W@J7s{bKE*L~NQygFI+US-jGq%E=NL{p zGQ&20FIHzK4M!LaWnxz?=Q-#9=b*UhZYw4!Cx=y6bK4>?b|Ob`G{S=V!s62>l=~!; zqlKyjmkEBvdLu{VQB?M}K>O8}D6yVh76T2*7%>xpgTj>ad3}c{?MC{4Jo!h6*!w6j zL`BDmdI`Z4fl_v=Nq);UhoFyRRxdJt0RerAmjDVXtq5DAoU(F1#LXDNg#(2ov4C-3 zriDPx4?mR(sg*{vwb6MQY%WV}7ZtrGQQaz2bLS0WM#x-L1W&jh!IPr3s?21=e<0l` zDR~A?Z&uBa!Y=2dipCKElQo}F*2b;_SF_{aHAT@91;^{1oh)7u7M(ibF)%Xv9g>sG zpkAYm+k#=lr}3;|QczDAsyP(71NJD*1Z0~H5o~dc6ciMQ67*fz5&h_Gpx~^-W&_Ki z@nE7-3Z*NeiE%*><$Xj=QuJ73CQF~a`gD^RY`wB9q=_x1rAT#DQZN$`5z^m*bkYk7 zs9B6VNLlrNe%Vz*D-_=hX`1PKgrt}a$QlTO3y0G?%V<9KDS>8#Aw`GSEOz8uC+BzH zkmL8bWj3S2-scYB?H9g@mGg|R*UryGtLAIldwtZ#{+cQaoTo$z%AJ^^ zRuNE}T2ZdEeP`F`_i!VT#_dJnGREP#9miKl;deD9OWmYKY0eq1!@VwYw-F*xOoYmw znWl~%$?=MBgY1Pu`8U20MsNq2m^sW_97Mzoo62UHv|OEbYkr17fz2#lSDNu{)#=wPYp<8>1W~rVhpr+9 zt*>EOPY#_=^b5a+V?XI6@8x)`F@bZ?W-RGctP8l4xT=Hy!iPEv0-qGHKlg(F%hPQJ zr-cITk-E8;ZUeUfjBeBnv0*W%B@r`|)<;fO_FOx+NG>%SjM+3~@=@6nz^`K^RB@AE zh(;7lnyla~K8M`UKQ#P}cFXhYY4oHNAkG6gDVJkNDi-G~PG<>WNW5!~4Vy=!XLH%Q zBo@Hq=yXi0oz-FZr)OtUB|-V4Z+J+MlrjLKA1h_NqoNN)`wowQsz~tGNkj6jgKUZ; zkBSXpm)JXg_Rn$&ih*xY;T)8JV-fLuv$f1E#kGItKW#gUd@0mVHF<2%wfFl8p^tqC zFzR$F2iV!DP1ad6qPiaEV3&KCm>W2*zImpT26{*YNY-I zb5=Ita_HS^bN>%VC_xG;!Dc|*g+x`=d4Ws5?Rx9~!#mJluYpeY59GKgL);M&L=t#5 z>f0az%L(+Mvrwrz82R5YC&x^@ND6K z9IB7__0h^^^Q-Ld%Gm{$lex9>HGlW)wN#qNiX?WLPWd9pCV}T+B?AsUA9FtTv!TJx787`x9X=noqwXb7d&@J zTPKa_YvjSScOTEk?!GBOyUu9v)haJ@7WH7;OfE1X%xHrJql3;IE77&8qET-QcK$mH za0=qDlh!rK{xEAlC#=2jr!h?yQce6w5SxtzLl|LdTqys-{TSC|zR&IH9J?R-&M(&& z*y{VdfQ{;9Q&qVVtwcwCo>5B=z=nIX0>}(@rN7^?ZxC_E=zivHXE5XpLIS&u3+&5J zXshc(8cPtyi_32P8Ibg9Rn`U4YQ+3{vnP&cpm$0~9>6iWVtAOFEQ*8kCMhpnTZ1=& z9kaRbk*#@c`{IdrVc4Rm3T%YqSq>+bjVUQws(E+G=~3#iXAaTb2|VqpJC`XuDYaPi z_eK}!Pw1L2M2)GW&QULI9sF@o6h|yhP4%7cb-ZAt@}b^%8oukUtu+tw%IbKpqr=#` zNeG>`E@b&62sBUKeUnjj?O=~B7Z5j++=+S5#vP!2WhXqi9uxp>#x=?Fy&N7PuL9Zp zgRxuX<6mDx;P&?>@MTGzq|iTGM{z60t>`*Lg-snJBZ#ne5U=MiRs(ziA^jc>->-2!*ZX-5fPuw#lRgLdNTU(~m^PRnn&AH^p(lW1t15LWYU9)tO>Ia>r zE4qNx@?9YIIMhcL6?D%~HRw6s<)xZgL0|8t-Y@M%#@v z_!2nzmN%H#aH!_DU3>5eK;wCH=Oge%8cfZTk5ubzzhSe_mLE?WJ0i()!4mHLYpN~v8aDp-W#8Y`xE?ZTJ6CyO=FY|%0*cgMq{X{IFjc`RHzN69Dq z>%AZn#19bB2m{yJeMZ;PUJpTZBT^U$@>K4W#%1wJyO)I|{%Sx>RuO7YNmEBH`s>WA z?sh#@m@8ByM2-sbnkST4JX<@bc-qE(JoYUI^owL+BsdHGv$ii!HQ#h?Xi43Gs@vr; zMYEics;#RdvTInL+;{ecC6??Wep-bDkZ?>T-bZ)Ir2(t_c=N)zFZVvQx?tnW5Q$?eS*W0dQFIt*5y{VSyZyk#*|1 z5Qm>CrFxPE-!oyh|08GwWr=NE?V(?YpV@mt8nqm*`@gb0L-&YaVAQEp!k27*S5pzz zR+taQ|E{%AM3M#@_1IYLvA%taGt;*}^-Z#)@hyRK-3felBh7BKc;uPu#}BpV>)R7+ zAuICR>f8=&TY{uPv#5x2Ch*Eh(p~L-sI|u4I2U9XvLnsuFjUg4(Y8cA!>lhc2aJ#Y z^wWr|=(6A+tfS6$1`#Wz4n56g$kPrjh!=WTdovzCT!#-)V&QGkn*Ow3C1%#H?Bf_DrOC1cSPduBc|yvF zb4WcH&36h>e-j|JhcJ*uq9bjs6TILcF@i3M9bht;c*gAVbui>{QdDXp^yQB#KQWK^ zl3OFqX5_cB+^RKQgrKd?m%hr)#v!2VA9P7N6jejz+yaRmC0}fKWB=H(R`L`vl1=)B zfrcS}D_kLa%<0M|>vo;Y2ULV~~m$SvN6_0_h8_SbPzn^GJtJ=l49jVGl7Ft&& zfXxn_!FM47RDS1vj@&AQYe)`&qRSfInXvZ-blOOD1|NciMj z&`p(cFpwF8u$So1)v*Dioiv&8f~SDT7GFG#GhaBTilqLIc%ja*S>!!;P8R5%B4=_o}xWs<#t`{ zGV>|X{XmS8jcvzcbM_PZ`6;rj+$`mUi}eq(SL`aLv!#xgbv~R5zKUXxtt|&VsO){O zEPX;I-Ppgm&kiCIl-U2Qowx#t63{$tg32tkcwh^K%S5Itn?IN}w*0i0nXoZeYqRCx zv?mS^W!tnNnXBAbOA8tdX~SHXIen<2dCrfQqYxsUJwCE_w$n=xo)kd?Ev3q}Iwzv# zZWb1Z`uFA*N5p{joY!MaQIT#s`K|>!*cT^7Q5MnyOchn2YZMPW=rktVSy*b35!XK( z94-A}ugwcUn{X>j^m@^ZbXcd_8O)vLMom#U3~oK^&=<1dd5uq0Dl#b4rv4By5a(p; zc0C|L&W_(>saTZ)B4xHnj_zHFlJMh6Ux*x+{YldOR&IZ~{mVi1 zcT`IrzkwdoVh-jv>5d?Pq5iY@jY|S`_(`?2?L92`md3Ar0VRTW;8fE-qr>p5&T z<|7g^&c6RPb%yq}$jB8>W1^E<2~MJO zMFGg&S&Y#{6eUYW;EmvRuOQ&$CxFNA&=GodWG_3-WEt^(X*iH&9V& zaS=#|0h&orkipHM+!Xl}3je#WpRCP?ud^LGx*^I}?4-zp5)2!pgM+g2H4JX;yYjvL z#)^s0<|UpSg%j)V)4}hJ2?AipMr#&x6pL$zi2Yt?2mpE>yH#q|3I~!=3}a; z9N{vKa!dq9!bvy@dyhf~tyt#W$A57W2&TL1?!^=}NZmRR#ulS|+joDxU>t+ULgpzG zO9-8;$2|k#DRi_7J>Tg^?tej)&f$Tj@oYW*OR6A8}ac*jr5&h3!&Udz9t=_V+U6e9rgW3AHH8TSN1;XIs3UAt1g#caXiZt^*kOnTgymC8qbO2fOzj(t(-KWvuM^1=RX z#pi=(YUll~xa=>e$Pw=N5v0iWro8Gmo@!SQLOUJTwEZM|mJ z#4ier`xj$uWZ$%2iETx-D`sQKf7E}Lo@!gHh30w?@7Xj|2Rx8mK&kM*I2Qsvyoi+K z@VzKhWi}_*dvk%oefA7g%?<&>*%muM<7%&(A2+Rzf7~gZ6kd*32~JtFHw;=)PIHz` z6y+pFq_sa-#hIDtM!y(P>TpvZxB~x$q{Q@E5D%n8J{i>-u7Ur%w^j-;qr<`n)o*EY0+`#0TCOTg&G*m8bTm+*>>_AI@w&)2~{J7{}$3sLp_{T?vtgL7#2t2+2?ZRioTQ0KBn)3%q{7$aULd zRlLjq>uu2FC(&&IRedvR4fdArvA2#31;Te;=N}}pcpB2$e-7^Jc>2GObQy>xDzJjI z{aOu_eC{@NY@CzSn}7;W*8Bl zxvzc{S%tHU7%OBI;v|SlM|QQ_pVlUu0}6 zrcZ5$M>qwNVeEA9Xeq_}%B)@8hN4+aU9;YfnDj~SDt$5}&B48!cKPb1upX1-Yi&#< zMEEs4golT9TVN9US9Ycvicr``Q2piIt+P+8yN@% zAKutq>X0586psrja`XRyu(ps#kV1y2zGbO8DK!lEUb#a1W+6RsM(ypTf>K{$>9IuMI1sfeX#e5n*lK0LH z_T35Kl;#F@-HW5}`WX4b#M6%_c@HJEBO_d%}Q~Px$g<_y_2X#LRbHK`qMX?C*a7tr5p>C2)q2sm6_H%KSz_Z;bWCA;G{Lim zL^X6EA+tmY`Mlw!$42^c(u$j@YzU|AOA}11(yfyTruc=L7TTZD(A?ZC z5lUNscjxJ}zxmq8A55eGZ+K= z@V(1Uij&I~8Z@s^<%i8?CwgDOW;*t+(yi>Rf&S;ceE>tU3<&Xb$V@4cRMHoRQMrl8 zBSC5tSQUo$HcOFv(%s>nAc_GP47@N8-6`qsqwxO%p!=;cy}>jl+d~x*lY){yc~2ol3wT}gk*)YD-IY1f0G%Yd^5mu8t~I?W3>uCSyfaOs34c@MWHM)^+*8^IhsqQwx!zcn(yI1yP4R= z-*nj=537etmEqNX7ccAGa25C~sxp8ViT>x6QeT60%;RKn)C?jks*GYW5&HxD*^*!x zV)f@__E@QlEqFPBXIv*-Q>n~geq&UxK^}*L1Wxk;gj51KnlJtYS}%aRcT?nGk?gk; zVE`^Xd}@zFDQqokYK=Dy1II5S7z^=sa;@Igoer72bsZG*&%L_>(w&ciZB}Q|!-hy# zUqs|YPF6J5I_tX#O+V~q`F+JyWX0S5Gs25_56^3q?)&FH^2{?7iL6S-DK&BuN zOCi$R>6fTd{j74lYAd-N9-~Megxh`jyjYH zHxp>UP2xBG6bd8^xEVQU-CC~=A%c9HOQ0-|Lnfm+Qo!B!B=NkqN_#!3&H1Qd^Uz-PGdRk_RENvhI6KV{Mcf+ zmxmEMd4sF#>|c4xrr6seZ)Ci_dCz6DC+zcLZ4nkdEPeKDzBsIF$D?WzF$Es%3de@4oE+t5Rsg0Gq35K*GQS!JH|lm&p433YD`XGq%IhEvk%=>>=P+WL(JZGy8abgqIsk1}f{Ne}ZbZZ^ewQ`k z7{J6=1Y{MXuY;D?iC37eI6Qm7%+jdEdl`Hd1%R_e7K;h@)wh`s-v(-ry7evc3!7E; zJYNhLi}F*_0Q&cZ0iEeKgEWc$y@p$xge*kGaZP)OUpRPU#vo7SJdt7;>*CXjZ1wsLhD>v8=cYToPDCd8w4GGfX)E!%dW={gS5fKPht%T! z`j2rA)+4fZF-x%H+O*Iqj2}`;k^$=nkzj-pe@oz4|1|CHwOIY|u77dS#Oh<^_1szR z8fp0`&OTswVm!?pn7xIAEAT{!HpAB1ZJe%FP&(D`)g^bwRH?b-m5@)lzW`lFn zkKHh!Om{JTAqAAuVv(N8>y%$k;yxfudAWF?{t_vv@gyU$PkOG&-U=PHs&YPI7*E2Q z#o<&aCZSn1B_`Q3z7^X8o#7YyUFoN;#Z%?mr(WXNwH7$Wj2RUshpCY^(~!ix%)z3} zv>8~(=FO#=Ip+QGKMIF(n!HYUmbo?#Ddzqzf5da7G9m@@8}fcfYqO+w-5oRA!lIOw zzaazvcK1z>q=A>~2sq$dVZzR0Obn}?m~ObI*omcJHCng54XqrE{zf!@b5kEX{YfuR zhQ;N_dO*;Z4g+hhE}JNw8r;^r7US<4!O{@|wI&Sy?bpQE&u;Ntg?vRaY)dv#DK4dF zoi815Qu#y~F8PpCHYpYyc+$89QB7y(vKJQFhjvW#up;I&9T!5$J~_G( z>db`;^utl#2Sa;Xs874%*DO#wR`F0ea@6gIcn;_~$T;QbIVl$EoB3*0jp6~Pgm$B2 z2aXj?px}L$q?g6_95mCbBKNUig=SF9!pX~;^s^-e@|Y!pA}|cH=R@cZaXt*NhJ0nPOlTyQmfn)G-4bj*fS@7#LS* zWSIsCNR$(KfFf^1jml{?odhRDm8N~{Q}e~6(?z+O8*~oHXW)(!DD|MAvcf2L6`@j@ z?aSOR8iP*G?d3ePszau7HWftlqMtz50LR(5BpUxRS#??W`v43@0gb0ZXThj=VFv}L ztv5afN%e}D%au?2Yo|UtEj2$=XLxy74_Ga%YJDQ0^0=|j94!jblAgisF6v0`f=Z3^ zG?0)m?YA8;S(PtpgLE#UM9Z0-2Sj6H1u3v6&3>kO%DCK5P7PAsm!tN-?e+-oDg0)- zojAX8d4EN*fg3s33%nm_6x1<8trK+`q!rkde>s>Yv(iSpoXniTerLI*xO)>e(Z6_i z|DE}x2k!Ncit>ormHYN+z(Jg1?M{U0GlsxEWx0MMMvj16@;wxSSP4r}Vd2K~pscxf z9m;&{hctQRTo5S|JTyXmBLI7DhXxi*KQ*L5P*xY>U@z0trR(nFSouieBO|JFIt?`0 zO|xK8*7t1x#8*L}Q2>Q?>8^nfqO?vj&{tp}W6B;xw^lNc=q-XFB|SJ69~Wv^Pj$3g zW-+RTRQp|lhoop$C@LcN<@pn2NnNXlq_i$h=@?hxCff$~>QpQGFVa(6VO!Wr(ETk+ z;gbZGsg1_sTTTo<3pp}0{5cxDx+@gFFvq8{F19LrcpY%n0L8|Smhzuf^!36Mi9n1e z25-$8N9!dsS$CRpUG9ykL!B36k@P<4&YBwb@94FC&Mn7eb)sjs6q(-|S2m4$iU4v8@3-67&RXi`Yrxia4YKI zrU4`c0B4uNF4dM5L%AT{q`LuEjMO1biE3>u1`sQ{DdYgt=9cnk#aM~1GYI#zhR9k$ zMP;Djn{nR*`nNY0w6o6rhi;_%E=GP@2tw8dP7jUA{DN%88;^4xO|Id@ zVYaiR@%dutS4XOef(H$pM~bjDv7$TgX!GV&VTfku>3?(2X@I{DI!H$aLp2z)5&akj z)XW_?3^YfqbsJ#dv3$38yR15GpJ$35xshzp(=8Xr3r-aeX1qGUyea-cyM1yrymrE~ z+$db4#49`KbN;mJ=QyLxXH~xRBarl~k6ALH`BTbAez(K-zL3)=TS3`hzJx+f6>c8a zO%CvbfFY=CO=4qpoAfxKxXFb6W!;LN_77E6AxLW3G(>o;x{UNDGCwz|{VLPHG<-)V z)@IHKpe-BodJn4Y$DxYEkXD)%x{tD%Gn#iw%VdxF2u=MZor5phMQc6AMwyVQN?;SK zc&FRK>BaWk`cV&{fX| zZNsn{^TF_xb|VsTIJ0m7g9;ESeBuFeP!@8i8ih)sa{PFyq0BbkZ(5#VI5%%jnRX(3 zuq`s``onfPTblPvM^xZCa~kEcLw~0JcNu+UlnfqgpEb4(!I~{!L>S!*88Qvb7>T3Iq zWlZQ>L~O{^Zx$LY$0&Dx^I!mzu2ZkIbtX>^q3vdE>uEP4VuT30-i*ccBcxYP>5P;S zcxNDCHm@qfcAGU`D*KJ)(Q~R4hcrBmPq`sPObN@9`|GB_L|tVQigB)^3O7aBOxjRZ{Tl#&UCclp;kYCX3 zQ*ZchaHMy+bf@6q8_0z7so`39#zO7fN6_T|I}0!-sRKDJ)%SF|*4_%Eg$nslA0e<~ z-T%S#Hdk2A@4^px^}7|jY}a;D*YRV*CAEMo6-|@x6Z#hKatLZZ4&$Ja0^1_HAr0Tv27QDG(aFem)fMEaPGLrW7 z{n~efNB0K=Kl`$uJ`r%AZc~E41nqh#HVHD(lmH6b$II^p3&j2^Yc+`GB;wW zB__OhBJ(33BO}+A{=6k8Pke!YwBrW}vM%_rUp;Z(W)7eYP3~CP*#wY_nAJKbSv*xi zz7{-fTRC6X)s)gKK6hb^Lq6aX5x?<76NXRrtriTy4%l$(Mk24KD}u5W-TH87P7s{# zHhWp4KjAYuEOR7e&(3cNe&Jon0Mm;K?hv1nY8bExR%Hlz0+&%o_}3i}7B<%1TYEjm zptD0jWYzkeWKL@p$X-J63xmU6hzWwe0fSBt61g5j7suB&zc%tQ9BKP#*hH|MqL3pM z<)nNiV7A`iY$mdz`VDTk-3uPKEg-bUt*>1Q_)-MH3CVieR&zlKcZQIzKkkj{RGUCI zP1Zo#$&f$00OjF*dLwYn?OR7P_@I%-#W)mmMsn0Hr6s{hUW^K9Tc(N4#;4gSOd!{I z4J*p{`s>S&1x$FXBm!TulDGGasQ4O3^U_}&)(2LeJ9V|zHz-3=ecNCa&O6DV5DB=N z7TZIx5Xp&<{BE;@Ms~Wpi)lsA8s;tU0+x?)9_9wdD=kFllEtU#zeViw+rqB%wB>;; z9Itlm5R_Wc=GUNyeb)9K?BX9fDh4g8FEK7j%kNl~Pf7X|$OsG*K*DQ2LTjhp558AN zPs<)Fzv6b7DH3k|?|BDd;vbN-M>d%J$THubf|ELK`SO$wigvtjSeZ!RQD3g<1|NeX zcFypAw%zN5k)J*Jiw{+$YBFAljOrTftO_nP-m-Qoim*j(>)poNMgszh1Wy+sHu8(Tw*RlIvyO|Rd&9nTcOxLFbjOm?(h}0$-GX#TcY`cTcjqE4 z9nuZbErKB3^3MLA=Xu}H=jE@RnPtzMm@{YY`}$tjX}xUMfkm{{vC zR8Y3cvQ0r858CZXys)VYrtxkI3BtF=YC`(T?t3+_4da^% zrBLF;KOo@Rr~gloHAfDw0O5NfT1er#ol`>eA4cIz0^2>61IPxYWo5%z)ffKNQq_H; z0cN|c>!S3LJ5{HLiy!v2GN4c6D*pf$dCkBy8ta0=s@H_t>2uW!kZwW1x$*V3+I#-1 z|ANK=XB4Urb8jFO@#4HyhM)icep=-D@#1Xy-78Z-fkGZ6*t=x+&;QOLA*O=pR?$my ze35j;PI2T|Nj& z^lDB6Z%nuGU)36*FlKa>tz!THjS!gB6u8-8*0gL#qwZJf{>vB45y6UI!sqz**w9~Q zIhR*s*e=UyJ+AO?)oWno_oS2Z+Ta5Ez6byiKqIXEmk}{Jl>+91&yGKe6-gWb?g6G~ zHK_ro{X=tz8%n~CRwseM(J3lIXt@FRwutWYRsX8-f8hgtfoF%s{x;uyYFuC=7LQI= zno)aP_P>H*J(5qHDdsQa)Nv*&@^m@dvYV_(n_6jA_>Xi>brCReiB*k(#hyrctT4Oo zf3Z*iD>=OHnvH7z0(bVX1}KwZ2hbQm4oo&MFc29N6Qf!Kj{ENi|IOO`n6mS~ zh7M&%K+|b8hB>wF5i4c!W3BezS2a#lSULH$|958Z#G@L)Y#;lu1mwy(?=B8vMzl06 z@Vo%AYQO&7vUM&SRPeSiL5vw^o16NdOHi5sR%(GiAQT9J!*z3augpwYr@{<2>AwS1 z10nUn#(rlq6u!sxn(*=7Ksp#EfEQ_YTtNn}R!a2(Fhmb<-D!qzh7hqs?5p=ge&&TJ zSZe2}sxgS0ZI(Pf`oVJFEsy7;PrtkTA3P0w4vS|zHGgApsa_>UgKTH$MgDXnH1IkZ z57E+hSGXqOTl01ARAZ6z;wr;1nE5ezXPh)pxuaVUYB~%{NE{wjkQ<92uf9`JQNeEK z>ZOt5S#o!&jIEN7uhgn$b~oh2M{A$r@(RHNw|Ig>bv61A&%ElqFRWM%T2wps05}3r zC%uIP{=M4_zsfHGARM!UiR_`Q=9sFqcMemVlyWUjz>LN?agKMetU;{XOl1vwh9!Wp@r1F%AvNTFD%n9p$A zWLHkT$kwkr2+rn56O$Y>p~0827YdH_sS+WJv-wB)5mfMeg7|oS3`XwbeCGmDi6F!h zfZ?ZSTt=c((J0B}u?|OCJYH^`t}~UIt{{PNAVzegz!NF^Pj4sN8-NK=q`Y2`HaKlR z6?0*EtA|lx?@z4~&Ir@;)^&FMy|+&+%7npP7M7Os`mrwsREBv{rF$&`A1`O$y8;+O z!TVgXpL68|0HDDzx=5SpdAc5FU)xEnQK}MWyFE5C65O}N$g|M0=44@Q9kQ|7c2-sx zF9~o>_8&;g%luP8mD9dJ6UG2~a!PGOkF?_fGW!u5Hb9DNqtQlZOM?OpFm#JN>8P}NvuTGvPr7jIs5J;w8 zQ6mFVqAQdL(`?4X3(~VZ+4p1b#qKQX?>QZqM&;lb=;->4#}8*qV{qL7(rgE&Z*h(G z&ow7lIqXKjsj4%)H9(jCxchi_kjr4a@Eb;Xuir5_1qxJ-)P$Vs{3#y~BM znuSkVq=cx)jgJlHgj#1Y(4sj0@=S`*xhwM7+M$PM(}?HnD9W%M0qj8^ph#fFFV|#Y zdr!bxtIW)EcJ`>q(HRQRY#KS1d~r3pjmQ~>p1Q5$j!nHC9Uba=)vYw7Ovn=}TGEg? zFPLMxpFSKwJoNUY^Tr61oVN@!Q}dF-PM$t*Y)t9d ze=c_EZTXY?Nm4H(!2{k1Oe}(ch05IN=Ib19<)OJ>Q>#|WUE6p&%#hQe4&SX3X!Z#GhDcq z;5$YByt}|u(@UM}XkHb&?6FZ$9U`5h-GX0K++8c}b`kxALuOy9fm;KylObK22sY`D=3wk2Enpc63T!7GBoteWf zM%%y@iI~HP6->8*WM_5!=~zQ)EH_jU%LkxHXc09~tF>#5q`@IzIwYKJIf|ug7+J?C zqCT}psL0qWaJC6W=CS+cU<}?p#2jvGRMw4nemV`5?Dpe#%>-0{xdxMh2Nd=2_<`&M zMeh;ivwBfAJO&xoYx{NMocc(i4!p8B(E}E|Z@`vJXKLz&#N*;u6dys1DI)S^Jx$7< zV(X)Rj8H(=NyG0KT#gscvh3PjX!Q;&J_K`Ab|hsl-^!s$iKWLaAn`TiJ8vpS*R5m| zzmH6Yz#F^av_;i>{t}I@ey#BgN8`-$bbMZdky&u9x98?L_`4F6A`!k*zEToGe+DeB z)PE$kAn{N(bofyzhuYfO7PkpKyf{EAhpX!Z4f9N!NsLpg#^e(>1w8pw8FlJGe#voe zp?_F_|FEk|5x-b}$gxVE_%x1LLx>DfDaC9d)B)YRm$dL57#bSwR!U((Qch;tAX$j; zPm@Hf2F2R3$w9-gd_knth#j_bYA+g}?g_H)vi2LL1S-~<``q4YKsMk8F z=(ffHVAag_-z-RlW8y(F;j2NKuAvzG3)4x_rzj&iaHdLKTd4H=qT81wY@+nO%y0TP z5=&e^-vcVM;%{ocd{O=hS8sA2RYCc=@EacS^9%hVQAiK&nyj`8ka-gkA!MliqRJS4 zJ^0pb_OS;p9^nO_A~x~kxHqnlC=#8trwC6_U7tEaLDbRz_@}z`=K44Im3c)mUF2CA=2&+}QEFB7dc~e?Onwy-6x%|}-DR^g4e!m! zLdBB~%GJ4C9qj=%wo-7(vI{S(*-$GRI*rvtgrgk9w&K8~H#ovwnI1tZa*kXFXGd3o zhkR6CgY>kpJmp78(s8w;G>zR-ovGK;)#6ixU|9l%V1q)uwH92zg$>c?3P}h|QuR9# zJYk*dzn^L7iY*e9|6ky(7Lv zGx;)_h@~Gbo?Jwuj)~wxWFbqB3XP}kS$`$yw;Wcy^s5&Bw%3E4Je1Ny?W&M#5Q%)x zfK5UbfqaU8^ax0zzP91j4CW|TxO*cZc-czH!S^-(8$OqK=Z<)A`Mia)M3SE1`1}?< z!-UIJgMs2mLe3;jw}xFInt)D0x`aEbvJ?d)qq4hME@d_c8iR}wrN_yt zE;4)yW0IT77Zq$GhDOYg{b3V0+}@sck!@Dz@^>cdvKM?mSSL}y`XP9wnh5l+V2{E< z`$b$PN(Ol4=rmi1RrkKX!FjhtqNHkBiM+XE9$EG*79l(n>sgk!n!OLej@&oHhC7R!Oa_`&hus~?F~g@$I>@JXPXWKCLL8dlXms2?Fe^At=TQ#)6O?V zN{{m3{x6oTe|j;H=+NsSg*;K85s)pz z0pFrn@AUQIU=7axFg;;}2_1qBCT6Z%G**vqjQ_g6 zpsv@ouLDKaot{a4{AMrl^e3R|n`l+< zlr!x{?Q30>p|4-@ERsb+Y0R35kkI2bv?i_X1tW!_{$>&v9ARB1y(*UeY)jq@6BT*L z!w@9LJ3m3@*_?{o$g&M9WKfr%pS-Q)_NE;&HQ3}XxuNe|W?v9Hd5(HHxEcY2!4ezS z&()g^iVF^4;!0+eE66Vrug<4!U~z7h^X?~$CaLf~6C|A(ZSJs<>51g|qm$Q&$KYaj zO{fG+Nn(-K_WF(7Pxg3X_CeNq66HP`v(RmpMnpWT4jGr10zb?OcxF zQVOPRbdlDGprD-{Cbf7^Oz-PX;bj!Y*y$d+)ekuuiFj6Ws)Qe^`t_!HzVlq@pK@8f zo5)C7tqR5kb@uqwckM6FEtDH-Tx_-XOKUJe-LL8FVhHI4zbUw$#|vhdA?^4Ndf|bFxj{Y z{4;Gm|TjMW@Yc zbKhy2unReQT_Jmy7YFVjnI4>|gauR|kUFY~@z#q0Z$a$TIaymbdM+JG=Zf1OBaZnt zTs;(Z6^an6lUzx-2b?ezbo@E&C>$hAvk_>zSqtp_4WX;V~)Z9r|rY}3OBeR>5vs_`cJfC#3uThb-_4pW7Gx_S% zL=$!}kiLtvWi4q0RmOr2gU9~LBMl+eqF#>yPnqZ^Tj;n7kTj@?;DN0yJ=4@_=|y7r8akW3Eq(;s?^J+9TAT4S92;}Y=wm`)O#lOO0*OXUrJq#P)RC( z;g@<;Ti2Bd1%qRz^~$m8#}?|mh}cZgSgjdH4I^c|_xsN~K96EBk&b=T#ap1~#b&JnNChL4s|eZ7MxV$EYMAa$H|pZj_xHwanU2N@!a+B;{cIrG@1o6Gcw|u zhWUpMeW#01eUK^JLXW#DY=B!30VtKI?5l%M-cev~KE*B+t7R-CWiY(_mj#&zUY2vx z2V|~>*EOb5k%uCS)mw%gd7^<#Xr> z(Us}xCNxqgmfp$zopZ6RHq9+4B+DJ|X(@o4PBg7EA(3rwTwq&;b|#&)Cw)&Krw=2% zem^0>bFNbNrPaz79SLF*j4#QS;3`zG`9XL45^D$p+xQ&f56)PkxRvE@Qjjg5qA-p8Uv`jukx_-u`N&bVj2o)Zan2u1>;^tl)cg>vYx(;WkL75Q-gTdraVM&x~;2;VH&7%iu_ph9O*WB`rS>VWUi-*#bBlLn(x z=AUpSH4wJku9EC?U8996*JRE97yNaGMKP^>XH(K$b;*=_$r&F#h0_p=EBi}jcQ=A&2BMRIQh%?B(7QP*@%m3{g)i?M-K}NtH@?ZT4wNA)kg~} zOIj8d1l_Bdtw;olGyYIqb#CHH<3dZTM{QZPd{xV?R*R^uKGHE^{QP0NCU|fw(2Sv> zz^}@2rWy2)`;ZAnoavi0P4|!8mKtLJiujgMBW`-;L@0EVHf>EU76i9+cS`_VCex@n?& za+Rrvf^Ir<n`V&y)I=92Vt%#HS?DHW!f;}fR|pL}Y&8mCJe42_QT2jZrE4pJu^ z@}<;+E3s+)e5IHR6aIv)`Vt*0Xnw&`i#2Ugxx*YJ_Lc)$Lp3|0W`sNJUuzFQkGY)5;fx!8!fphb zPJ==w-7l6qMYZrh6`NcJf(3^X4C0n&W6X+wav4vIpP8Qx&Y4!Y4*DtDArS`S!wUR~ zg~>Mb#7y=W^q?-w>^e&21RlHn%2zK#@)d2{s%G`kb9>hQ&)Nru2|1{t<=wGLPH25f zjrMjGCZlLAYCkS;QJV4+-+*_h9Dxva+IRq666kc8at&|^p%Jcf4>3MTRiTZu*hcPM z{c@Xqu&`ZugHD$T-PeSJ_b%r-TNQqKR8d4v2gYW<81P#(%`_QAs`kQTHZj#x2c%U+uL0H~*t*=J~nLn3qOWW1CmFPoTuPLC2YQ zpaY;||A{=Fzh4M5Ruo@@B`o`!Vg3tefDpp0FC6O&;CyndWvmgEQ~O@@ig4X)2TS*U zrb?Fw7Cz?wsyDA(DD3eo6nMfjzkm7iY{VYO8qIqK-|Y`PhXYS~A2b}BUMwCk!mGh7 z=%o_{pXJzGR$E-Z0LBQ3y1X;6=MKG}6`GaZe8Dhe81QBa?ZXykts1&HUe;L1necMv z`FrCgp>y+VK=U2-$`gvw{jQhpbNT-r2~rM2Fqa{~d*;Q2=#4=Xc`6u8zMY-a>Tt5! z3d69LU*i#a&lf9)k^zwty-hF3?m;jnAr@7na_Eh0%mp(%M+p7y8)IT zCfof{U#<>4JKpL=@q}6>3^S}WWNbs7+nHQt5tYZK@ycE<58?s70JvJPcLV?vZ1@y5 zkM#s$1hp&%%pT-8R(&OkswFn~yEx{Y_~EUTTgUYe`++DX&NvD|`~=Z!(ttZ3fpxMp zzr?F56&Iezqu434@xoiGB>aUS)YyNNo;ScvQHVb0)!Sr56Zu9N?6YD7peg2>T}*D-O!A;;fSV_lt}5#tTV&;WCD! zUi#O@q|eF%9@rK3ScQ9Ph!w%W)JVF?b&s7<%$fHBsseU-$?p&;8%LfGxVG8M6h#3F z_1A_0zZPpbUe)AV1f5m*3}}5&YGgrCu7}0%jOj|4z5@0Ppwo^E`e9I~TgC)Ow>{2& znA*`VW4+_=ecFMTeZ71HQw0(NmxtU`nM^35ne`|~U!NmCZyVZdq+Yb)%QsJy#t8@X z>Nl!rZdYBf6(fB>lmwD2JRhs*&2W{A=vAch_60soF|x8=p3XA0dkuS1GXSq2K=60} ziiIY9vLe%epEV@c1b85^Lsue}p?$|w65Cd);b9mg-{UF9Qa0!hfGpy$$#{ns<#?;X zj|LxCE~8d~wtjicGLM=yA&kJPKoZ9+NVLj>F(LB#3xw{#t0B>)mJ4l&`y3*#oc*hX zC#c8Sy`%e|>*HCz7m|*AL1Nl?WpF?b*}wRJpGKqBC_pz7FD?7ou-SpEWfXm6(T_A} z?eVqX?5@HrOJIulU4DAI`+*9LtX-q*O7WomyifVrOsa_Gcfu+FB-pniOZr)w8z8Br z<A8_xqK!$c%a1sM}OGy&+`-(Mw`7^tJ1R+^PN{Ky(6{aTd5C9ua1 z0Q<4DVxCLXl4kjH6?qkzWb?NMv+nT@Y+6PI-X1+*0Z!*VMYj>W>Y83WHWX@xded$; zs>k-DPmdkjf>rD1dcpPv2=o5}^6! zB7FbRzZ#Q^eA}RI-{bPvCFx8u_%l_dzUMRhq{IAAdW!jLSo{ z#6@;H+Hdgnb(U9#!7n-PPQyEt%WAwSYi3w?<=(i2dzA_VgZUlsHqnQ^6&us~l+3sBz?KhtSzc!uo)*PODgRait z0;M=6-+3iWUdZ@v{+dI`sp(Zv!#TLBuaRKg7hTT25Rtzr}LVyrpXrX?Cc#;!@da%Z0ui-pZcM71mNy*8do0@o=*=^-A_QgiHfK;6A&$V^|ZXTX9 zAdzgcaDm22A>U&D(gt*S5vvmr-fwNOl;w~ekS&@}D@u094SVasz=c!S+Y|jv1 zo>9hBF1qK>8V~%LLb|<=SafbgEwAbcZp8b^LoQ}`Uk|lwz#MV4LBVigM!p|1l~aWm z6871i+oN1cJmaNBFdmGolWFmJV&u1Y#1FW6!Yq7XI}l+d(5-3;7Kl3Rd`*tMe);6A zYGBacJ}ZY0FWLPUEz;$O?yDJ2M>jX_;fA8y)?J9SiUe;UIRQam@YcHos&TCnONICE z53pJyM9JfvEI+M>uBhX_3ulwGP=zN9HCqA=i(7vrUSxE1o4MjJv$B#>XhsGOvY@~zsfA#M9GPD92bn7d z`oL$A52~iyd77Y49wZpnAEohQrmD;T{4i~1_HPr3{1Px)_vTa7GE4eCw|oa<*iE#| z$J-Uw4qiWn#jNia5s%PY=8Le`VT}d%-0IxMK{X|)PT6fcb9=u9G)n_d4@sv#;bkPH ze9Jj}sYo1nlgQIgEZul)gl!J|C zhzh+!+@5=+AT~a}tJ1Ne*_>wvARUC_jklW9rPVj!QzMhOJnSJaV)}r z5^;sfgx#qTz@w`z&gA!3fBA5}C7Z`{%@-DJV|r5EiQ>d07r&FLv=zjtf4=nfy5GX$ zoYOR!4JP|@f*)Lu(}l26gK#%K^PR_F@X4r;OXM;^HB~l(JY|!Qq2g}f@b=^64p1eU zaKz5uyIrE+`y%b1;zB=Va56GuFINdy&|m=96l@&y-atJHC|d# z5_&*eiCHWn;#m(AOD;O`Yi_vbpB}Yx(j7_#I~A-{=_;o{UYIY z4;@PG8IJ#pH`VQ}l&vHJZUIsu2Y((J$JO{Vlz3Z!O%1M#jQ%lW7BY5osnE%MZ-YsNj z$Lzb>Md1#w(5aZR3=W-@*!fOXilXwoc5HaGM;spfcao;p8SI^jhP6R8p&z${#FUq> zdu~)*OamvDKvT9dx%F$V<%t}tFCeQiNYt@i2xW73ulkQiU?gQC>+CYiMo@aT2=UpQ z7LQ-HT{5T66MopHqNRWQ%Cy#&{U$B2Qp~4Qk}9WX&E*=G6qr@$7RK-M z0=^ljZn(5D?hZeZL6uoXyUt9I-Ts|2j~$Ps)RU%@S$@)^e1TM{LQlKi9q6=R=-V&vs162Am!fW8IO9cfF`Zf z4yR8C>|KtX2i2A{Q*IWjBDM0Jvvq*1o3GXer&c?gM*zCSJr>4tP5!_GgeGjGcxQReb2Z`35^K<*xq^*(eD1D&EpVd zQAKnsuYO#17pWMfj>a54o!$54S#3Ymf`@?vxGU*J0pp$}_^U@fkWHqzN$W)2g;oNbC zd^#w3QNC=8{qun5>qz?I;-abciT<$2#ru9)hQf%UO>D_wq4A=+;L0w_XtK$%-iKF@ z%R*stHLxa34MHtdcKvE(3Ycs}WM#cXA>U{|fv5FlcWUM?DW*&a?FfJO>WlNdVD|!@ zSyu8@xV=s*A1cA%z;?{|tCbQ}CK+J9t;EOOYGPh*PPtocb)PPLheJG>uMpmgVW1CB`D{>)jOL=GLln3Y!cr zDzG_rHog<8%VRax4cH6gQc%QZegj9yBUmg=X&JuP|FTEqAEICw=3wQ>@>4w?w~iJl zgQeF|Q5Vq4WLGOkYhA{;PMYZLesV1L`Q668g8htb9n;nOcTBVas?&aAYisb1hProI z!bgaopBM^-{<*yD|G}5LBk?UGPs%zU82iwWaZKKuu) zcQHpLz8(S<`D(%!7tD-UrQB_dYvG6N)U8J)>-h(Fzzcu0i2P`!8gw z!%DWu*LXyo$EF)p9BZX+avoXS(8YRxL7z8YaU_QVjpPiB>Fc$?=TE?Uq;kgeQ>KxZ ziW!Ps=GxpbwUfE-3x5hV6_Y+C`0Vhtz4z5zSSzzl6lR|Isc7|)iRUiuOrQ8*5QV&R zg7s-qDS27dqYxgPqBmV|65jJcoX7jot5IGxj*nBJQq7hvEVthvxS*gA{OPmpBV2x% z-tXa_4JP&)t+l8-)fc|^x!W6dgm1*oMU}0)oc#vL^x}9Z=GY%QLKcX;wP)&Xl<xw^+(h9iIBMKzd&SY-A z?&`zJ5}{?J)&2H+GJjld_T9TCZss4cpPk#B#AZB@q6hq&#qP}UN0DP1w^l!P-aV9{ zD4)(ZUK!}yi#uk+d0-9wXw#dUCo|!k`%-&^{sAswdPmj&NX{wA*wQ_z{Hu=~6O963@ zd>>Ws)JaGv(iB;Z$v`v_+hTcg3N9{uwWN4xqh{S#qx|CHVpL4b-SK*cHBq=9Z_>>E z&XiVFjXl!TT+-B(;DibA`r9D5Hrz6x!O@sJBT9pQf5Rz80xo7$U|S04T>elt8Q>W8 zzqg>KXR%ab;23Nh3$_fzZ6;&@J_ChbzZVak{rjM*2RjCA^V0(hC#fa%RN(W!6RgU^ ssg!N-zuSqxY=LE}sP=DR&xn6f92-w43?5B=UjTpdGAhzFk|v-358!93O#lD@ literal 0 HcmV?d00001 diff --git a/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.excalidraw b/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.excalidraw new file mode 100644 index 0000000..c6da98c --- /dev/null +++ b/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.excalidraw @@ -0,0 +1,717 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 451, + "versionNonce": 168468737, + "isDeleted": false, + "id": "vuj_5TZpK_1z0jFFhNfGd", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 552.625, + "y": -21.25, + "strokeColor": "#000000", + "backgroundColor": "#82c91e", + "width": 111.00000000000003, + "height": 36.00000000000002, + "seed": 126697647, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "hC97PmiA9GpSyZPfCGdGv", + "3SxvWp5giaQFb8YaHyiTB", + "QN25t4_XOP7-HRxAuV7Y2", + "DhBK1onobgdtoteMzJ3RY", + "EVuGS3oXm7jYXCy8DsY2V", + "7-zXi5_a33f7uUIc7_j_9", + "OWrGRSWgDTVld8aCb9xUP", + "E-FoU4T3WQM9Nik2oNqPM", + "K5G4weFlvtjSkRkqHREH2", + "szZiIxpZJ5n5knUoyU-Tt" + ] + }, + { + "type": "text", + "version": 222, + "versionNonce": 1781312399, + "isDeleted": false, + "id": "2q2EQ_ViKHcURw7sjKOjC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 562.625, + "y": -18.25, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 80, + "height": 27, + "seed": 1936172481, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [ + "QN25t4_XOP7-HRxAuV7Y2", + "VGI_QGiy6and7H_GNB7Pc", + "nGXxbhYzARGmuHcQu1X-m", + "K5G4weFlvtjSkRkqHREH2", + "szZiIxpZJ5n5knUoyU-Tt", + "HlljKhXWNfocN_Xdp-EKu" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "vsnprintf", + "baseline": 20, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "rectangle", + "version": 727, + "versionNonce": 485546209, + "isDeleted": false, + "id": "VvtLW6ETSDq4r6KDxEG6X", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 611.125, + "y": 71.24999999999999, + "strokeColor": "#000000", + "backgroundColor": "#15aabf", + "width": 296.99999999999994, + "height": 36.99999999999998, + "seed": 345985743, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "hC97PmiA9GpSyZPfCGdGv", + "3SxvWp5giaQFb8YaHyiTB", + "K5G4weFlvtjSkRkqHREH2" + ] + }, + { + "type": "text", + "version": 564, + "versionNonce": 164520367, + "isDeleted": false, + "id": "Fey7INDzntjvbQ9eQBIMQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 618.125, + "y": 76.24999999999999, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 284, + "height": 27, + "seed": 97469857, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [ + "EVuGS3oXm7jYXCy8DsY2V", + "_vUFgioABe191JEmcUjY2", + "z7YM5rJ0BgMPL8eaXkxtS", + "K5G4weFlvtjSkRkqHREH2", + "uDp2m25cLFz65IObaCZFH", + "csn6UN07U24qeQkjZDyCp", + "szZiIxpZJ5n5knUoyU-Tt", + "HlljKhXWNfocN_Xdp-EKu" + ], + "fontSize": 20, + "fontFamily": 1, + "text": " format_decode(fmt, &spec);", + "baseline": 20, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "arrow", + "version": 251, + "versionNonce": 646848673, + "isDeleted": false, + "id": "PzEr0ucG8P_641zc2UNvy", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 578.625, + "y": 136.75, + "strokeColor": "#000000", + "backgroundColor": "#82c91e", + "width": 0, + "height": 0, + "seed": 1978278127, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 997, + "versionNonce": 168105153, + "isDeleted": false, + "id": "vaX407z91ruzHoq69oXlN", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 666.125, + "y": 166.25, + "strokeColor": "#000000", + "backgroundColor": "#7950f2", + "width": 94, + "height": 37.00000000000002, + "seed": 1308092801, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "hC97PmiA9GpSyZPfCGdGv", + "3SxvWp5giaQFb8YaHyiTB" + ] + }, + { + "type": "text", + "version": 207, + "versionNonce": 812907617, + "isDeleted": false, + "id": "K0JHB7CFCPeVZt796kx4m", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 675.125, + "y": 169.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 69, + "height": 27, + "seed": 485894927, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "PEkbChJpyoyo7kyU5mOEJ", + "uDp2m25cLFz65IObaCZFH", + "csn6UN07U24qeQkjZDyCp", + "6VA_aq8-ThvWPAmCT491Z", + "0wEPaK9Ydjv8-rscbi7La", + "9cdVHpEaM2ZzfxipN65dl", + "NeiHJk5dNicrCeJe8QWeL", + "v7TCqcSjqbKpkVGQPuVq-", + "jPYy7G0WtOKr7-pRSdtXv" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "pointer", + "baseline": 20, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "arrow", + "version": 466, + "versionNonce": 105978049, + "isDeleted": false, + "id": "csn6UN07U24qeQkjZDyCp", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 628.125, + "y": 107.49999999999997, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "width": 48.98127691785427, + "height": 74.60905669308931, + "seed": 1965101409, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "startBinding": { + "focus": 0.8845543560970208, + "gap": 4.249999999999986, + "elementId": "Fey7INDzntjvbQ9eQBIMQ" + }, + "endBinding": { + "focus": -0.1623781111499215, + "gap": 9.018723082145698, + "elementId": "K0JHB7CFCPeVZt796kx4m" + }, + "points": [ + [ + 1.2453192294635667, + 0 + ], + [ + -11, + 70.62633390758259 + ], + [ + 37.98127691785427, + 74.60905669308931 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "lZFhRImEMQ3M986x80hz3", + "type": "text", + "x": 669.375, + "y": 138.125, + "width": 326, + "height": 22, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 909898031, + "version": 143, + "versionNonce": 1692849313, + "isDeleted": false, + "boundElementIds": [ + "csn6UN07U24qeQkjZDyCp" + ], + "text": "%p* 格式对应的 case 为 FORMAT_TYPE_PTR:", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 16 + }, + { + "id": "RlKwBoZIUM1w6rmZd7JKc", + "type": "text", + "x": 614.375, + "y": 45.125, + "width": 109, + "height": 22, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1352285505, + "version": 242, + "versionNonce": 1628897775, + "isDeleted": false, + "boundElementIds": [ + "csn6UN07U24qeQkjZDyCp" + ], + "text": "解析格式串 fmt", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 16 + }, + { + "id": "HlljKhXWNfocN_Xdp-EKu", + "type": "arrow", + "x": 573.375, + "y": 16.125, + "width": 41.00004383696145, + "height": 76.03127348853828, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1260647247, + "version": 106, + "versionNonce": 604418415, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + -0.35555165893675955, + 0 + ], + [ + -4, + 76.03127348853826 + ], + [ + 37.00004383696145, + 76.03127348853826 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "focus": 0.7037386910089231, + "gap": 7.375, + "elementId": "2q2EQ_ViKHcURw7sjKOjC" + }, + "endBinding": { + "focus": -0.1782424806324638, + "gap": 7.749956163038519, + "elementId": "Fey7INDzntjvbQ9eQBIMQ" + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 1094, + "versionNonce": 1286348463, + "isDeleted": false, + "id": "w4vaS-VdpyHX2qwZe5y9h", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 717, + "y": 249.5, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "width": 193, + "height": 36.00000000000002, + "seed": 492684271, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "hC97PmiA9GpSyZPfCGdGv", + "3SxvWp5giaQFb8YaHyiTB" + ] + }, + { + "type": "text", + "version": 263, + "versionNonce": 206861761, + "isDeleted": false, + "id": "nvMvDX8bB6w4g2pgYi_Dm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 724, + "y": 254.75, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 169, + "height": 27, + "seed": 1128527489, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "PEkbChJpyoyo7kyU5mOEJ", + "uDp2m25cLFz65IObaCZFH", + "csn6UN07U24qeQkjZDyCp", + "6VA_aq8-ThvWPAmCT491Z", + "0wEPaK9Ydjv8-rscbi7La", + "NeiHJk5dNicrCeJe8QWeL", + "jPYy7G0WtOKr7-pRSdtXv", + "kIReuR8vhFrfFjHSsZVnk" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "restricted_pointer", + "baseline": 20, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "id": "0-fj6ulRMZLvprCFLQ4MW", + "type": "text", + "x": 722, + "y": 225, + "width": 153, + "height": 22, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 2103725313, + "version": 241, + "versionNonce": 956630945, + "isDeleted": false, + "boundElementIds": [ + "csn6UN07U24qeQkjZDyCp" + ], + "text": "处理 %pK 的格式输出", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 16 + }, + { + "type": "rectangle", + "version": 1185, + "versionNonce": 1428371119, + "isDeleted": false, + "id": "UZxawJJN_y3nWDp6dsV-j", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 718.5, + "y": 334, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "width": 122.99999999999999, + "height": 38.00000000000002, + "seed": 773776257, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "hC97PmiA9GpSyZPfCGdGv", + "3SxvWp5giaQFb8YaHyiTB" + ] + }, + { + "id": "PwoS_-6fqsrKbbYynTeMS", + "type": "text", + "x": 730, + "y": 339, + "width": 84, + "height": 27, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 134711727, + "version": 26, + "versionNonce": 1671275151, + "isDeleted": false, + "boundElementIds": [ + "H7yXoQMjHQsk8wztsflUs", + "V7nZDgYcta7FTCUxRBwex" + ], + "text": "ptr_to_id", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 20 + }, + { + "id": "-kLGR2YfcUOXi3OuXlMng", + "type": "line", + "x": 685, + "y": 206, + "width": 0, + "height": 146, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1444735983, + "version": 36, + "versionNonce": 464942177, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 146 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "kIReuR8vhFrfFjHSsZVnk", + "type": "arrow", + "x": 686, + "y": 266, + "width": 33, + "height": 3, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1686847553, + "version": 40, + "versionNonce": 1708880047, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 33, + 3 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "nvMvDX8bB6w4g2pgYi_Dm", + "focus": -0.4195278969957082, + "gap": 5 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "V7nZDgYcta7FTCUxRBwex", + "type": "arrow", + "x": 686, + "y": 350, + "width": 33, + "height": 2, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1746825121, + "version": 27, + "versionNonce": 1679014401, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 33, + 2 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "PwoS_-6fqsrKbbYynTeMS", + "focus": -0.16902738432483475, + "gap": 11 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "w2fvAiJpVbE7FRnM2fkPJ", + "type": "text", + "x": 721.5, + "y": 309, + "width": 159, + "height": 22, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1643810209, + "version": 313, + "versionNonce": 325934305, + "isDeleted": false, + "boundElementIds": [ + "csn6UN07U24qeQkjZDyCp" + ], + "text": "散列化 %p 的格式输出", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 16 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + } +} \ No newline at end of file diff --git a/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.png b/study/debug/filesystem/procfs/kptr_restrict/kptr_restrict_for_5.1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea21706715154c35794d69c1c1c4e41231ab1e0 GIT binary patch literal 49043 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

-)?_1nBQcb(1m8yh;ST(!uj=}%y4kfX_ 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 literal 0 HcmV?d00001