virtio: console: Disable lseek(2) for port file operations
authorAmit Shah <amit.shah@redhat.com>
Thu, 16 Sep 2010 09:13:09 +0000 (14:43 +0530)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 21 Oct 2010 07:14:04 +0000 (17:44 +1030)
The ports are char devices; do not have seeking capabilities.  Calling
nonseekable_open() from the fops_open() call and setting the llseek fops
pointer to no_llseek ensures an lseek() call from userspace returns
-ESPIPE.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
CC: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/char/virtio_console.c

index dc42d5689483f80ae3c3d62e1adfa96860898f64..6c1b676643a9ef43fe3984bb8495996960cf4337 100644 (file)
@@ -809,6 +809,8 @@ static int port_fops_open(struct inode *inode, struct file *filp)
        reclaim_consumed_buffers(port);
        spin_unlock_irq(&port->outvq_lock);
 
+       nonseekable_open(inode, filp);
+
        /* Notify host of port being opened */
        send_control_msg(filp->private_data, VIRTIO_CONSOLE_PORT_OPEN, 1);
 
@@ -840,6 +842,7 @@ static const struct file_operations port_fops = {
        .poll  = port_fops_poll,
        .release = port_fops_release,
        .fasync = port_fops_fasync,
+       .llseek = no_llseek,
 };
 
 /*