• G
    net: sched: Fix one possible panic when no destroy callback · c1a4872e
    Gao Feng 提交于
    When qdisc fail to init, qdisc_create would invoke the destroy callback
    to cleanup. But there is no check if the callback exists really. So it
    would cause the panic if there is no real destroy callback like the qdisc
    codel, fq, and so on.
    
    Take codel as an example following:
    When a malicious user constructs one invalid netlink msg, it would cause
    codel_init->codel_change->nla_parse_nested failed.
    Then kernel would invoke the destroy callback directly but qdisc codel
    doesn't define one. It causes one panic as a result.
    
    Now add one the check for destroy to avoid the possible panic.
    
    Fixes: 87b60cfa ("net_sched: fix error recovery at qdisc creation")
    Signed-off-by: NGao Feng <gfree.wind@vip.163.com>
    Acked-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    c1a4872e
sch_api.c 46.8 KB