Commit ea8ee240251cbac73b66d70d35eeabfbff86d3ce

Authored by Oliver Neukum
Committed by John W. Linville
1 parent 89fd2e282a

rtl8187: resource leak in error case

This fixes resource leaks in error cases due to urb submission
failures.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

Showing 1 changed file with 12 additions and 2 deletions Side-by-side Diff

drivers/net/wireless/rtl8187_dev.c
... ... @@ -92,6 +92,7 @@
92 92 u8 data[4];
93 93 struct usb_ctrlrequest dr;
94 94 } *buf;
  95 + int rc;
95 96  
96 97 buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
97 98 if (!buf)
... ... @@ -116,7 +117,11 @@
116 117 usb_fill_control_urb(urb, priv->udev, usb_sndctrlpipe(priv->udev, 0),
117 118 (unsigned char *)dr, buf, len,
118 119 rtl8187_iowrite_async_cb, buf);
119   - usb_submit_urb(urb, GFP_ATOMIC);
  120 + rc = usb_submit_urb(urb, GFP_ATOMIC);
  121 + if (rc < 0) {
  122 + kfree(buf);
  123 + usb_free_urb(urb);
  124 + }
120 125 }
121 126  
122 127 static inline void rtl818x_iowrite32_async(struct rtl8187_priv *priv,
... ... @@ -169,6 +174,7 @@
169 174 struct urb *urb;
170 175 __le16 rts_dur = 0;
171 176 u32 flags;
  177 + int rc;
172 178  
173 179 urb = usb_alloc_urb(0, GFP_ATOMIC);
174 180 if (!urb) {
... ... @@ -208,7 +214,11 @@
208 214 info->dev = dev;
209 215 usb_fill_bulk_urb(urb, priv->udev, usb_sndbulkpipe(priv->udev, 2),
210 216 hdr, skb->len, rtl8187_tx_cb, skb);
211   - usb_submit_urb(urb, GFP_ATOMIC);
  217 + rc = usb_submit_urb(urb, GFP_ATOMIC);
  218 + if (rc < 0) {
  219 + usb_free_urb(urb);
  220 + kfree_skb(skb);
  221 + }
212 222  
213 223 return 0;
214 224 }