tech-net archive

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

Re: Making bpf MPSAFE (was Re: struct ifnet and ifaddr handling ...)



On 7/08/2014 7:49 PM, Ryota Ozaki wrote:
> Hi,
>
> I thought I need more experience of pserialize
> (and lock primitives) to tackle ifnet work.
> So I suspended the work and now I am trying
> another easier task, bpf.
>
> http://www.netbsd.org/~ozaki-r/mpsafe-bpf.diff
>

This code has race conditions built into it where locks are
dropped for others to be acquiredwith no knowledge stored
anywhere that a critical section of code is being executed:


+        mutex_exit(d->bd_lock);
+        KERNEL_LOCK(1, NULL);

What you need here is a perimeter mechanism that doesn't
hold any locks over the inner section of code.

This needs to be fixed:

        error = tsleep(d, PRINET|PCATCH, "bpf", d->bd_rtout);

- it should actually be a cv_timedwait_sig() on bd_lock.

Darren



Home | Main Index | Thread Index | Old Index