On 2019/07/10 23:27, Alexandr Nedvedicky wrote:
> Hello Stuart,
>
> On Wed, Jul 10, 2019 at 08:19:13PM +0100, Stuart Henderson wrote:
> > On 2019/07/05 17:09, YASUOKA Masahiko wrote:
> > > Hi,
> > >
> > > Previous diff made src-node have a reference for the kif. My
> > > colleague pointed out that incrementing the reference count of the kif
> > > is required.
> > >
> > > ok?
> > >
> > > Fix previous commit which made src-node have a reference for the kif.
> > > Src-node should use the reference counter since it might live longer
> > > than its table entry, rule or the associated states.
> >
> > I'm seeing crashes soon after starting network which must be related
> > to this.
> >
> > I have a few rules with standard "max-src-conn-rate" options, e.g.
> > "keep state (max-src-conn-rate 5/8 overload <BADHOSTS> flush global)"
> > If I remove the max-src-conn-rate things are stable again.
> >
>
> does patch below fix the NULL pointer dereference panic for you?
>
> thanks for report and
> sorry for inconveniences
>
> sashan
Yes, that's working OK here now, thanks for the quick response.
> --------8<---------------8<---------------8<------------------8<--------
> diff --git a/sys/net/pf.c b/sys/net/pf.c
> index 26c3d420254..9addec6d788 100644
> --- a/sys/net/pf.c
> +++ b/sys/net/pf.c
> @@ -586,10 +586,12 @@ pf_insert_src_node(struct pf_src_node **sn, struct
> pf_rule *rule,
> }
> (*sn)->creation = time_uptime;
> (*sn)->rule.ptr->src_nodes++;
> - (*sn)->kif = kif;
> + if (kif != NULL) {
> + (*sn)->kif = kif;
> + pfi_kif_ref(kif, PFI_KIF_REF_SRCNODE);
> + }
> pf_status.scounters[SCNT_SRC_NODE_INSERT]++;
> pf_status.src_nodes++;
> - pfi_kif_ref(kif, PFI_KIF_REF_SRCNODE);
> } else {
> if (rule->max_src_states &&
> (*sn)->states >= rule->max_src_states) {
>