Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 May 2005 11:05:10 -0700
From:      gnn@freebsd.org
To:        JINMEI Tatuya / =?ISO-2022-JP?B?GyRCP0BMQEMjOkgbKEI=?= <jinmei@isl.rdc.toshiba.co.jp>
Cc:        kame <snap-users@kame.net>
Subject:   Re: (KAME-snap 9050) Re: Code nit questions...
Message-ID:  <m2k6lxu3s9.wl%gnn@neville-neil.com>
In-Reply-To: <y7vmzqulzj8.wl%jinmei@isl.rdc.toshiba.co.jp>
References:  <m2acmzet7b.wl%gnn@neville-neil.com> <y7vmzqulzj8.wl%jinmei@isl.rdc.toshiba.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
At Tue, 17 May 2005 23:04:11 +0900,
jinmei wrote:
> 
> >>>>> On Thu, 12 May 2005 22:49:12 -0400, 
> >>>>> gnn@freebsd.org said:
> 
> > In a continuing effort to clean up some code nits in the IPv6 code
> > I'd like to propose the following diffs.  There is a comment, starting
> > with a *) explaining the problem and proposed fix.
> 
> Thanks for your continuous efforts.  Here are some comments.

No problem, it's my pleasure.

> > *) Insert proper return value checking.
> 
> in6_embedscope() should not fail in this context (so we could even
> panic if it does), but you probably want to be very proactive by
> eliminating as many (hidden) assumptions as possible.  If so, please
> go ahead with the change, but then I'd rather check the return value
> of in6_recoverscope() as well.

Checking the return value of in6_recoverscope() seems fine to me if it
is also OK by you.  If you/kame commit that then I'll try to pick up
the change when it happens.

> > *) Make sure that sro is also valid before de-referencing it.
> 
> Aside from the fact that sro is not a pointer type as Andre pointed
> out, I'm not even sure whether the code around this point is correct
> in the first place.  Rev. 1.30 of in6_src.c currently reads:

This proposed change was dropped, it was my mistake.

> > -		if (opts && opts->ip6po_pktinfo &&
> > +		if (ifp && opts && opts->ip6po_pktinfo &&
> >		    opts-> ip6po_pktinfo->ipi6_ifindex) {
> >  			if (!(ifp->if_flags & IFF_LOOPBACK) &&
> >		              ifp->if_index !=
> 
> This one does not seem to harm, although ifp can probably be never
> NULL in this context as commented around this part (but again, you
> probably want to be very proactive, then it's fine).

OK, that's been committed to FreeBSD-CURRENT.

> > *) Make sure that rule is valid before dereferencing it.
> 
> (I don't know much about the ip6_fw implementation, so my comment is
> not based on any expertise of my own as a KAME developer.)
> 
> Although the check does not seem to harm per se, it looks to me that
> rule can never be NULL based on the logic of the big for loop above
> this point.  In fact, the code has an assertion check which detects
> almost the same erroneous condition:
> 
> #ifdef DIAGNOSTIC
> 	/* Rule 65535 should always be there and should always match */
> 	if (!chain)
> 		panic("ip6_fw: chain");
> #endif
> 
> So, there seem to be some inconsistency about unexpected failure.
> 

Hmm, I'll have to look at that again.

> > *) Do not bcopy if the pointer is NULL, whether or not canwait was
> >    set.
> 
> Hmm...can't we assume malloc() returns a valid (non NULL) pointer if
> its fourth argument is not M_NOWAIT?  If we can (i.e, it's a
> function's feature), "ip6po_nexthop == NULL && canwait != M_NOWAIT"
> should indicate a serious bug within malloc() or some other parts of
> the kernel.  So I'm not sure if it's really a good idea to pretend
> that the bug didn't exist...
> 
> BTW: if you really want to go with this change, you'll also want to
> make the same change on ip6po_pktinfo for consistency.

Sigh, that's a good point that neither the tool checking this, nor I,
took into account.  I will most likely reverse this change and put in
a comment.

Thanks,
George



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?m2k6lxu3s9.wl%gnn>