mirror of
https://github.com/systemd/systemd.git
synced 2025-03-10 16:58:28 +03:00
network/tc: fix stack overflow when dropping tclass or qdisc
Fixes a bug introduced by be8e93390003e45acbb318c6e1e48fbc3c772f78 (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…
x
Reference in New Issue
Block a user