net_sched: fix estimator lock selection for mq child qdiscs
authorPatrick McHardy <kaber@trash.net>
Thu, 10 Sep 2009 01:11:23 +0000 (18:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 10 Sep 2009 01:11:23 +0000 (18:11 -0700)
commit23bcf634c8bc0d84607a5b863333191d58baee4c
treebc988ab6230bebf47e1dc22db70f94901ac2eeb5
parentea6a634ef7f0ab1d1f48ba0ad4f50e96d6065312
net_sched: fix estimator lock selection for mq child qdiscs

When new child qdiscs are attached to the mq qdisc, they are actually
attached as root qdiscs to the device queues. The lock selection for
new estimators incorrectly picks the root lock of the existing and
to be replaced qdisc, which results in a use-after-free once the old
qdisc has been destroyed.

Mark mq qdisc instances with a new flag and treat qdiscs attached to
mq as children similar to regular root qdiscs.

Additionally prevent estimators from being attached to the mq qdisc
itself since it only updates its byte and packet counters during dumps.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sch_generic.h
net/sched/sch_api.c
net/sched/sch_mq.c