mirror of
https://github.com/systemd/systemd
synced 2024-10-15 04:24:19 +00:00
network/tc: fix stack overflow when dropping tclass or qdisc
Fixes a bug introduced by be8e933900
(v255).
Fixes #32247.
Fixes #32254.
This commit is contained in:
parent
bffc1a28d5
commit
632d321050
|
@ -293,14 +293,20 @@ QDisc* qdisc_drop(QDisc *qdisc) {
|
|||
|
||||
link = ASSERT_PTR(qdisc->link);
|
||||
|
||||
qdisc_mark(qdisc); /* To avoid stack overflow. */
|
||||
|
||||
/* also drop all child classes assigned to the qdisc. */
|
||||
SET_FOREACH(tclass, link->tclasses) {
|
||||
if (tclass_is_marked(tclass))
|
||||
continue;
|
||||
|
||||
if (TC_H_MAJ(tclass->classid) != qdisc->handle)
|
||||
continue;
|
||||
|
||||
tclass_drop(tclass);
|
||||
}
|
||||
|
||||
qdisc_unmark(qdisc);
|
||||
qdisc_enter_removed(qdisc);
|
||||
|
||||
if (qdisc->state == 0) {
|
||||
|
|
|
@ -260,14 +260,20 @@ TClass* tclass_drop(TClass *tclass) {
|
|||
|
||||
link = ASSERT_PTR(tclass->link);
|
||||
|
||||
tclass_mark(tclass); /* To avoid stack overflow. */
|
||||
|
||||
/* Also drop all child qdiscs assigned to the class. */
|
||||
SET_FOREACH(qdisc, link->qdiscs) {
|
||||
if (qdisc_is_marked(qdisc))
|
||||
continue;
|
||||
|
||||
if (qdisc->parent != tclass->classid)
|
||||
continue;
|
||||
|
||||
qdisc_drop(qdisc);
|
||||
}
|
||||
|
||||
tclass_unmark(tclass);
|
||||
tclass_enter_removed(tclass);
|
||||
|
||||
if (tclass->state == 0) {
|
||||
|
|
Loading…
Reference in a new issue