X-Git-Url: https://code.grnet.gr/git/archipelago/blobdiff_plain/b04e0466c711df1a7388acf1e2bddc7f6183df2b..f29c3bebd18166d63d26c8014e7f1ea2bfbbb8f0:/xseg/sys/kernel/segdev.c diff --git a/xseg/sys/kernel/segdev.c b/xseg/sys/kernel/segdev.c index fa75992..bb1a6ab 100644 --- a/xseg/sys/kernel/segdev.c +++ b/xseg/sys/kernel/segdev.c @@ -214,22 +214,24 @@ static ssize_t segdev_write(struct file *file, const char __user *buf, { struct segdev_file *vf = file->private_data; struct segdev *dev = segdev_get(vf->minor); + uint32_t portno; int ret = -ENODEV; if (!dev) goto out; - if (count > SEGDEV_BUFSIZE) - count = SEGDEV_BUFSIZE; + if (count != sizeof(uint32_t)) + goto out; - ret = copy_from_user(dev->buffer, buf, count); + ret = copy_from_user(&portno, buf, sizeof(uint32_t)); if (ret < 0) goto out; - dev->buffer_index = count - ret; + if((count - ret) != sizeof(uint32_t)) + goto out; ret = 0; if (dev->callback) - dev->callback(dev); + dev->callback(dev, portno); else ret = -ENOSYS;