diff options
author | David S. Miller <davem@davemloft.net> | 2011-02-07 19:54:14 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-02-07 19:54:14 -0800 |
commit | 429a01a70f301baf0c8fc780f891a18c296d5e24 (patch) | |
tree | 663ee8a8c0a47d364648d5f905f185e875e48d62 | |
parent | 95c3043008ca8449feb96aba5481fe31c2ea750b (diff) | |
parent | 531c9da8c854c5b075383253a57fdd4e0be82e99 (diff) |
Merge branch 'batman-adv/merge' of git://git.open-mesh.org/ecsv/linux-merge
-rw-r--r-- | net/batman-adv/unicast.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index ee41fef04b21..d1a611322549 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c @@ -50,12 +50,12 @@ static struct sk_buff *frag_merge_packet(struct list_head *head, skb = tfp->skb; } + if (skb_linearize(skb) < 0 || skb_linearize(tmp_skb) < 0) + goto err; + skb_pull(tmp_skb, sizeof(struct unicast_frag_packet)); - if (pskb_expand_head(skb, 0, tmp_skb->len, GFP_ATOMIC) < 0) { - /* free buffered skb, skb will be freed later */ - kfree_skb(tfp->skb); - return NULL; - } + if (pskb_expand_head(skb, 0, tmp_skb->len, GFP_ATOMIC) < 0) + goto err; /* move free entry to end */ tfp->skb = NULL; @@ -70,6 +70,11 @@ static struct sk_buff *frag_merge_packet(struct list_head *head, unicast_packet->packet_type = BAT_UNICAST; return skb; + +err: + /* free buffered skb, skb will be freed later */ + kfree_skb(tfp->skb); + return NULL; } static void frag_create_entry(struct list_head *head, struct sk_buff *skb) |