lkml.org 
[lkml]   [2018]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 103/328] net: 6lowpan: fix reserved space for single frames
    3.16.62-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: Alexander Aring <aring@mojatatu.com>

    commit ac74f87c789af40936a80131c4759f3e72579c3a upstream.

    This patch fixes patch add handling to take care tail and headroom for
    single 6lowpan frames. We need to be sure we have a skb with the right
    head and tailroom for single frames. This patch do it by using
    skb_copy_expand() if head and tailroom is not enough allocated by upper
    layer.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=195059
    Reported-by: David Palma <david.palma@ntnu.no>
    Reported-by: Rabi Narayan Sahoo <rabinarayans0828@gmail.com>
    Signed-off-by: Alexander Aring <aring@mojatatu.com>
    Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
    [bwh: Backported to 3.16:
    - s/ldev/dev/
    - Adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    net/ieee802154/6lowpan_rtnl.c | 21 ++++++++++++++++++---
    1 file changed, 18 insertions(+), 3 deletions(-)

    --- a/net/ieee802154/6lowpan_rtnl.c
    +++ b/net/ieee802154/6lowpan_rtnl.c
    @@ -388,9 +388,24 @@ static netdev_tx_t lowpan_xmit(struct sk
    /* We must take a copy of the skb before we modify/replace the ipv6
    * header as the header could be used elsewhere
    */
    - skb = skb_unshare(skb, GFP_ATOMIC);
    - if (!skb)
    - return NET_XMIT_DROP;
    + if (unlikely(skb_headroom(skb) < dev->needed_headroom ||
    + skb_tailroom(skb) < dev->needed_tailroom)) {
    + struct sk_buff *nskb;
    +
    + nskb = skb_copy_expand(skb, dev->needed_headroom,
    + dev->needed_tailroom, GFP_ATOMIC);
    + if (likely(nskb)) {
    + consume_skb(skb);
    + skb = nskb;
    + } else {
    + kfree_skb(skb);
    + return NET_XMIT_DROP;
    + }
    + } else {
    + skb = skb_unshare(skb, GFP_ATOMIC);
    + if (!skb)
    + return NET_XMIT_DROP;
    + }

    ret = lowpan_header(skb, dev);
    if (ret < 0) {
    \
     
     \ /
      Last update: 2018-12-09 23:18    [W:4.022 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site