[PATCH] net: usb: asix: Fix crash on skb alloc failure

Subsystems: networking drivers, the rest, usb networking drivers

STALE4038d

3 messages, 2 authors, 2015-10-05 · open the first message on its own page

[PATCH] net: usb: asix: Fix crash on skb alloc failure

From: David B. Robins <hidden>
Date: 2015-09-30 20:07:36

If asix_rx_fixup_internal() fails to allocate rx->ax_skb, it will return
but not clear rx->size. rx points to driver private data. A later call
assumes that nonzero size means ax_skb was allocated and passes a null
ax_skb to skb_put. Changed allocation failure return to clear size first.

Found testing board with AX88772B devices.

Signed-off-by: David B. Robins <redacted>
---
 drivers/net/usb/asix_common.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
index 75d6f26..079069a 100644
--- a/drivers/net/usb/asix_common.c
+++ b/drivers/net/usb/asix_common.c
@@ -91,8 +91,10 @@ int asix_rx_fixup_internal(struct usbnet *dev, struct sk_buff *skb,
 			}
 			rx->ax_skb = netdev_alloc_skb_ip_align(dev->net,
 							       rx->size);
-			if (!rx->ax_skb)
+			if (!rx->ax_skb) {
+				rx->size = 0;
 				return 0;
+			}
 		}
 
 		if (rx->size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) {
-- 
1.9.1

Re: [PATCH] net: usb: asix: Fix crash on skb alloc failure

From: David Miller <davem@davemloft.net>
Date: 2015-10-05 10:16:16

From: "David B. Robins" <redacted>
Date: Wed, 30 Sep 2015 16:20:04 -0400
If asix_rx_fixup_internal() fails to allocate rx->ax_skb, it will return
but not clear rx->size. rx points to driver private data. A later call
assumes that nonzero size means ax_skb was allocated and passes a null
ax_skb to skb_put. Changed allocation failure return to clear size first.

Found testing board with AX88772B devices.

Signed-off-by: David B. Robins <redacted>
Applied, thanks.

Re: [PATCH] net: usb: asix: Fix crash on skb alloc failure

From: David B. Robins <hidden>
Date: 2015-10-05 13:27:55

On 2015-10-05 06:31, David Miller wrote:
From: "David B. Robins" <redacted>
Date: Wed, 30 Sep 2015 16:20:04 -0400
quoted
If asix_rx_fixup_internal() fails to allocate rx->ax_skb, it will return
but not clear rx->size. rx points to driver private data. A later call
assumes that nonzero size means ax_skb was allocated and passes a null
ax_skb to skb_put. Changed allocation failure return to clear size first.

Found testing board with AX88772B devices.

Signed-off-by: David B. Robins <redacted>
Applied, thanks.
While I am happy for the patch I submitted to be applied, and it is consistent with existing error handling and does fix the specific issue, I believe a later series of 5 patches by Dean Jenkins that more comprehensively address the issue (grouped under subject "Improve ASIX RX memory allocation error handling") should be preferred.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help