Re: [PATCH nf-next v4] netfilter: nft_ct: add ct timeout support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Harsha Sharma <harshasharmaiitr@xxxxxxxxx> wrote:
> +ctnl_timeout_parse_policy(void *timeouts,
> +			  const struct nf_conntrack_l4proto *l4proto,
> +			  struct net *net, const struct nlattr *attr)
> +{
> +	int ret = 0;
> +	struct nlattr **tb;
> +
> +	if (!l4proto->ctnl_timeout.nlattr_to_obj)
> +		return 0;

You'll need to warp this with
#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)

else this fails to build with CONFIG_NF_CT_NETLINK_TIMEOUT=n.

> +static void nft_ct_timeout_obj_eval(struct nft_object *obj,
> +				    struct nft_regs *regs,
> +				    const struct nft_pktinfo *pkt)
> +{
> +	const struct nft_ct_timeout_obj *priv = nft_obj_data(obj);
> +	struct ctnl_timeout *to_assign = NULL;
> +	struct nf_conn_timeout *timeout_ext;
> +	struct sk_buff *skb = pkt->skb;
> +
> +	if (!priv->tmpl ||

Better let nft_ct_timeout_obj_init() fail so priv->tmpl is always set.

> +	    nf_ct_is_confirmed(priv->tmpl))
> +		return;

Uncessery, the template cannot be confirmed (else bug).

> +	to_assign = priv->timeout;
> +
> +	nf_ct_set(skb, priv->tmpl, IP_CT_NEW);

You will need to check that no previous conntrack exists here.

> +	timeout_ext = nf_ct_timeout_ext_add(priv->tmpl, priv->timeout, GFP_ATOMIC);

This looks strange.  The timeout extension either has to be attached to
the template (but then this has to happen in init, not here).

> +	if (timeout_ext) {
> +		rcu_assign_pointer(timeout_ext->timeout, to_assign);
> +		__set_bit(IPS_CONFIRMED_BIT, &priv->tmpl->status);

Hmm, no, CONFIRMED means conntrack was inserted into the hash table,
this must never happen for templates.

Unrelated to your patch: I think timeout handling is braindead
in current conntrack, we should revisit this.

Right now there is a bizarre mix of getter (l4proto->get_timeout()),
which is then passed to l4proto->new() (but only used by gre), and a
conntrack extension, to pass timeouts from raw table to nf_conntrack_in.

It seems saner to revisit this design, remove l4proto->get_timeout(),
and have the l4 trackers get the timeout from the conntrack extension
(if present) or the pernetns data themselves.

This would also simplify this patch: you'd only have to fetch the
conntrack, check if its unconfirmed, and then call
nf_ct_timeout_ext_add() on it.  No template needed.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux