Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Nov 2014 10:34:00 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 195407] New: relayd crashes kernel after update to 10.1-RELEASE
Message-ID:  <bug-195407-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=195407

            Bug ID: 195407
           Summary: relayd crashes kernel after update to 10.1-RELEASE
           Product: Base System
           Version: 10.1-RELEASE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: andrej.kolontai@verwaltung.uni-muenchen.de

Created attachment 149878
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=149878&action=edit
kernel crash report

We are using FreeBSD for our Firewalls and are actually happy with it. Since
recently we use relayd (installed via pkg) to do some load balancing stuff. On
a freshly installed machine running 10.0-RELEASE everything worked fine. 
On monday, I tried to upgrade to 10.1-RELEASE using freebsd-update as described
in the handbook chapter 24. At first everything looked good but relayd wouldn't
come up:

"Nov 24 10:50:48 flutters relayd[3300]: fatal: cannot add rule: Operation not
supported by device
Nov 24 10:50:48 flutters relayd[3293]: lost child: pfe exited abnormally"

When I tried to start it with /usr/local/etc/rc.d/relayd start the kernel
panicked. I had to roll back the update (which worked fine). However, I was
able to reproduce this behavior on a virtual machine. 


My guess is it happens here:
#7  0xffffffff81a37954 in pfr_detach_table (kt=0x0)
    at /usr/src_10.1.0/sys/modules/pf/../../netpfil/pf/pf_table.c:2047

The corresponding code is:
void
pfr_detach_table(struct pfr_ktable *kt)
{

        PF_RULES_WASSERT();
        KASSERT(kt->pfrkt_refcnt[PFR_REFCNT_RULE] > 0, ("%s: refcount %d\n",
            __func__, kt->pfrkt_refcnt[PFR_REFCNT_RULE]));

        if (!--kt->pfrkt_refcnt[PFR_REFCNT_RULE])
                pfr_setflags_ktable(kt, kt->pfrkt_flags&~PFR_TFLAG_REFERENCED);
}

>From what I know about C programming: kt is not supposed to be 0x0. 
My guess was that some data structure has changed between 10.0 and 10.1
kernels. So a recompile of relayd should fix that. It did. I compiled it from
the ports and it worked. 

Here's a procedure to reproduce the situation:

* install FreeBSD 10.0-RELEASE, relayd (configure it, start pf and relayd)
* update to FreeBSD 10.1-RELEASE using freebsd-update as described in the
handbook
* after some reboots start pf and relayd. After startup, relayd will simply
crash. After the second startup (wait some seconds) the kernel will crash. 

doing a pkg update, pkg upgrade after freebsd-update won't help. In fact, the
relayd binaries seem to be identical on 10.0 and 10.1.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-195407-8>