access_ok()  函数是用来代替老版本的 verify_area() 函数的。它的作用也是检查用户空间指针是否可用。

函数原型
access_ok (type, addr, size);

变量说明
type    :   访问类型,其值可为 VERIFY_READ 或者 VERIFY_WRITE 。注意,VERIFY_WRITE 是 VERIFY_READ 的超集 -- 如果可以安全的写内存块,那么自然也总能读到内存块。

addr   :   用户空间的指针变量,其指向一个要检查的内存块开始处。

size    :   要检查内存块的大小。

返回值
此函数检查用户空间中的内存块是否可用。如果可用,则返回真(非0值),否则返回假 (0) 。

代码片段
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;