access ok linux,使用linux宏access_ok()有什么意义

在Linux中,access_ok()宏用于在执行copy_from_user()或copy_to_user()前检查用户空间指针是否有效。文章探讨了access_ok()的作用,提出在已知设备文件描述符有效的情况下,是否仍需要这个检查,以及VERIFY_READ和VERIFY_WRITE标志的含义。作者对access_ok()仅检查地址是否可能在用户空间中而不过滤无效指针提出了疑问,并讨论了代码中两次检查的必要性。
摘要由CSDN通过智能技术生成

我一直在做一些研究,我对这个宏有点困惑.希望有人可以给我一些指导.我有一些ioctl代码(我继承了,没有编写),如果access_ok()在继续从用户空间复制数据之前检查是否它会做的第一件事:

#define __lddk_copy_from_user(a,b,c) copy_from_user(a,b,c)

#define __lddk_copy_to_user(a,b,c) copy_to_user(a,b,c)

long can_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

{

switch(cmd) {

case COMMAND:

if(! access_ok(VERIFY_READ, (void *)arg, sizeof(Message_par_t)))

return(retval);

if(! access_ok(VERIFY_WRITE, (void *)arg, sizeof(Message_par_t)))

return(retval);

argp = &Command;

__lddk_copy_from_user( (void *) argp,(Command_par_t *) arg, sizeof(Command_par_t));

所以代码工作正常,但我不确定它是否需要.第一个问题来自access_ok的返回描述:

如果该区域可能可访问,则该函数返回非零(尽管访问仍可能导致-EFAULT).此函数只检查地址是否可能在用户空间中,而不是在内核中.

所以这意味着它真的什么都没做,那么确保我们检查的指针可能在用户空间中被初始化了?既然我们知道除了用户空间调用之外我们不能进入这个功能,除非我们为这个设备打开一个有效的文件描述符,否则它不会发生,这真的需要吗?它确实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值