sch_hfsc: fix null pointer deref and double free on init failure
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Wed, 30 Aug 2017 09:49:00 +0000 (12:49 +0300)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 11 Nov 2017 13:34:36 +0000 (13:34 +0000)
commitc80cb643423d8ea1748f57c51480742f554830ec
tree439e5a2910e7e04efbffd78cfd4541179c55664e
parent1c2197aa2ed034eb01faf94aa0b4e3a972216244
sch_hfsc: fix null pointer deref and double free on init failure

commit 3bdac362a2f89ed3e148fa6f38c5f5d858f50b1a upstream.

Depending on where ->init fails we can get a null pointer deref due to
uninitialized hires timer (watchdog) or a double free of the qdisc hash
because it is already freed by ->destroy().

Fixes: 8d5537387505 ("net/sched/hfsc: allocate tcf block for hfsc root class")
Fixes: 87b60cfacf9f ("net_sched: fix error recovery at qdisc creation")
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.2: sch_hfsc doesn't use a tcf block]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/sched/sch_hfsc.c