Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21de12ee authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

netem: fix a use after free



If the packet was dropped by lower qdisc, then we must not
access it later.

Save qdisc_pkt_len(skb) in a temp variable.

Fixes: 2ccccf5f ("net_sched: update hierarchical backlog too")
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Cc: WANG Cong <xiyou.wangcong@gmail.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 817e9f2c
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -650,14 +650,14 @@ static struct sk_buff *netem_dequeue(struct Qdisc *sch)
#endif

			if (q->qdisc) {
				unsigned int pkt_len = qdisc_pkt_len(skb);
				int err = qdisc_enqueue(skb, q->qdisc);

				if (unlikely(err != NET_XMIT_SUCCESS)) {
					if (net_xmit_drop_count(err)) {
				if (err != NET_XMIT_SUCCESS &&
				    net_xmit_drop_count(err)) {
					qdisc_qstats_drop(sch);
					qdisc_tree_reduce_backlog(sch, 1,
									  qdisc_pkt_len(skb));
					}
								  pkt_len);
				}
				goto tfifo_dequeue;
			}