diff options
author | Thomas Graf <tgraf@suug.ch> | 2005-08-23 13:12:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-08-23 13:12:44 -0400 |
commit | 0fbbeb1ba43bd04f0f1d4f161b7f72437a1c8a03 (patch) | |
tree | 80aff375f2b1de10a69743d73977df39f356dda5 /net | |
parent | d2287f844187158e5eddd0d5de8e95bd607abcb7 (diff) |
[PKT_SCHED]: Fix missing qdisc_destroy() in qdisc_create_dflt()
qdisc_create_dflt() is missing to destroy the newly allocated
default qdisc if the initialization fails resulting in leaks
of all kinds. The only caller in mainline which may trigger
this bug is sch_tbf.c in tbf_create_dflt_qdisc().
Note: qdisc_create_dflt() doesn't fulfill the official locking
requirements of qdisc_destroy() but since the qdisc could
never be seen by the outside world this doesn't matter
and it can stay as-is until the locking of pkt_sched
is cleaned up.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/sch_generic.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 8edefd5d095d..0d066c965342 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -438,6 +438,7 @@ struct Qdisc * qdisc_create_dflt(struct net_device *dev, struct Qdisc_ops *ops) | |||
438 | if (!ops->init || ops->init(sch, NULL) == 0) | 438 | if (!ops->init || ops->init(sch, NULL) == 0) |
439 | return sch; | 439 | return sch; |
440 | 440 | ||
441 | qdisc_destroy(sch); | ||
441 | errout: | 442 | errout: |
442 | return NULL; | 443 | return NULL; |
443 | } | 444 | } |