Hi,

I'm experiencing panics like this
http://marc.theaimsgroup.com/?l=openbsd-bugs&m=116195951931755&w=2

I'm running 3.8 (generic kernel), the post above is about 4.0 and from
what I can tell the relevant code is the same in cvs.

What happens is the following: the ppp link goes down which is
discovered by the sppp_keepalive timeout handler (invoked in interrupt
context in softclock - if i'm not mistaken about the interrupt context
here). Subsequently, the sppp interface is taken down and pf tries to
adjust the firewall rules.

During this, pfr_create_kentry allocates memory, using the
non-interrupt-safe pool (which is what it is supposed to do, as it was
invoked with intr = 0).

pfr_create_kentry is invoked by pfr_set_addrs which doesn't have
information about whether it is in an interrupt context or not, and thus
always passes intr = 0.

So somewhere on the path down from sppp_keepalive to pfr_create_kentry,
the information about being in an interrupt context has to be passed down.

any opinions on this? I 'fixed' this by ignoring the flag intr and
checking for curproc == NULL in pfr_create_kentry... better suggestions
are wellcome

regards
-- jochen

Reply via email to