免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2887 | 回复: 3
打印 上一主题 下一主题

问一个access_ok的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 14:53 |只看该作者 |倒序浏览
在LDD3例程scull中有这么一段代码:


        if (_IOC_DIR(cmd) & _IOC_READ)
                err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
        else if (_IOC_DIR(cmd) & _IOC_WRITE)
                err =  !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
        if (err) return -EFAULT;

arg是ioctl的附加参数,书上说可以是整数,也可以是指针。并且整数可以直接使用。

按照我的理解,只有当arg当成指针使用时,才应该执行上面的代码(access_ok函数把arg当成指针)。
现在问题是,为什么我把arg当成整数使用时,例程也执行这段代码,并且不报错呢?

论坛徽章:
0
2 [报告]
发表于 2009-05-21 23:18 |只看该作者
能否说详细点。 书上哪一页说ARG可以是整数和指针?你怎么把它当整数来用的?

论坛徽章:
0
3 [报告]
发表于 2009-05-22 11:56 |只看该作者
LDD3 page143 “使用ioctl参数”小节的第一段话。
谢谢!!

论坛徽章:
0
4 [报告]
发表于 2009-05-22 22:28 |只看该作者
"按照我的理解,只有当arg当成指针使用时,才应该执行上面的代码(access_ok函数把arg当成指针)。
现在问题是,为什么我把arg当成整数使用时,例程也执行这段代码,并且不报错呢?"

我猜在ACCESS_OK函数里面也许会查下ARG是不是整数,如果是整数就直接OK 了. 所以不会报错. 你可以看看ACCESS_OK的具体实现.

个人理解,仅供参考
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP