* [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA
@ 2011-08-08 12:34 Josh Boyer
2011-08-12 15:07 ` Josh Boyer
2011-08-14 1:01 ` David Miller
0 siblings, 2 replies; 4+ messages in thread
From: Josh Boyer @ 2011-08-08 12:34 UTC (permalink / raw)
To: Oliver Neukum, Alexey ORISHKO; +Cc: gregkh, linux-usb, linux-kernel, netdev
The cdc_ncm driver still has a few places where stack variables are
passed to the cdc_ncm_do_request function. This triggers a stack trace in
lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set.
Adjust these calls to pass parameters that have been allocated with
kzalloc.
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
---
v4: Rebase against 3.1-rc1
v3: Fix checkpatch errors
v2: Fix leak in error path
drivers/net/usb/cdc_ncm.c | 47 ++++++++++++++++++++++++++++++++++++--------
1 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index a03336e..f06fb78 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -228,23 +228,40 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) {
if (flags & USB_CDC_NCM_NCAP_NTB_INPUT_SIZE) {
- struct usb_cdc_ncm_ndp_input_size ndp_in_sz;
+ struct usb_cdc_ncm_ndp_input_size *ndp_in_sz;
+
+ ndp_in_sz = kzalloc(sizeof(*ndp_in_sz), GFP_KERNEL);
+ if (!ndp_in_sz) {
+ err = -ENOMEM;
+ goto size_err;
+ }
+
err = usb_control_msg(ctx->udev,
usb_sndctrlpipe(ctx->udev, 0),
USB_CDC_SET_NTB_INPUT_SIZE,
USB_TYPE_CLASS | USB_DIR_OUT
| USB_RECIP_INTERFACE,
- 0, iface_no, &ndp_in_sz, 8, 1000);
+ 0, iface_no, ndp_in_sz, 8, 1000);
+ kfree(ndp_in_sz);
} else {
- __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max);
+ __le32 *dwNtbInMaxSize;
+ dwNtbInMaxSize = kzalloc(sizeof(*dwNtbInMaxSize),
+ GFP_KERNEL);
+ if (!dwNtbInMaxSize) {
+ err = -ENOMEM;
+ goto size_err;
+ }
+ *dwNtbInMaxSize = cpu_to_le32(ctx->rx_max);
+
err = usb_control_msg(ctx->udev,
usb_sndctrlpipe(ctx->udev, 0),
USB_CDC_SET_NTB_INPUT_SIZE,
USB_TYPE_CLASS | USB_DIR_OUT
| USB_RECIP_INTERFACE,
- 0, iface_no, &dwNtbInMaxSize, 4, 1000);
+ 0, iface_no, dwNtbInMaxSize, 4, 1000);
+ kfree(dwNtbInMaxSize);
}
-
+size_err:
if (err < 0)
pr_debug("Setting NTB Input Size failed\n");
}
@@ -325,19 +342,29 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
/* set Max Datagram Size (MTU) */
if (flags & USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE) {
- __le16 max_datagram_size;
+ __le16 *max_datagram_size;
u16 eth_max_sz = le16_to_cpu(ctx->ether_desc->wMaxSegmentSize);
+
+ max_datagram_size = kzalloc(sizeof(*max_datagram_size),
+ GFP_KERNEL);
+ if (!max_datagram_size) {
+ err = -ENOMEM;
+ goto max_dgram_err;
+ }
+
err = usb_control_msg(ctx->udev, usb_rcvctrlpipe(ctx->udev, 0),
USB_CDC_GET_MAX_DATAGRAM_SIZE,
USB_TYPE_CLASS | USB_DIR_IN
| USB_RECIP_INTERFACE,
- 0, iface_no, &max_datagram_size,
+ 0, iface_no, max_datagram_size,
2, 1000);
if (err < 0) {
pr_debug("GET_MAX_DATAGRAM_SIZE failed, use size=%u\n",
CDC_NCM_MIN_DATAGRAM_SIZE);
+ kfree(max_datagram_size);
} else {
- ctx->max_datagram_size = le16_to_cpu(max_datagram_size);
+ ctx->max_datagram_size =
+ le16_to_cpu(*max_datagram_size);
/* Check Eth descriptor value */
if (eth_max_sz < CDC_NCM_MAX_DATAGRAM_SIZE) {
if (ctx->max_datagram_size > eth_max_sz)
@@ -360,8 +387,10 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
USB_TYPE_CLASS | USB_DIR_OUT
| USB_RECIP_INTERFACE,
0,
- iface_no, &max_datagram_size,
+ iface_no, max_datagram_size,
2, 1000);
+ kfree(max_datagram_size);
+max_dgram_err:
if (err < 0)
pr_debug("SET_MAX_DATAGRAM_SIZE failed\n");
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA
2011-08-08 12:34 [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA Josh Boyer
@ 2011-08-12 15:07 ` Josh Boyer
2011-08-12 15:11 ` David Miller
2011-08-14 1:01 ` David Miller
1 sibling, 1 reply; 4+ messages in thread
From: Josh Boyer @ 2011-08-12 15:07 UTC (permalink / raw)
To: Oliver Neukum, Alexey ORISHKO; +Cc: gregkh, linux-usb, linux-kernel, netdev
On Mon, Aug 08, 2011 at 08:34:06AM -0400, Josh Boyer wrote:
> The cdc_ncm driver still has a few places where stack variables are
> passed to the cdc_ncm_do_request function. This triggers a stack trace in
> lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set.
>
> Adjust these calls to pass parameters that have been allocated with
> kzalloc.
>
> Signed-off-by: Josh Boyer <jwboyer@redhat.com>
> ---
> v4: Rebase against 3.1-rc1
> v3: Fix checkpatch errors
> v2: Fix leak in error path
>
> drivers/net/usb/cdc_ncm.c | 47 ++++++++++++++++++++++++++++++++++++--------
> 1 files changed, 38 insertions(+), 9 deletions(-)
Just curious, but which tree would this be pulled into? usb or net or?
josh
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA
2011-08-12 15:07 ` Josh Boyer
@ 2011-08-12 15:11 ` David Miller
0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2011-08-12 15:11 UTC (permalink / raw)
To: jwboyer; +Cc: oliver, alexey.orishko, gregkh, linux-usb, linux-kernel, netdev
From: Josh Boyer <jwboyer@redhat.com>
Date: Fri, 12 Aug 2011 11:07:16 -0400
> On Mon, Aug 08, 2011 at 08:34:06AM -0400, Josh Boyer wrote:
>> The cdc_ncm driver still has a few places where stack variables are
>> passed to the cdc_ncm_do_request function. This triggers a stack trace in
>> lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set.
>>
>> Adjust these calls to pass parameters that have been allocated with
>> kzalloc.
>>
>> Signed-off-by: Josh Boyer <jwboyer@redhat.com>
>> ---
>> v4: Rebase against 3.1-rc1
>> v3: Fix checkpatch errors
>> v2: Fix leak in error path
>>
>> drivers/net/usb/cdc_ncm.c | 47 ++++++++++++++++++++++++++++++++++++--------
>> 1 files changed, 38 insertions(+), 9 deletions(-)
>
> Just curious, but which tree would this be pulled into? usb or net or?
Probably net.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA
2011-08-08 12:34 [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA Josh Boyer
2011-08-12 15:07 ` Josh Boyer
@ 2011-08-14 1:01 ` David Miller
1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2011-08-14 1:01 UTC (permalink / raw)
To: jwboyer; +Cc: oliver, alexey.orishko, gregkh, linux-usb, linux-kernel, netdev
From: Josh Boyer <jwboyer@redhat.com>
Date: Mon, 8 Aug 2011 08:34:07 -0400
> The cdc_ncm driver still has a few places where stack variables are
> passed to the cdc_ncm_do_request function. This triggers a stack trace in
> lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set.
>
> Adjust these calls to pass parameters that have been allocated with
> kzalloc.
>
> Signed-off-by: Josh Boyer <jwboyer@redhat.com>
Applied.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-08-14 1:01 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-08 12:34 [PATCH v4] usbnet/cdc_ncm: Don't use stack variables for DMA Josh Boyer
2011-08-12 15:07 ` Josh Boyer
2011-08-12 15:11 ` David Miller
2011-08-14 1:01 ` David Miller
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).