我正在为自己创建了自己的IOCTL的一个项目使用CUSE驱动程序。 从进程空间传递指向结构的指针后,我可以使用以下命令在CUSE空间中成功检索它:
in_iov[0].iov_base = arg;
in_iov[0].iov_len = sizeof(struct my_struct);
if (!in_bufsz) {
fuse_reply_ioctl_retry(req, in_iov, 1, NULL, 0);
return;
}
my_struct *ptr = in_buf;
in_buf += sizeof(struct my_struct);
in_bufsz -= sizeof(struct my_struct);
问题出现在以下位置,指向刚刚检索到的结构的指针指向一个数据指针,其大小可以在0到2 ^ 28之间
in_iov[1].iov_base = ptr->data_buf_ptr;
in_iov[1].iov_len = ptr->data_buf_size;
if (!in_bufsz) {
fuse_reply_ioctl_retry(req, in_iov, 2, NULL, 0);
return;
}
应该可以正常工作,并在in_buf中返回可用的指针。 但是,观察到,如果ptr-> data_buf_size> 127,000,则驱动程序崩溃。 我找不到参考资料来解释这种数据传输大小的上限, 此外,在多次迭代中使用buf小于127000的buf较小的多个fuse_reply_ioctl_retry也不起作用