Bug #377

Fwd: [PATCH] netem: fix possible skb leak

Added by David Taht about 1 year ago.

Status:New Start date:
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:- Spent time: -
Target version:-

Description

---------- Forwarded message ----------
From: Eric Dumazet <>
Date: Sun, Apr 29, 2012 at 12:08 PM
Subject: [PATCH] netem: fix possible skb leak
To: David Miller <>
Cc: netdev <>, Stephen Hemminger <>

From: Eric Dumazet <>

skb_checksum_help(skb) can return an error, we must free skb in this
case. qdisc_drop(skb, sch) can also be feeded with a NULL skb (if
skb_unshare() failed), so lets use this generic helper.

Signed-off-by: Eric Dumazet <>
Cc: Stephen Hemminger <>
---
 net/sched/sch_netem.c |    6 +----
 1 file changed, 2 insertions(
), 4 deletions(-)

diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 5da548f..ebd2296 100644
--- a/net/sched/sch_netem.c
++ b/net/sched/sch_netem.c
@ -408,10 +408,8 @ static int netem_enqueue(struct sk_buff *skb,
struct Qdisc *sch)
       if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {
               if (!(skb = skb_unshare(skb, GFP_ATOMIC)) ||
                   (skb->ip_summed == CHECKSUM_PARTIAL &&
-                    skb_checksum_help(skb))) {
-                       sch->qstats.drops
+;
-                       return NET_XMIT_DROP;
-               }
+                    skb_checksum_help(skb)))
+                       return qdisc_drop(skb, sch);

               skb->data[net_random() % skb_headlen(skb)] ^=
1<<(net_random() % 8);
       }

Also available in: Atom PDF