All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
To: wenxu@ucloud.cn
Cc: jhs@mojatatu.com, kuba@kernel.org, netdev@vger.kernel.org,
	Marcelo Ricardo Leitner <mleitner@redhat.com>
Subject: Re: [PATCH net v5] net/sched: cls_flower: Reject invalid ct_state flags rules
Date: Tue, 9 Feb 2021 21:12:52 -0300	[thread overview]
Message-ID: <20210210001252.GI2953@horizon.localdomain> (raw)
In-Reply-To: <1612852669-4165-1-git-send-email-wenxu@ucloud.cn>

On Tue, Feb 09, 2021 at 02:37:49PM +0800, wenxu@ucloud.cn wrote:
> --- a/net/sched/cls_flower.c
> +++ b/net/sched/cls_flower.c
> @@ -30,6 +30,11 @@
>  
>  #include <uapi/linux/netfilter/nf_conntrack_common.h>
>  
> +#define TCA_FLOWER_KEY_CT_FLAGS_MAX \
> +		((__TCA_FLOWER_KEY_CT_FLAGS_MAX - 1) << 1)
> +#define TCA_FLOWER_KEY_CT_FLAGS_MASK \
> +		(TCA_FLOWER_KEY_CT_FLAGS_MAX - 1)
> +
>  struct fl_flow_key {
>  	struct flow_dissector_key_meta meta;
>  	struct flow_dissector_key_control control;
> @@ -686,8 +691,10 @@ static void *fl_get(struct tcf_proto *tp, u32 handle)
>  	[TCA_FLOWER_KEY_ENC_IP_TTL_MASK] = { .type = NLA_U8 },
>  	[TCA_FLOWER_KEY_ENC_OPTS]	= { .type = NLA_NESTED },
>  	[TCA_FLOWER_KEY_ENC_OPTS_MASK]	= { .type = NLA_NESTED },
> -	[TCA_FLOWER_KEY_CT_STATE]	= { .type = NLA_U16 },
> -	[TCA_FLOWER_KEY_CT_STATE_MASK]	= { .type = NLA_U16 },
> +	[TCA_FLOWER_KEY_CT_STATE]	=
> +		NLA_POLICY_MASK(NLA_U16, TCA_FLOWER_KEY_CT_FLAGS_MASK),
> +	[TCA_FLOWER_KEY_CT_STATE_MASK]	=
> +		NLA_POLICY_MASK(NLA_U16, TCA_FLOWER_KEY_CT_FLAGS_MASK),
>  	[TCA_FLOWER_KEY_CT_ZONE]	= { .type = NLA_U16 },
>  	[TCA_FLOWER_KEY_CT_ZONE_MASK]	= { .type = NLA_U16 },
>  	[TCA_FLOWER_KEY_CT_MARK]	= { .type = NLA_U32 },
> @@ -1390,12 +1397,33 @@ static int fl_set_enc_opt(struct nlattr **tb, struct fl_flow_key *key,
>  	return 0;
>  }
>  
> +static int fl_validate_ct_state(u16 state, struct nlattr *tb,
> +				struct netlink_ext_ack *extack)
> +{
> +	if (state && !(state & TCA_FLOWER_KEY_CT_FLAGS_TRACKED)) {
> +		NL_SET_ERR_MSG_ATTR(extack, tb,
> +				    "no trk, so no other flag can be set");

I just tested iproute2 and it can't report based on the attr here.
Nonetheless, that would be iproute2 job and not the errmsg, I think.

Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

Thanks!

> +		return -EINVAL;
> +	}
> +
> +	if (state & TCA_FLOWER_KEY_CT_FLAGS_NEW &&
> +	    state & TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED) {
> +		NL_SET_ERR_MSG_ATTR(extack, tb,
> +				    "new and est are mutually exclusive");
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
>  static int fl_set_key_ct(struct nlattr **tb,
>  			 struct flow_dissector_key_ct *key,
>  			 struct flow_dissector_key_ct *mask,
>  			 struct netlink_ext_ack *extack)
>  {
>  	if (tb[TCA_FLOWER_KEY_CT_STATE]) {
> +		int err;
> +
>  		if (!IS_ENABLED(CONFIG_NF_CONNTRACK)) {
>  			NL_SET_ERR_MSG(extack, "Conntrack isn't enabled");
>  			return -EOPNOTSUPP;
> @@ -1403,6 +1431,13 @@ static int fl_set_key_ct(struct nlattr **tb,
>  		fl_set_key_val(tb, &key->ct_state, TCA_FLOWER_KEY_CT_STATE,
>  			       &mask->ct_state, TCA_FLOWER_KEY_CT_STATE_MASK,
>  			       sizeof(key->ct_state));
> +
> +		err = fl_validate_ct_state(mask->ct_state,
> +					   tb[TCA_FLOWER_KEY_CT_STATE_MASK],
> +					   extack);
> +		if (err)
> +			return err;
> +
>  	}
>  	if (tb[TCA_FLOWER_KEY_CT_ZONE]) {
>  		if (!IS_ENABLED(CONFIG_NF_CONNTRACK_ZONES)) {
> -- 
> 1.8.3.1
> 

  reply	other threads:[~2021-02-10  0:35 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-09  6:37 [PATCH net v5] net/sched: cls_flower: Reject invalid ct_state flags rules wenxu
2021-02-10  0:12 ` Marcelo Ricardo Leitner [this message]
2021-02-10 18:56 ` Jakub Kicinski
2021-02-10 23:40 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210210001252.GI2953@horizon.localdomain \
    --to=marcelo.leitner@gmail.com \
    --cc=jhs@mojatatu.com \
    --cc=kuba@kernel.org \
    --cc=mleitner@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=wenxu@ucloud.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.