On Thu, Jun 13, 2019 at 01:18:52PM +0200, Kevin Darbyshire-Bryant wrote:
> Use extack error reporting mechanism in addition to returning -EINVAL
> 
> Signed-off-by: Kevin Darbyshire-Bryant <l...@darbyshire-bryant.me.uk>

Nice. LGTM!

> ---
>  net/sched/act_ctinfo.c | 23 ++++++++++++++++++-----
>  1 file changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c
> index e78b60e47c0f..a7d3679d7e2e 100644
> --- a/net/sched/act_ctinfo.c
> +++ b/net/sched/act_ctinfo.c
> @@ -165,15 +165,20 @@ static int tcf_ctinfo_init(struct net *net, struct 
> nlattr *nla,
>       u8 dscpmaskshift;
>       int ret = 0, err;
>  
> -     if (!nla)
> +     if (!nla) {
> +             NL_SET_ERR_MSG_MOD(extack, "ctinfo requires attributes to be 
> passed");
>               return -EINVAL;
> +     }
>  
> -     err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, NULL);
> +     err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, extack);
>       if (err < 0)
>               return err;
>  
> -     if (!tb[TCA_CTINFO_ACT])
> +     if (!tb[TCA_CTINFO_ACT]) {
> +             NL_SET_ERR_MSG_MOD(extack,
> +                                "Missing required TCA_CTINFO_ACT attribute");
>               return -EINVAL;
> +     }
>       actparm = nla_data(tb[TCA_CTINFO_ACT]);
>  
>       /* do some basic validation here before dynamically allocating things */
> @@ -182,13 +187,21 @@ static int tcf_ctinfo_init(struct net *net, struct 
> nlattr *nla,
>               dscpmask = nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_MASK]);
>               /* need contiguous 6 bit mask */
>               dscpmaskshift = dscpmask ? __ffs(dscpmask) : 0;
> -             if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f)
> +             if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f) {
> +                     NL_SET_ERR_MSG_ATTR(extack,
> +                                         tb[TCA_CTINFO_PARMS_DSCP_MASK],
> +                                         "dscp mask must be 6 contiguous 
> bits");
>                       return -EINVAL;
> +             }
>               dscpstatemask = tb[TCA_CTINFO_PARMS_DSCP_STATEMASK] ?
>                       nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_STATEMASK]) : 0;
>               /* mask & statemask must not overlap */
> -             if (dscpmask & dscpstatemask)
> +             if (dscpmask & dscpstatemask) {
> +                     NL_SET_ERR_MSG_ATTR(extack,
> +                                         tb[TCA_CTINFO_PARMS_DSCP_STATEMASK],
> +                                         "dscp statemask must not overlap 
> dscp mask");
>                       return -EINVAL;
> +             }
>       }
>  
>       /* done the validation:now to the actual action allocation */
> -- 
> 2.20.1 (Apple Git-117)
> 

Reply via email to