Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86266452 authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman
Browse files

USB: Push BKL on open down into the drivers



Straightforward push into the drivers to allow
auditing individual drivers separately

Signed-off-by: default avatarOliver Neukum <oliver@neukum.org>
Acked-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f9de332e
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -265,9 +265,10 @@ static int hiddev_release(struct inode * inode, struct file * file)
static int hiddev_open(struct inode *inode, struct file *file)
{
	struct hiddev_list *list;
	int res;
	int res, i;

	int i = iminor(inode) - HIDDEV_MINOR_BASE;
	lock_kernel();
	i = iminor(inode) - HIDDEV_MINOR_BASE;

	if (i >= HIDDEV_MINORS || i < 0 || !hiddev_table[i])
		return -ENODEV;
@@ -313,10 +314,12 @@ static int hiddev_open(struct inode *inode, struct file *file)
			usbhid_open(hid);
		}

	unlock_kernel();
	return 0;
bail:
	file->private_data = NULL;
	kfree(list);
	unlock_kernel();
	return res;
}

+7 −1
Original line number Diff line number Diff line
@@ -616,10 +616,12 @@ static int dabusb_open (struct inode *inode, struct file *file)
{
	int devnum = iminor(inode);
	pdabusb_t s;
	int r;

	if (devnum < DABUSB_MINOR || devnum >= (DABUSB_MINOR + NRDABUSB))
		return -EIO;

	lock_kernel();
	s = &dabusb[devnum - DABUSB_MINOR];

	dbg("dabusb_open");
@@ -634,6 +636,7 @@ static int dabusb_open (struct inode *inode, struct file *file)
		msleep_interruptible(500);

		if (signal_pending (current)) {
			unlock_kernel();
			return -EAGAIN;
		}
		mutex_lock(&s->mutex);
@@ -641,6 +644,7 @@ static int dabusb_open (struct inode *inode, struct file *file)
	if (usb_set_interface (s->usbdev, _DABUSB_IF, 1) < 0) {
		mutex_unlock(&s->mutex);
		dev_err(&s->usbdev->dev, "set_interface failed\n");
		unlock_kernel();
		return -EINVAL;
	}
	s->opened = 1;
@@ -649,7 +653,9 @@ static int dabusb_open (struct inode *inode, struct file *file)
	file->f_pos = 0;
	file->private_data = s;

	return nonseekable_open(inode, file);
	r = nonseekable_open(inode, file);
	unlock_kernel();
	return r;
}

static int dabusb_release (struct inode *inode, struct file *file)
+3 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#include <linux/mutex.h>

#include <linux/uaccess.h>
#include <linux/smp_lock.h>
#include <linux/input.h>
#include <linux/usb.h>
#include <linux/poll.h>
@@ -325,6 +326,7 @@ static int usb_alphatrack_open(struct inode *inode, struct file *file)
	int retval = 0;
	struct usb_interface *interface;

	lock_kernel();
	nonseekable_open(inode, file);
	subminor = iminor(inode);

@@ -394,6 +396,7 @@ static int usb_alphatrack_open(struct inode *inode, struct file *file)

unlock_disconnect_exit:
	mutex_unlock(&disconnect_mutex);
	unlock_kernel();

	return retval;
}
+3 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@
#include <linux/mutex.h>

#include <linux/uaccess.h>
#include <linux/smp_lock.h>
#include <linux/input.h>
#include <linux/usb.h>
#include <linux/poll.h>
@@ -343,6 +344,7 @@ static int usb_tranzport_open(struct inode *inode, struct file *file)
	int retval = 0;
	struct usb_interface *interface;

	lock_kernel();
	nonseekable_open(inode, file);
	subminor = iminor(inode);

@@ -413,6 +415,7 @@ static int usb_tranzport_open(struct inode *inode, struct file *file)

unlock_disconnect_exit:
	mutex_unlock(&disconnect_mutex);
	unlock_kernel();

	return retval;
}
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <linux/uaccess.h>
#include <linux/bitops.h>
#include <linux/poll.h>
#include <linux/smp_lock.h>
#include <linux/usb.h>
#include <linux/usb/cdc.h>
#include <asm/byteorder.h>
@@ -516,6 +517,7 @@ static int wdm_open(struct inode *inode, struct file *file)
	struct usb_interface *intf;
	struct wdm_device *desc;

	lock_kernel();
	mutex_lock(&wdm_mutex);
	intf = usb_find_interface(&wdm_driver, minor);
	if (!intf)
@@ -548,6 +550,7 @@ static int wdm_open(struct inode *inode, struct file *file)
	usb_autopm_put_interface(desc->intf);
out:
	mutex_unlock(&wdm_mutex);
	unlock_kernel();
	return rv;
}

Loading