On Mon, 31 Jan 2011, Eugene Grosbein wrote:

On 31.01.2011 14:20, Julian Elischer wrote:

# gdb kernel
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd"...
(gdb) l *0xffffffff803c1315
0xffffffff803c1315 is in ng_address_hook 
(/home/src/sys/netgraph/ng_base.c:3504).
3499             * Quick sanity check..
3500             * Since a hook holds a reference on it's node, once we know
3501             * that the peer is still connected (even if invalid,) we know
3502             * that the peer node is present, though maybe invalid.
3503             */
3504            if ((hook == NULL) ||
3505                NG_HOOK_NOT_VALID(hook) ||
3506                NG_HOOK_NOT_VALID(peer = NG_HOOK_PEER(hook)) ||
3507                NG_NODE_NOT_VALID(peernode = NG_PEER_NODE(hook))) {
3508                    NG_FREE_ITEM(item);


replace with:

which is essentially what I had suggested in the formerly mentioned PR
already (just remove the first printf macro).


3504            if ((hook == NULL) ||
3505                NG_HOOK_NOT_VALID(hook) ||
                     ((peer = NG_HOOK_PEER(hook)) == NULL) ||
3506                NG_HOOK_NOT_VALID(peer) ||
                     ((peernode = NG_PEER_NODE(hook)) == NULL) ||
3507                NG_NODE_NOT_VALID(peernode)) {
                         if (peer)
                               kassert((peernode != NULL), ("peer node NULL wile 
peer hook exists"));
3508                    NG_FREE_ITEM(item);



The problem is that it will not help to fix the race;  if you go
up in the same file you'll find another similar one of these checks
with a scary rev 1.1. (I think) comment (that you, Julian, should know
very well;-)

The solution that this needs is: proper locking.


It does not compile:

/home/src/sys/netgraph/ng_base.c: In function 'ng_address_hook':
/home/src/sys/netgraph/ng_base.c:3511: warning: implicit declaration of 
function 'kassert'
/home/src/sys/netgraph/ng_base.c:3511: warning: nested extern declaration of 
'kassert'

yeah KASSERT is upper case.


*** Error code 1
1 error
*** Error code 2
1 error
*** Error code 2
1 error
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


--
Bjoern A. Zeeb                                 You have to have visions!
        <ks> Going to jail sucks -- <bz> All my daemons like it!
  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to