diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 875f521bce0d17ec93e7337cc041c31db82a65f6..30e32df5f84a74b6d5d3c6335fe55182bc9cd193 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -947,9 +947,13 @@ void qdisc_free(struct Qdisc *qdisc) void qdisc_destroy(struct Qdisc *qdisc) { - const struct Qdisc_ops *ops = qdisc->ops; + const struct Qdisc_ops *ops; struct sk_buff *skb, *tmp; + if (!qdisc) + return; + ops = qdisc->ops; + if (qdisc->flags & TCQ_F_BUILTIN || !refcount_dec_and_test(&qdisc->refcnt)) return;