On Mon, Nov 27, 2017 at 06:22:59PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <j...@mellanox.com>
> 
> q->link.block is not initialized, that leads to EINVAL when one tries to
> add filter there. So initialize it properly.
> 
> This can be reproduced by:

By...? :-)

> 
> Reported-by: Jaroslav Aster <jas...@redhat.com>
> Reported-by: Ivan Vecera <ivec...@redhat.com>
> Fixes: 6529eaba33f0 ("net: sched: introduce tcf block infractructure")
> Signed-off-by: Jiri Pirko <j...@mellanox.com>
> ---
>  net/sched/sch_cbq.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
> index 6361be7..525eb3a 100644
> --- a/net/sched/sch_cbq.c
> +++ b/net/sched/sch_cbq.c
> @@ -1158,9 +1158,13 @@ static int cbq_init(struct Qdisc *sch, struct nlattr 
> *opt)
>       if ((q->link.R_tab = qdisc_get_rtab(r, tb[TCA_CBQ_RTAB])) == NULL)
>               return -EINVAL;
>  
> +     err = tcf_block_get(&q->link.block, &q->link.filter_list, sch);
> +     if (err)
> +             goto put_rtab;
> +
>       err = qdisc_class_hash_init(&q->clhash);
>       if (err < 0)
> -             goto put_rtab;
> +             goto put_block;
>  
>       q->link.sibling = &q->link;
>       q->link.common.classid = sch->handle;
> @@ -1194,6 +1198,9 @@ static int cbq_init(struct Qdisc *sch, struct nlattr 
> *opt)
>       cbq_addprio(q, &q->link);
>       return 0;
>  
> +put_block:
> +     tcf_block_put(q->link.block);
> +
>  put_rtab:
>       qdisc_put_rtab(q->link.R_tab);
>       return err;
> -- 
> 2.9.5
> 

Reply via email to