当前位置: 技术问答>linux和unix
求救啊 ioctl函数
来源: 互联网 发布时间:2017-01-10
本文导语: int ioctl(struct inode *inod,struct file * filp, unsigned int cmd,unsigned long arg) 如果我帮cmd 命令用 _IOWR(type,nr,size) 定义为双向传输, 那么这个arg 参数,即可以传入值,也可以读出值吗? 那怎么检测它的安全性了 ...
int ioctl(struct inode *inod,struct file * filp, unsigned int cmd,unsigned long arg)
如果我帮cmd 命令用 _IOWR(type,nr,size) 定义为双向传输, 那么这个arg 参数,即可以传入值,也可以读出值吗?
那怎么检测它的安全性了
用这个access_ok 检测的时候,它一次只能检测VERIFY_WRITE 或 VERIFY_READ ,那我对同地址检测两次 (因为是双向传输,所以 要检测读 和写 时的地址安全性 即检测两次)好像检测通不过。
if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
if (err)
return -EFAULT;
我想问一下双向传输 中 就用 arg 参数就可以了吗, 即应用程序中,通过该系统调用ioctl中的arg参数 传入一个值,然后还能从arg 参数中得到返回值(即ioctl仅仅调用一次,就可以通过arg 传入一个值,然后还可以从arg 得到一个返回值)?
是这样吗???
双向传输怎么用啊
如果我帮cmd 命令用 _IOWR(type,nr,size) 定义为双向传输, 那么这个arg 参数,即可以传入值,也可以读出值吗?
那怎么检测它的安全性了
用这个access_ok 检测的时候,它一次只能检测VERIFY_WRITE 或 VERIFY_READ ,那我对同地址检测两次 (因为是双向传输,所以 要检测读 和写 时的地址安全性 即检测两次)好像检测通不过。
if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
if (err)
return -EFAULT;
我想问一下双向传输 中 就用 arg 参数就可以了吗, 即应用程序中,通过该系统调用ioctl中的arg参数 传入一个值,然后还能从arg 参数中得到返回值(即ioctl仅仅调用一次,就可以通过arg 传入一个值,然后还可以从arg 得到一个返回值)?
是这样吗???
双向传输怎么用啊
|
" 即应用程序中,通过该系统调用ioctl中的arg参数 传入一个值,然后还能从arg 参数中得到返回值(即ioctl仅仅调用一次,就可以通过arg 传入一个值,然后还可以从arg 得到一个返回值)?
是这样吗???"
应用程序通过该系统调用ioctl中的arg参数 传入一个值,然后,内核处理函数做赋值操作,然后,你的应用程序再去读这个值就可以了。呵呵。不放心的话,让应用程序sleep一秒。
这是我的代码,工程应用没问题。
......
rev = ioctl(fd,FB_SBR_IOCTL_PRIORITY,pFBSBRPRIORITY);
sleep(1);
for( i = 0; i vlan_pri_number ; i++)
printf("n the vlan id is %d, and the priority value is %d.",
pFBSBRPRIORITY->vlan_priority_list[i].vlan, pFBSBRPRIORITY->vlan_priority_list[i].vlan_priority);
.......
是这样吗???"
应用程序通过该系统调用ioctl中的arg参数 传入一个值,然后,内核处理函数做赋值操作,然后,你的应用程序再去读这个值就可以了。呵呵。不放心的话,让应用程序sleep一秒。
这是我的代码,工程应用没问题。
......
rev = ioctl(fd,FB_SBR_IOCTL_PRIORITY,pFBSBRPRIORITY);
sleep(1);
for( i = 0; i vlan_pri_number ; i++)
printf("n the vlan id is %d, and the priority value is %d.",
pFBSBRPRIORITY->vlan_priority_list[i].vlan, pFBSBRPRIORITY->vlan_priority_list[i].vlan_priority);
.......