代码: 全选
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;
考虑到 _IOC_DIR(cmd) 可能等于 _IOC_READ | _IOC_WRITE,应该是if条件里面的_IOC_READ和_IOC_WRITE写反了吧?