在LDD3的例子中,access_ok()
放置在ioctl
内核模块方法的开头,用于检查从用户空间传递的指针是否有效。ioctl()
当用户空间应用程序调用系统调用并传递一个变量的地址时,它是正确的。然而,在某些情况下,ioctl()
系统调用是用一个值而不是指针作为第三个参数调用的,最后是access_ok()
内核模块中的第二个参数。
我试图传递一个整数作为access_ok()
's 第二个参数,它工作正常。没有报告错误。但我不太确定这种用法是否正确?
例如,如果我ioctl()
在用户空间中调用它的第三个参数是“3”。然后,在 ,ioctl()
方法中struct file_operations
,access_ok()
将接收3
它的第二个参数。因为access_ok()
需要一个指针,所以它转换3
为一个用户空间指针。反观是错的...