当前位置:  技术问答>linux和unix

ioctl中copy_from_user导致系统crash

    来源: 互联网  发布时间:2017-03-31

    本文导语:  我在写一个驱动遇到这样的问题: ioctl() { .... switch(cmd) { .....  case DRV_VLAN_INIT_VLANTABLE_RAM_DATA:             {                 vlanTable_t vlanT;                 if (copy_from_user(&vlanT,(void*)param1,sizeof...

我在写一个驱动遇到这样的问题:

ioctl()
{
....
switch(cmd)
{
.....
 case DRV_VLAN_INIT_VLANTABLE_RAM_DATA:
            {
                vlanTable_t vlanT;
                if (copy_from_user(&vlanT,(void*)param1,sizeof(vlanT)))
                {
                    _ioctl_dbg(dev, "DRV_VLAN_INIT_VLANTABLE_RAM_DATA copy_from_user param1");
                    status = -EFAULT;
                }
                ....
             }
             break;
  ....
}
}
    在这里,我的vlanT结构大小为0x97c时,系统运行正常。但是修改vlanT的结构后,大小为0xb10时,运行到copy_from_user时就会系统崩溃。
    我也尝试过使用指针申请内存 vlan = kmalloc(sizeof(vlanT), GFP_KERNEL/GFP_ATOMIC),但还是会系统崩溃。
按道理来说我的系统内存足够大的,不可能说多用几K就导致系统崩溃。
    请高手指点!!!!!!!
    

|
内核栈大小就2 pages,用0xb10这么大很可能导致crash.

至于用kmalloc时为何崩溃最好是有出错信息。。

|
我用copy_from_user拷贝几十K没问题。
建议你先定义个全局变量或者用kmalloc分配,应该没问题的

|
总觉的在驱动的read,write,ioctl里面进行大的内存申请会有问题。所以我看到的一些别人的驱动都不是这么做的。都是在probe的时候,定义个结构体,申请个足够大的内存,和其中有指针和设备有关系。这样你在read。write,ioctl的时候,都可以通过文件标识符得到设备,设备通过和结构体的关系得到结构体指针,从而得到申请的内存指针,你就可以使用已经申请好的内存,而不是在read里面定义个大数组。

|
你查下内核空间和用户空间的结构体定义,是不是一致的?不一致就会系统panic.

|
关注lz的情况,把内存地址等都打印一下,排除地址问题先

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 2.4内核中的ioctl系统调用的第三个参数的用法问题?
  • 内核执行ioctl时会被其他的ioctl打断吗
  • 用户程序的ioctl是怎么和驱动程序中的ioctl实现联系
  • win内核驱动漏洞挖掘 IOCTL Fuzzer
  • ioctl调用的问题
  • 菜鸟问题:Linux下 ioctl 函数到底在哪?
  • 求助:ioctl函数的命令参数
  • system()调用 与 ioctl()调用
  • ioctl() 到底有什么作用??
  • ioctl()函数
  • ioctl執行的奇怪問題
  • 关于linux内核的ioctl函数,请高手指点一下
  • 请教一个关于Makefile的问题。提示出错:make: *** 没有规则可以创建“ioctl”需要的目标“gcc”。 停止。
  • ioctl&fcntl 函数的区别
  • 关于ioctl
  • 请教一个ioctl函数的参数问题
  • 给错误设备发送正确命令 -- ioctl问题
  • ioctl返回的地址问题?初学者,高人指点。
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • 用ioctl修改网卡接口eth0的ip地址的问题,请~
  • ioctl函数的用法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,