Commit ea8ee240251cbac73b66d70d35eeabfbff86d3ce
Committed by
John W. Linville
1 parent
89fd2e282a
Exists in
master
and in
20 other branches
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 | } |