Re: [PATCH] netfilter: nf_tables: delete table via table handle

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

 



On Sun, Jan 07, 2018 at 02:49:29PM +0530, Harsha Sharma wrote:
> On Sun, Jan 7, 2018 at 4:32 AM, Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> wrote:
> > On Sun, Jan 07, 2018 at 12:00:15AM +0530, Harsha Sharma wrote:
> >> This patch add code to delete table via unique table handle.
> >>
> >> Signed-off-by: Harsha Sharma <harshasharmaiitr@xxxxxxxxx>
> >> ---
> >>  net/netfilter/nf_tables_api.c | 99 ++++++++++++++++++++++++++++++++++++++++---
> >>  1 file changed, 92 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
> >> index dabdd2ed66c8..3b1c879fdf61 100644
> >> --- a/net/netfilter/nf_tables_api.c
> >> +++ b/net/netfilter/nf_tables_api.c
> >> @@ -73,6 +73,24 @@ static struct nft_af_info *nft_afinfo_lookup(struct net *net, int family)
> >>       return NULL;
> >>  }
> >>
> >> +static struct nft_af_info *nft_afinfo_lookup_byhandle(struct net *net,
> >> +                                                   u64 handle)
> >> +{
> >> +     struct nft_af_info *afi;
> >> +     struct nft_table *table;
> >> +     int table_handle_check_flag = 0;
> >> +
> >> +     list_for_each_entry(afi, &net->nft.af_info, list) {
> >> +             list_for_each_entry(table, &afi->tables, list) {
> >> +                     if (table->handle == handle)
> >> +                             table_handle_check_flag = 1;
> >
> > Use:
> >                                 return table;
> >
> > instead.
> 
> I have tried to do that but we need to have afi struct for flushing
> the tables so nft_afinfo_lookup_byhandle is required iirc.
> ctx.afi = afi;
> ctx.table = table;

If you need the afi structure, you can get the afi via the existing
nft_afinfo_lookup() function.

> >> +             }
> >> +             if (table_handle_check_flag)
> >> +                     return afi;
> >> +     }
> >> +     return NULL;
> >> +}
> >> +
> >>  static struct nft_af_info *
> >>  nf_tables_afinfo_lookup(struct net *net, int family, bool autoload)
> >>  {
> >> @@ -94,6 +112,27 @@ nf_tables_afinfo_lookup(struct net *net, int family, bool autoload)
> >>       return ERR_PTR(-EAFNOSUPPORT);
> >>  }
> >>
> >> +static struct nft_af_info *
> >> +nf_tables_afinfo_lookup_byhandle(struct net *net, u64 handle, bool autoload)
> >> +{
> >> +     struct nft_af_info *afi;
> >> +
> >> +     afi = nft_afinfo_lookup_byhandle(net, handle);
> >> +     if (afi != NULL)
> >> +             return afi;
> >> +#ifdef CONFIG_MODULES
> >> +     if (autoload) {
> >> +             nfnl_unlock(NFNL_SUBSYS_NFTABLES);
> >> +             request_module("nft-afinfo");
> >> +             nfnl_lock(NFNL_SUBSYS_NFTABLES);
> >> +             afi = nft_afinfo_lookup_byhandle(net, handle);
> >> +             if (afi != NULL)
> >> +                     return ERR_PTR(-EAGAIN);
> >> +     }
> >> +#endif
> >> +     return ERR_PTR(-EAFNOSUPPORT);
> >> +}
> >
> > I don't think you need this new nf_tables_afinfo_lookup_byhandle()
> > function. The handle parameter is never used. That will simplify your
> > patchset.
> 
> Using handle parameter in nft_afinfo_lookup_byhandle allows returning
> afi for which afi->family is same as family of table (which has to be
> deleted via table handle).
> For deleting table via table name, family is required (unless default
> ip family) nft delete table ip6 test-ip6, but as handle identifies
> each table uniquely, a check is required
> in nft_afinfo_lookup_byhandle for returning afi struct.
> So, this new func nf_tables_afinfo_lookup_byhandle is required for
> calling nft_afinfo_lookup_byhandle and otherwise returning error and
> also for checking CONFIG_MODULES.

Nope :), this is not required. You can just:

#1 Get afi structure via existing nft_afinfo_lookup() function.
#2 Call your new nf_tables_table_lookup_byhandle() function.

That will simplify this patch.
--
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