On Mon, Oct 12, 2015 at 11:13 +0200, Martin Pieuchot wrote:
> On 10/10/15(Sat) 20:02, Alexandr Nedvedicky wrote:
> > Hello,
> > 
> > Patch fixes two small nits related to source node table in PF (a.k.a.
> > pf_src_tree_tracking).
> > 
> > The first issue comes to `global` argument of pf_insert_src_node(). It is
> > always 0 everywhere in source code. The `global` is supposed to indicate
> > whether particular state is bound to global/main rule or to rule created on
> > behalf of admin. However in reality PF always uses 0 for `global` 
> > everywhere.
> 
> I'm ok with this with one nit below.
> 
> > The second issue is related to pf_remove_src_node() function, which refuses
> > the remove source node from table (pf_src_tree_tracking) if node to be 
> > removed
> > is not bound to rule (sn->rule.ptr == NULL). Such node would hang in tree
> > forever. I think we never hit this problem, since source node is always
> > bound to rule.
> 
> I don't know enough to say if it's correct or not, but I'd suggest
> sending another diff for that dealing with all the NULL checks :)
> What about pf_state_export() for example?
>

I think you might be confusing state rule pointers and source node
rule pointers.  I think Sasha has got all of the latter ones (albeit
with your correction), but on the other hand I would love to know
how st->rule.ptr can be NULL in the pf_state_export as pf_rm_rule is
not supposed to remove a rule with active states.

> > Index: pf.c
> > ===================================================================
> > RCS file: /cvs/src/sys/net/pf.c,v
> > retrieving revision 1.946
> > diff -u -p -r1.946 pf.c
> > --- pf.c    8 Oct 2015 11:36:51 -0000       1.946
> > +++ pf.c    10 Oct 2015 16:49:40 -0000
> > @@ -531,10 +528,7 @@ pf_insert_src_node(struct pf_src_node **
> >  
> >             (*sn)->type = type;
> >             (*sn)->af = af;
> > -           if (global)
> > -                   (*sn)->rule.ptr = NULL;
> > -           else
> > -                   (*sn)->rule.ptr = rule;
> > +           (*sn)->rule.ptr = rule;
> >             PF_ACPY(&(*sn)->addr, src, af);
> >             if (raddr)
> >                     PF_ACPY(&(*sn)->raddr, raddr, af);
> 
> Here can't you also change:
> 
>             if ((*sn)->rule.ptr != NULL)
>                     (*sn)->rule.ptr->src_nodes++;
> 
> into:
> 
>               (*sn)->rule.ptr->src_nodes++;
> 

I agree.

Reply via email to