staging:r8188eu: eleminate recovery attemp using skb_clone after netdev_alloc_skb...
authorIvan Safonov <insafonov@gmail.com>
Wed, 4 Jan 2017 10:22:17 +0000 (17:22 +0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Jan 2017 17:50:05 +0000 (18:50 +0100)
It is wrong to create new skb using skb_clone instead netdev_alloc_skb,
because buffer data will be changed later.

Signed-off-by: Ivan Safonov <insafonov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c

index e2dbe1b..5f6cbe0 100644 (file)
@@ -133,22 +133,9 @@ static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
                        precvframe->rx_tail = pkt_copy->data;
                        precvframe->rx_data = pkt_copy->data;
                } else {
-                       if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) {
-                               DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n");
-                               rtw_free_recvframe(precvframe, pfree_recv_queue);
-                               goto _exit_recvbuf2recvframe;
-                       }
-                       precvframe->pkt = skb_clone(pskb, GFP_ATOMIC);
-                       if (precvframe->pkt) {
-                               precvframe->rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE;
-                               precvframe->rx_head = precvframe->rx_tail;
-                               precvframe->rx_data = precvframe->rx_tail;
-                               precvframe->rx_end =  pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz;
-                       } else {
-                               DBG_88E("recvbuf2recvframe: skb_clone fail\n");
-                               rtw_free_recvframe(precvframe, pfree_recv_queue);
-                               goto _exit_recvbuf2recvframe;
-                       }
+                       DBG_88E("recvbuf2recvframe: alloc_skb fail , drop frag frame\n");
+                       rtw_free_recvframe(precvframe, pfree_recv_queue);
+                       goto _exit_recvbuf2recvframe;
                }
 
                recvframe_put(precvframe, skb_len);