lkml.org 
[lkml]   [2018]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 028/135] net: qualcomm: rmnet: Fix incorrect allocation flag in transmit
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>

    [ Upstream commit 6392ff3c8e4c23d0a09b0ae9f94feb3effed490b ]

    The incoming skb needs to be reallocated in case the headroom
    is not sufficient to add the MAP header. This allocation needs to
    be atomic otherwise it results in the following splat

    [32805.801456] BUG: sleeping function called from invalid context
    [32805.841141] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    [32805.904773] task: ffffffd7c5f62280 task.stack: ffffff80464a8000
    [32805.910851] pc : ___might_sleep+0x180/0x188
    [32805.915143] lr : ___might_sleep+0x180/0x188
    [32806.131520] Call trace:
    [32806.134041] ___might_sleep+0x180/0x188
    [32806.137980] __might_sleep+0x50/0x84
    [32806.141653] __kmalloc_track_caller+0x80/0x3bc
    [32806.146215] __kmalloc_reserve+0x3c/0x88
    [32806.150241] pskb_expand_head+0x74/0x288
    [32806.154269] rmnet_egress_handler+0xb0/0x1d8
    [32806.162239] rmnet_vnd_start_xmit+0xc8/0x13c
    [32806.166627] dev_hard_start_xmit+0x148/0x280
    [32806.181181] sch_direct_xmit+0xa4/0x198
    [32806.185125] __qdisc_run+0x1f8/0x310
    [32806.188803] net_tx_action+0x23c/0x26c
    [32806.192655] __do_softirq+0x220/0x408
    [32806.196420] do_softirq+0x4c/0x70

    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
    +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
    @@ -147,7 +147,7 @@ static int rmnet_map_egress_handler(stru
    }

    if (skb_headroom(skb) < required_headroom) {
    - if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL))
    + if (pskb_expand_head(skb, required_headroom, 0, GFP_ATOMIC))
    return -ENOMEM;
    }


    \
     
     \ /
      Last update: 2018-10-16 19:12    [W:4.083 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site