Message ID | 20110808123406.GA2526@zod.bos.redhat.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
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 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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"); }
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(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html