usbnet.c (dd84cfff3cc3b79c9d616f85bd1178df135cbd1a) | usbnet.c (b55a21b764c1e182014630fa5486d717484ac58f) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * USB Network driver infrastructure 4 * Copyright (C) 2000-2005 by David Brownell 5 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com> 6 */ 7 8/* --- 1990 unchanged lines hidden (view full) --- 1999 void *buf = NULL; 2000 int err = -ENOMEM; 2001 2002 netdev_dbg(dev->net, "usbnet_read_cmd cmd=0x%02x reqtype=%02x" 2003 " value=0x%04x index=0x%04x size=%d\n", 2004 cmd, reqtype, value, index, size); 2005 2006 if (size) { | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * USB Network driver infrastructure 4 * Copyright (C) 2000-2005 by David Brownell 5 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com> 6 */ 7 8/* --- 1990 unchanged lines hidden (view full) --- 1999 void *buf = NULL; 2000 int err = -ENOMEM; 2001 2002 netdev_dbg(dev->net, "usbnet_read_cmd cmd=0x%02x reqtype=%02x" 2003 " value=0x%04x index=0x%04x size=%d\n", 2004 cmd, reqtype, value, index, size); 2005 2006 if (size) { |
2007 buf = kmalloc(size, GFP_KERNEL); | 2007 buf = kmalloc(size, GFP_NOIO); |
2008 if (!buf) 2009 goto out; 2010 } 2011 2012 err = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 2013 cmd, reqtype, value, index, buf, size, 2014 USB_CTRL_GET_TIMEOUT); 2015 if (err > 0 && err <= size) { --- 15 unchanged lines hidden (view full) --- 2031 void *buf = NULL; 2032 int err = -ENOMEM; 2033 2034 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" 2035 " value=0x%04x index=0x%04x size=%d\n", 2036 cmd, reqtype, value, index, size); 2037 2038 if (data) { | 2008 if (!buf) 2009 goto out; 2010 } 2011 2012 err = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 2013 cmd, reqtype, value, index, buf, size, 2014 USB_CTRL_GET_TIMEOUT); 2015 if (err > 0 && err <= size) { --- 15 unchanged lines hidden (view full) --- 2031 void *buf = NULL; 2032 int err = -ENOMEM; 2033 2034 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" 2035 " value=0x%04x index=0x%04x size=%d\n", 2036 cmd, reqtype, value, index, size); 2037 2038 if (data) { |
2039 buf = kmemdup(data, size, GFP_KERNEL); | 2039 buf = kmemdup(data, size, GFP_NOIO); |
2040 if (!buf) 2041 goto out; 2042 } else { 2043 if (size) { 2044 WARN_ON_ONCE(1); 2045 err = -EINVAL; 2046 goto out; 2047 } --- 84 unchanged lines hidden (view full) --- 2132 2133/* 2134 * The caller must make sure that device can't be put into suspend 2135 * state until the control URB completes. 2136 */ 2137int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype, 2138 u16 value, u16 index, const void *data, u16 size) 2139{ | 2040 if (!buf) 2041 goto out; 2042 } else { 2043 if (size) { 2044 WARN_ON_ONCE(1); 2045 err = -EINVAL; 2046 goto out; 2047 } --- 84 unchanged lines hidden (view full) --- 2132 2133/* 2134 * The caller must make sure that device can't be put into suspend 2135 * state until the control URB completes. 2136 */ 2137int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype, 2138 u16 value, u16 index, const void *data, u16 size) 2139{ |
2140 struct usb_ctrlrequest *req = NULL; | 2140 struct usb_ctrlrequest *req; |
2141 struct urb *urb; 2142 int err = -ENOMEM; 2143 void *buf = NULL; 2144 2145 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" 2146 " value=0x%04x index=0x%04x size=%d\n", 2147 cmd, reqtype, value, index, size); 2148 2149 urb = usb_alloc_urb(0, GFP_ATOMIC); 2150 if (!urb) 2151 goto fail; 2152 2153 if (data) { 2154 buf = kmemdup(data, size, GFP_ATOMIC); 2155 if (!buf) { 2156 netdev_err(dev->net, "Error allocating buffer" 2157 " in %s!\n", __func__); | 2141 struct urb *urb; 2142 int err = -ENOMEM; 2143 void *buf = NULL; 2144 2145 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" 2146 " value=0x%04x index=0x%04x size=%d\n", 2147 cmd, reqtype, value, index, size); 2148 2149 urb = usb_alloc_urb(0, GFP_ATOMIC); 2150 if (!urb) 2151 goto fail; 2152 2153 if (data) { 2154 buf = kmemdup(data, size, GFP_ATOMIC); 2155 if (!buf) { 2156 netdev_err(dev->net, "Error allocating buffer" 2157 " in %s!\n", __func__); |
2158 goto fail_free; | 2158 goto fail_free_urb; |
2159 } 2160 } 2161 2162 req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC); 2163 if (!req) 2164 goto fail_free_buf; 2165 2166 req->bRequestType = reqtype; --- 7 unchanged lines hidden (view full) --- 2174 (void *)req, buf, size, 2175 usbnet_async_cmd_cb, req); 2176 urb->transfer_flags |= URB_FREE_BUFFER; 2177 2178 err = usb_submit_urb(urb, GFP_ATOMIC); 2179 if (err < 0) { 2180 netdev_err(dev->net, "Error submitting the control" 2181 " message: status=%d\n", err); | 2159 } 2160 } 2161 2162 req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC); 2163 if (!req) 2164 goto fail_free_buf; 2165 2166 req->bRequestType = reqtype; --- 7 unchanged lines hidden (view full) --- 2174 (void *)req, buf, size, 2175 usbnet_async_cmd_cb, req); 2176 urb->transfer_flags |= URB_FREE_BUFFER; 2177 2178 err = usb_submit_urb(urb, GFP_ATOMIC); 2179 if (err < 0) { 2180 netdev_err(dev->net, "Error submitting the control" 2181 " message: status=%d\n", err); |
2182 goto fail_free; | 2182 goto fail_free_all; |
2183 } 2184 return 0; 2185 | 2183 } 2184 return 0; 2185 |
2186fail_free_all: 2187 kfree(req); |
|
2186fail_free_buf: 2187 kfree(buf); | 2188fail_free_buf: 2189 kfree(buf); |
2188fail_free: 2189 kfree(req); | 2190 /* 2191 * avoid a double free 2192 * needed because the flag can be set only 2193 * after filling the URB 2194 */ 2195 urb->transfer_flags = 0; 2196fail_free_urb: |
2190 usb_free_urb(urb); 2191fail: 2192 return err; 2193 2194} 2195EXPORT_SYMBOL_GPL(usbnet_write_cmd_async); 2196/*-------------------------------------------------------------------------*/ 2197 --- 19 unchanged lines hidden --- | 2197 usb_free_urb(urb); 2198fail: 2199 return err; 2200 2201} 2202EXPORT_SYMBOL_GPL(usbnet_write_cmd_async); 2203/*-------------------------------------------------------------------------*/ 2204 --- 19 unchanged lines hidden --- |