usblp: fix race between disconnect() and read()
Changes
1 files changed · +5 −0
| File | Status | Add | Del | Content |
|---|---|---|---|---|
| drivers/usb/class/usblp.c | modified | +5 | −0 | View file |
drivers/usb/class/usblp.c
View filediff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index 084c48c..67cbd42 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -827,6 +827,11 @@ static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, lo
if (rv < 0)
return rv;
+ if (!usblp->present) {
+ count = -ENODEV;
+ goto done;
+ }
+
if ((avail = usblp->rstatus) < 0) {
printk(KERN_ERR "usblp%d: error %d reading from printer\n",
usblp->minor, (int)avail);