usbcore: cdev lock_kernel() pushdown
authorJonathan Corbet <corbet@lwn.net>
Thu, 15 May 2008 22:24:25 +0000 (16:24 -0600)
committerJonathan Corbet <corbet@lwn.net>
Fri, 20 Jun 2008 20:05:49 +0000 (14:05 -0600)
usb_open() is protected by a down_read(&minor_rwsem), but I'm not sure I
trust it to protect everything including subsidiary open() functions.

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
drivers/usb/core/file.c

index 8133c99..c6a9539 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/rwsem.h>
+#include <linux/smp_lock.h>
 #include <linux/usb.h>
 
 #include "usb.h"
@@ -33,6 +34,7 @@ static int usb_open(struct inode * inode, struct file * file)
        int err = -ENODEV;
        const struct file_operations *old_fops, *new_fops = NULL;
 
+       lock_kernel();
        down_read(&minor_rwsem);
        c = usb_minors[minor];
 
@@ -51,6 +53,7 @@ static int usb_open(struct inode * inode, struct file * file)
        fops_put(old_fops);
  done:
        up_read(&minor_rwsem);
+       unlock_kernel();
        return err;
 }