| From 62cbed252cf7830357e2bd7f5a15dc95e4bbaf31 Mon Sep 17 00:00:00 2001 |
| From: Ben Hutchings <ben@decadent.org.uk> |
| Date: Sat, 4 Feb 2017 16:57:04 +0000 |
| Subject: [PATCH] catc: Use heap buffer for memory size test |
| |
| commit 2d6a0e9de03ee658a9adc3bfb2f0ca55dff1e478 upstream. |
| |
| Allocating USB buffers on the stack is not portable, and no longer |
| works on x86_64 (with VMAP_STACK enabled as per default). |
| |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/usb/catc.c b/drivers/net/usb/catc.c |
| index 5ce84c9c9255..40864159021d 100644 |
| --- a/drivers/net/usb/catc.c |
| +++ b/drivers/net/usb/catc.c |
| @@ -777,7 +777,7 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| struct net_device *netdev; |
| struct catc *catc; |
| u8 broadcast[ETH_ALEN]; |
| - int i, pktsz, ret; |
| + int pktsz, ret; |
| |
| if (usb_set_interface(usbdev, |
| intf->altsetting->desc.bInterfaceNumber, 1)) { |
| @@ -841,15 +841,24 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| catc->irq_buf, 2, catc_irq_done, catc, 1); |
| |
| if (!catc->is_f5u011) { |
| + u32 *buf; |
| + int i; |
| + |
| dev_dbg(dev, "Checking memory size\n"); |
| |
| - i = 0x12345678; |
| - catc_write_mem(catc, 0x7a80, &i, 4); |
| - i = 0x87654321; |
| - catc_write_mem(catc, 0xfa80, &i, 4); |
| - catc_read_mem(catc, 0x7a80, &i, 4); |
| + buf = kmalloc(4, GFP_KERNEL); |
| + if (!buf) { |
| + ret = -ENOMEM; |
| + goto fail_free; |
| + } |
| + |
| + *buf = 0x12345678; |
| + catc_write_mem(catc, 0x7a80, buf, 4); |
| + *buf = 0x87654321; |
| + catc_write_mem(catc, 0xfa80, buf, 4); |
| + catc_read_mem(catc, 0x7a80, buf, 4); |
| |
| - switch (i) { |
| + switch (*buf) { |
| case 0x12345678: |
| catc_set_reg(catc, TxBufCount, 8); |
| catc_set_reg(catc, RxBufCount, 32); |
| @@ -864,6 +873,8 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| dev_dbg(dev, "32k Memory\n"); |
| break; |
| } |
| + |
| + kfree(buf); |
| |
| dev_dbg(dev, "Getting MAC from SEEROM.\n"); |
| |
| -- |
| 2.12.0 |
| |