From 412c8232edfac024ed22bd1424f37f68fcbb555c Mon Sep 17 00:00:00 2001 From: Christian Gromm Date: Thu, 30 Jul 2015 18:18:55 +0200 Subject: [PATCH] Staging: most: fix doing DMA on stack This patch fixes error "doing DMA on the stack" by using kzalloc for buffer allocation. Reported-by: Dan Carpenter Signed-off-by: Christian Gromm Signed-off-by: Greg Kroah-Hartman --- drivers/staging/most/hdm-usb/hdm_usb.c | 36 ++++++++++++++++---------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c b/drivers/staging/most/hdm-usb/hdm_usb.c index a4a3e266b3ef..feb4c821d3a9 100644 --- a/drivers/staging/most/hdm-usb/hdm_usb.c +++ b/drivers/staging/most/hdm-usb/hdm_usb.c @@ -45,6 +45,7 @@ #define USB_VENDOR_ID_SMSC 0x0424 /* VID: SMSC */ #define USB_DEV_ID_BRDG 0xC001 /* PID: USB Bridge */ #define USB_DEV_ID_INIC 0xCF18 /* PID: USB INIC */ +#define HW_RESYNC 0x0000 /* DRCI Addresses */ #define DRCI_REG_NI_STATE 0x0100 #define DRCI_REG_PACKET_BW 0x0101 @@ -140,20 +141,29 @@ static void wq_netinfo(struct work_struct *wq_obj); * @dev: usb device * */ -static inline void trigger_resync_vr(struct usb_device *dev) +static void trigger_resync_vr(struct usb_device *dev) { - int data = 0; - - if (0 > usb_control_msg(dev, - usb_sndctrlpipe(dev, 0), - 0, - USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT, - 0, - 0, - &data, - 0, - 5 * HZ)) - pr_info("Vendor request \"stall\" failed\n"); + int retval; + u8 request_type = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT; + int *data = kzalloc(sizeof(*data), GFP_KERNEL); + + if (!data) + goto error; + *data = HW_RESYNC; + retval = usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, + request_type, + 0, + 0, + data, + 0, + 5 * HZ); + kfree(data); + if (retval >= 0) + return; +error: + pr_info("Vendor request \"stall\" failed\n"); } /** -- 2.30.2