Код: Выделить всё
static ssize_t do_io_rw(struct vfio_pci_device *vdev, bool test_mem,
void __iomem *io, char __user *buf,
loff_t off, size_t count, size_t x_start,
size_t x_end, bool iswrite)
{
ssize_t done = 0;
int ret;
while (count) {
size_t fillable, filled;
if (off < x_start)
fillable = min(count, (size_t)(x_start - off));
else if (off >= x_end)
fillable = count;
else
fillable = 0;
if (fillable >= 4 && !(off % 4)) {
u32 val;
if (iswrite) {
if (copy_from_user(&val, buf, 4))
return -EFAULT;
ret = vfio_pci_iowrite32(vdev, test_mem,
val, io + off);
if (ret)
return ret;
}
Код: Выделить всё
static int my_module_code(struct file *file, struct vhost_virtqueue *vvq)
{
loff_t pos = yyy;
unsigned int *idx = &vvq->idx;
return __kernel_write(file, (char *)idx, 2, &pos);
}
Так безопасен ли мой код? или есть лучший способ справиться с этим?
Подробнее здесь: https://stackoverflow.com/questions/792 ... t-fskernel
Мобильная версия