|
@@ -94,10 +94,18 @@ static int mcs7830_get_reg(struct usbnet *dev, u16 index, u16 size, void *data)
|
|
|
{
|
|
|
struct usb_device *xdev = dev->udev;
|
|
|
int ret;
|
|
|
+ void *buffer;
|
|
|
+
|
|
|
+ buffer = kmalloc(size, GFP_NOIO);
|
|
|
+ if (buffer == NULL)
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
ret = usb_control_msg(xdev, usb_rcvctrlpipe(xdev, 0), MCS7830_RD_BREQ,
|
|
|
- MCS7830_RD_BMREQ, 0x0000, index, data,
|
|
|
+ MCS7830_RD_BMREQ, 0x0000, index, buffer,
|
|
|
size, MCS7830_CTRL_TIMEOUT);
|
|
|
+ memcpy(data, buffer, size);
|
|
|
+ kfree(buffer);
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -105,10 +113,18 @@ static int mcs7830_set_reg(struct usbnet *dev, u16 index, u16 size, void *data)
|
|
|
{
|
|
|
struct usb_device *xdev = dev->udev;
|
|
|
int ret;
|
|
|
+ void *buffer;
|
|
|
+
|
|
|
+ buffer = kmalloc(size, GFP_NOIO);
|
|
|
+ if (buffer == NULL)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ memcpy(buffer, data, size);
|
|
|
|
|
|
ret = usb_control_msg(xdev, usb_sndctrlpipe(xdev, 0), MCS7830_WR_BREQ,
|
|
|
- MCS7830_WR_BMREQ, 0x0000, index, data,
|
|
|
+ MCS7830_WR_BMREQ, 0x0000, index, buffer,
|
|
|
size, MCS7830_CTRL_TIMEOUT);
|
|
|
+ kfree(buffer);
|
|
|
return ret;
|
|
|
}
|
|
|
|