• Davide Caratti's avatar
    net/sched: fix idr leak in the error path of tcf_act_police_init() · 5bf7f818
    Davide Caratti authored
    tcf_act_police_init() can fail after the idr has been successfully
    reserved (e.g., qdisc_get_rtab() may return NULL). When this happens,
    subsequent attempts to configure a police rule using the same idr value
    systematiclly fail with -ENOSPC:
    
     # tc action add action police rate 1000 burst 1000 drop index 100
     RTNETLINK answers: Cannot allocate memory
     We have an error talking to the kernel
     # tc action add action police rate 1000 burst 1000 drop index 100
     RTNETLINK answers: No space left on device
     We have an error talking to the kernel
     # tc action add action police rate 1000 burst 1000 drop index 100
     RTNETLINK answers: No space left on device
     ...
    
    Fix this in the error path of tcf_act_police_init(), calling
    tcf_idr_release() in place of tcf_idr_cleanup().
    
    Fixes: 65a206c0 ("net/sched: Change act_api and act_xxx modules to use IDR")
    Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5bf7f818
act_police.c 9.22 KB