Linux-xlnx内核3.17升5.15 ARM下get_fs/set_fs报错咨询
核心结论
- ARM架构在5.x内核版本中已经完全废弃
get_fs()/set_fs()/get_ds()这套地址空间覆写接口,5.15版本下没有合规方式可以通过引用通用头文件重新启用这组宏。强行引入<asm-generic/uaccess.h>会直接和ARM架构专属的uaccess实现冲突,引发大量重定义错误,完全不可行。 - 这套宏本身就是内核历史遗留的不安全hack:原本作用是临时修改线程的地址空间校验边界,让内核态可以直接传入内核指针调用原本只接受用户态指针的函数,存在大量越权访问、内存破坏的安全隐患。内核社区从4.12版本开始就在全架构推进移除这套机制,ARM是较早完成移除的架构之一,不存在“合规访问线程地址空间做校验覆写”的说法,社区删除接口的核心目的就是禁止这种不安全的编码模式。
适配方案(针对你贴出的文件操作代码)
你原有代码的逻辑是内核态打开文件做操作,靠set_fs(get_ds())绕过VFS层的用户指针校验,这个场景在5.15内核下有明确的官方替代实现,完全不需要操作地址空间:
- 删除所有
get_fs()/set_fs()/get_ds()相关的代码,不需要保存、恢复线程地址空间状态。 - 打开、关闭文件仍然可以使用
filp_open()/filp_close()接口,不需要额外修改逻辑,注意filp_open的第三个权限参数类型是umode_t不是int,改对类型避免隐式类型转换警告。 - 后续如果要对打开的文件做读写操作,不要再用
vfs_read()/vfs_write()(这两个接口仍然会做用户指针校验),替换为内核专门提供的kernel_read()/kernel_write()接口,这两个接口直接接受内核态缓冲区指针,内部已经完成了地址空间适配,不需要手动绕过校验。
适配完成后的参考代码如下:
#include <linux/uaccess.h> #include <linux/fs.h> struct file *file_open(const char *path, int flags, umode_t rights) { struct file *filptr = filp_open(path, flags, rights); if (IS_ERR(filptr)) { return NULL; } return filptr; } void file_close(struct file *file) { int retval = filp_close(file, NULL); printk("file_close retval: %d\n", retval); } // 替换原有vfs_read调用 ssize_t file_read(struct file *file, void *kern_buf, size_t count, loff_t offset) { return kernel_read(file, kern_buf, count, &offset); } // 替换原有vfs_write调用 ssize_t file_write(struct file *file, const void *kern_buf, size_t count, loff_t offset) { return kernel_write(file, kern_buf, count, &offset); }
适配排查注意事项
- 所有需要绕过用户指针校验的场景,都不要尝试自己手动实现地址空间覆写逻辑,内核已经为绝大多数常见场景提供了专用接口:除了文件读写外,如果需要在内核态操作内核缓冲区,直接用普通内存拷贝函数即可,不需要调用
copy_from_user()/copy_to_user()。 - 头文件引用严格遵循规范:5.15版本下所有uaccess相关接口只需要包含
<linux/uaccess.h>即可,不要手动引入<asm/uaccess.h>或者<asm-generic/uaccess.h>,内核会自动加载对应架构的正确实现,避免重定义错误。 - 针对Xilinx 5.15定制内核的特殊情况:可以先在内核源码的
fs/read_write.c文件中确认kernel_read/kernel_write的符号导出状态,官方维护的linux-xlnx 5.15分支默认已经正确导出了这两个接口,驱动可以直接调用。 - 不要使用网上流传的手动重定义
get_fs/set_fs宏的偏方:这类实现要么直接跳过所有地址校验存在严重安全漏洞,要么因为ARM架构的thread_info结构体已经移除了地址空间字段,直接触发内存访问异常,生产环境绝对不能用。
内容的提问来源于stack exchange,提问作者selim
相关产品推荐
相关产品推荐

