Skip to content

Commit

Permalink
virtio: console: fix race in port_fops_open() and port unplug
Browse files Browse the repository at this point in the history
commit 671bdea upstream.

Between open() being called and processed, the port can be unplugged.
Check if this happened, and bail out.

A simple test script to reproduce this is:

while true; do for i in $(seq 1 100); do echo $i > /dev/vport0p3; done; done;

This opens and closes the port a lot of times; unplugging the port while
this is happening triggers the bug.

Signed-off-by: Amit Shah <[email protected]>
Signed-off-by: Rusty Russell <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Amit Shah authored and gregkh committed Aug 15, 2013
1 parent 7b9f0c2 commit 6039148
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/char/virtio_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -1041,6 +1041,10 @@ static int port_fops_open(struct inode *inode, struct file *filp)

/* We get the port with a kref here */
port = find_port_by_devt(cdev->dev);
if (!port) {
/* Port was unplugged before we could proceed */
return -ENXIO;
}
filp->private_data = port;

/*
Expand Down

0 comments on commit 6039148

Please sign in to comment.