- 论坛徽章:
- 0
|
在i2c.dev 中 ioctl 的函数里面有 两次 copy_from_user ,第一次已经从用户空间读取数据了, 但是第二次不是从用户读取数据,为什么还要用copy_from_user?? 请问怎么回事,谢谢!
case I2C_RDWR:
if (copy_from_user(&rdwr_arg, //第一次拷贝到rdwr_arg
(struct i2c_rdwr_ioctl_data __user *)arg,
sizeof(rdwr_arg)))
return -EFAULT;
/* Put an arbitrary limit on the number of messages that can
* be sent at once */
if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS)
return -EINVAL;
rdwr_pa = (struct i2c_msg *)
kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg),
GFP_KERNEL);
if (rdwr_pa == NULL) return -ENOMEM;
if (copy_from_user(rdwr_pa, rdwr_arg.msgs, //还从rdwr_arg复制,但是这个是内核的数据
rdwr_arg.nmsgs * sizeof(struct i2c_msg))) {
kfree(rdwr_pa);
return -EFAULT;
} |
[ 本帖最后由 dreamice 于 2009-3-12 14:47 编辑 ] |
|