Repository navigation
[drivers][block] prevent arbitrary kernel write via BLK_PARTITION ioctl on RT-Smart - #11981
liangzhan5 wants to merge 1 commit into
Conversation
…tl on RT-Smart Signed-off-by: Zhian Liang <liangzhan5dev@gmail.com>
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
📌 Code Review Assignment🏷️ Tag: componentsReviewers: @Maihuanyi Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2026-11-03 15:51 CST)
📝 Review Instructions
|
|
将lwp_self注释掉后在内核态测试(模拟用户态) 测试代码 修复前 修复后 |
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
issue:#11952
RT_DEVICE_CTRL_BLK_PARTITION直接将用户态传入的裸指针作为 rt_memcpy 的目的地址,导致非特权进程可实现任意内核写。
rt_memcpy 执行完毕后未更新err,所以即使 ioctl 最终返回 -1,目标地址的内容已被更改。错误码与实际情况不符。
(RT_DEVICE_CTRL_BLK_GETGEOME等似乎也具有类似的问题)
你的解决方案是什么 (what is your solution)
在 RT_USING_LWP 条件下,通过 lwp_self() 判断当前是否为用户态上下文:
是用户态:先将分区数据拷贝到内核栈临时变量,再使用 lwp_put_to_user() 安全回拷至用户空间。若用户提供的指针非法,lwp_put_to_user 会返回 -EFAULT,且不会执行任何写入。
非用户态(内核内部调用):沿用原有的 rt_memcpy 路径,修正原代码中遗漏赋值 err = RT_EOK 的问题
请提供验证的bsp和config (provide the config and bsp)
/rt-thread/bsp/qemu-vexpress-a9
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up