From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936067AbdADKVa (ORCPT ); Wed, 4 Jan 2017 05:21:30 -0500 Received: from mail-lf0-f66.google.com ([209.85.215.66]:32944 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759605AbdADKUI (ORCPT ); Wed, 4 Jan 2017 05:20:08 -0500 From: Ivan Safonov To: Greg Kroah-Hartman Cc: Bhaktipriya Shridhar , Ivan Safonov , Luca Ceresoli , Geliang Tang , Binoy Jayan , Victor Carvajal , Pierre-Yves Kerbrat , devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/5] staging:r8188eu: eleminate recovery attemp using skb_clone after netdev_alloc_skb fail Date: Wed, 4 Jan 2017 17:22:17 +0700 Message-Id: <20170104102218.12041-4-insafonov@gmail.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170104102218.12041-1-insafonov@gmail.com> References: <20170104102218.12041-1-insafonov@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c index e2dbe1b..5f6cbe0 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c +++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c @@ -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); -- 2.10.2