• Maxim Mikityanskiy's avatar
    sch_htb: Fix offload cleanup in htb_destroy on htb_init failure · fb3a3e37
    Maxim Mikityanskiy authored
    htb_init may fail to do the offload if it's not supported or if a
    runtime error happens when allocating direct qdiscs. In those cases
    TC_HTB_CREATE command is not sent to the driver, however, htb_destroy
    gets called anyway and attempts to send TC_HTB_DESTROY.
    
    It shouldn't happen, because the driver didn't receive TC_HTB_CREATE,
    and also because the driver may not support ndo_setup_tc at all, while
    q->offload is true, and htb_destroy mistakenly thinks the offload is
    supported. Trying to call ndo_setup_tc in the latter case will lead to a
    NULL pointer dereference.
    
    This commit fixes the issues with htb_destroy by deferring assignment of
    q->offload until after the TC_HTB_CREATE command. The necessary cleanup
    of the offload entities is already done in htb_init.
    
    Reported-by: syzbot+b53a709f04722ca12a3c@syzkaller.appspotmail.com
    Fixes: d03b195b ("sch_htb: Hierarchical QoS hardware offload")
    Suggested-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarMaxim Mikityanskiy <maximmi@nvidia.com>
    Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fb3a3e37
sch_htb.c 53.9 KB