netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] usb/mcs7830: Don't use buffers from stack for USB transfers
@ 2009-01-20 20:29 Christian Eggers
  2009-01-20 20:32 ` David Miller
  2009-01-20 22:45 ` Arnd Bergmann
  0 siblings, 2 replies; 11+ messages in thread
From: Christian Eggers @ 2009-01-20 20:29 UTC (permalink / raw)
  To: netdev; +Cc: torvalds, linux-kernel

From: Christian Eggers <christian.eggers@kathrein.de>

mcs7830_set_reg() and mcs7830_get_reg() are called with buffers
from stack which must not be used directly for USB transfers.
This causes corruption of the stack particulary on non x86
architectures because DMA may be used for these transfers.

Signed-off-by: Christian Eggers <christian.eggers@kathrein.de>
---

This is my first patch submission for Linux. I hope everything is fine.

diff -uprN linux-2.6.28.1.orig/drivers/net/usb/mcs7830.c linux-2.6.28.1/drivers/net/usb/mcs7830.c
--- linux-2.6.28.1.orig/drivers/net/usb/mcs7830.c       2009-01-18 19:45:37.000000000 +0100
+++ linux-2.6.28.1/drivers/net/usb/mcs7830.c    2009-01-20 20:53:59.000000000 +0100
@@ -94,10 +94,18 @@ static int mcs7830_get_reg(struct usbnet
 {
        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
 {
        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;
 }



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-01-20 23:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-20 20:29 [PATCH] usb/mcs7830: Don't use buffers from stack for USB transfers Christian Eggers
2009-01-20 20:32 ` David Miller
2009-01-20 22:45 ` Arnd Bergmann
2009-01-20 22:47   ` David Miller
2009-01-20 23:17     ` Arnd Bergmann
2009-01-20 23:23       ` David Miller
2009-01-20 23:36         ` Oliver Neukum
2009-01-20 23:37         ` Arnd Bergmann
2009-01-20 23:39           ` David Miller
2009-01-20 23:28       ` Oliver Neukum
2009-01-20 22:50   ` Oliver Neukum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).