关于get_ds, set_fs, get_fs函数的使用

这篇博客介绍了在Linux内核编程中,如何使用get_ds, set_fs, get_fs函数来处理系统调用时的安全访问用户空间参数。通过set_fs函数设置地址访问限制,get_ds获取kernel的内存访问范围,get_fs获取当前限制值。在进行内核到用户态转换时,这些函数用于确保地址有效性并进行检查。文中给出了一个使用示例,展示如何正确使用这些函数进行文件读取操作。" 133677081,11183300,Matlab CNN-LSSVM时间序列预测,"['Matlab编程', '深度学习', '机器学习', '时间序列分析', 'CNN-LSSVM']
摘要由CSDN通过智能技术生成

更详细的介绍可以参考百度文库: https://wenku.baidu.com/view/ae7f2e7576c66137ef061903.html?re=view 

 

在linux内核编程时,进行系统调用(如文件操作)时如果要访问用户空间的参数,可以用set_fs,get_ds等函数实现访问:

get_ds获得kernel的内存访问地址范围(IA32是4GB),

get_fs是取得当前的地址访问限制值。

set_fs是设置当前的地址访问限制值

进程由用户态进入核态,linux进程的task_struct结构中的成员addr_limit也应该由0xBFFFFFFF变为0xFFFFFFFF(addr_limit规定了进程有用户态核内核态情况下的虚拟地址空间访问范围,在用户态,addr_limit成员值是0xBFFFFFFF也就是有3GB的虚拟内存空间,在核心态,是0xFFFFFFFF,范围扩展了1GB)。使用这三个函数是为了安全性。为了保证用户态的地址所指向空间有效,函数会做一些检查工作。如果set_fs(KERNEL_DS),函数将跳过这些检查。


下面是典型用法:

//#define __NO_VERSION__
//#define __KERNEL__
//#define MODULE
#define __KERNEL_SYSCALLS__
#include <linux/uni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值