Commit 2a3ce3aa authored by Thomas Graf's avatar Thomas Graf Committed by David S. Miller

[PKT_SCHED]: Fix slab corruption in cbq_destroy

Fixes slab corruption in cbq_destroy. cbq_destroy_filters and
qdisc_put_rtab(q->link.R_tab) are already called in cbq_destroy_class.
The latter lead to a slab corruption due to repeated freeing of
q->link.R_tab because q->link is part of q->classes. Problem introduced
in 1.21.
Signed-off-by: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 54bb03e0
...@@ -1770,10 +1770,6 @@ cbq_destroy(struct Qdisc* sch) ...@@ -1770,10 +1770,6 @@ cbq_destroy(struct Qdisc* sch)
#ifdef CONFIG_NET_CLS_POLICE #ifdef CONFIG_NET_CLS_POLICE
q->rx_class = NULL; q->rx_class = NULL;
#endif #endif
for (h = 0; h < 16; h++) {
for (cl = q->classes[h]; cl; cl = cl->next)
cbq_destroy_filters(cl);
}
for (h = 0; h < 16; h++) { for (h = 0; h < 16; h++) {
struct cbq_class *next; struct cbq_class *next;
...@@ -1783,8 +1779,6 @@ cbq_destroy(struct Qdisc* sch) ...@@ -1783,8 +1779,6 @@ cbq_destroy(struct Qdisc* sch)
cbq_destroy_class(sch, cl); cbq_destroy_class(sch, cl);
} }
} }
qdisc_put_rtab(q->link.R_tab);
} }
static void cbq_put(struct Qdisc *sch, unsigned long arg) static void cbq_put(struct Qdisc *sch, unsigned long arg)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment