On Tue, 2007-07-03 at 16:11 +0200, Patrick McHardy wrote:

> >>>-  nlk->groups = kzalloc(NLGRPSZ(groups), GFP_KERNEL);
> >>>-  if (nlk->groups == NULL)
> >>>+  if (nlk->ngroups >= groups)
> >>>+          return 0;
> >>>+
> >>>+  new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_KERNEL);
> >>>+  if (new_groups == NULL)
> >>>           return -ENOMEM;
> >>>+  memset((char*)new_groups + NLGRPSZ(nlk->ngroups), 0,
> >>>+         NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups));
> >>>+  nlk->groups = new_groups;
> >>
> >>
> >>This should probably happen with the table grabbed to avoid races
> >>with concurrent broadcasts.
> > 
> > 
> > Hmm, possibly, I'll have to look again.
> 
> 
> do_one_broadcast locks the table and checks nlk->groups. The
> reallocation races with this without taking the lock or maybe
> using rcu.

Yeah, sounds about right, but since we lock the table anyway I see
little use in using RCU here. I'll look into it and also double-check
the first hunk of this patch.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to