| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Wed, 28 Sep 2016 11:48:44 +0200 |
| Subject: Revert "usbtmc: convert to devm_kzalloc" |
| |
| commit ab21b63e8aedfc73565dd9cdd51eb338341177cb upstream. |
| |
| This reverts commit e6c7efdcb76f11b04e3d3f71c8d764ab75c9423b. |
| |
| Turns out it was totally wrong. The memory is supposed to be bound to |
| the kref, as the original code was doing correctly, not the |
| device/driver binding as the devm_kzalloc() would cause. |
| |
| This fixes an oops when read would be called after the device was |
| unbound from the driver. |
| |
| Reported-by: Ladislav Michl <ladis@linux-mips.org> |
| Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/usb/class/usbtmc.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/class/usbtmc.c |
| +++ b/drivers/usb/class/usbtmc.c |
| @@ -120,6 +120,7 @@ static void usbtmc_delete(struct kref *k |
| struct usbtmc_device_data *data = to_usbtmc_data(kref); |
| |
| usb_put_dev(data->usb_dev); |
| + kfree(data); |
| } |
| |
| static int usbtmc_open(struct inode *inode, struct file *filp) |
| @@ -1103,7 +1104,7 @@ static int usbtmc_probe(struct usb_inter |
| |
| dev_dbg(&intf->dev, "%s called\n", __func__); |
| |
| - data = devm_kzalloc(&intf->dev, sizeof(*data), GFP_KERNEL); |
| + data = kmalloc(sizeof(*data), GFP_KERNEL); |
| if (!data) { |
| dev_err(&intf->dev, "Unable to allocate kernel memory\n"); |
| return -ENOMEM; |