pub struct UserBuffer {
data: *mut u8,
len: usize,
}Expand description
用户缓冲区结构体
Fields§
§data: *mut u8§len: usizeImplementations§
Source§impl UserBuffer
impl UserBuffer
Sourcepub unsafe fn copy_from_user(self) -> Vec<u8>
pub unsafe fn copy_from_user(self) -> Vec<u8>
从用户缓冲区向内核缓冲区复制数据
§Safety
- 调用方必须保证
self.data .. self.data + self.len是用户空间中有效且已映射的可读内存; - 与目标内核缓冲区不重叠(此处目标是新分配的 Vec,天然满足);
- 若无法在此处静态保证有效性,应在更高一层先做页表/范围校验。
Sourcepub unsafe fn copy_to_user(self, data: &[u8])
pub unsafe fn copy_to_user(self, data: &[u8])
将内核缓冲区数据拷贝到用户缓冲区 超过用户缓冲区长度的部分将被截断
§Safety
- 调用方必须保证
self.data .. self.data + self.len是用户空间中有效且已映射的可写内存; - 与源切片不重叠(此处源在内核内存,通常不与用户缓冲重叠)。
Sourcepub fn range_sane(&self) -> bool
pub fn range_sane(&self) -> bool
TODO: 运行时做一次“粗略”范围校验(不保证已映射,仅做地址区间与溢出检查) 建议在 syscall 层或结合 MemorySpace 做页表级校验。