Subject: kern/34276: inconsistent code in ether_input()
To: None <,,>
From: None <>
List: netbsd-bugs
Date: 08/24/2006 19:00:01
>Number:         34276
>Category:       kern
>Synopsis:       ether_input() refernces ec_nvlans inconsitently
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Aug 24 19:00:01 +0000 2006
>Originator:     Christoph Badura
>Release:        NetBSD 3.0_STABLE
System: NetBSD limiting-factor 3.0_STABLE NetBSD 3.0_STABLE (GENERIC_LAPTOP) #1: Fri Aug 11 00:20:07 MEST 2006 root@limiting-factor:/u/2/obj/u/1/src/sys/arch/i386/compile/GENERIC_LAPTOP i386
Architecture: i386
Machine: i386
sys/net/if_ethersubr.c contains the following lines in ether_input():

if (ec->ec_nvlans && m_tag_find(m, PACKET_TAG_VLAN, NULL) != NULL) {

and right after that:

if (((struct ethercom *)ifp)->ec_nvlans != 0)

Only one of these lines can be correct because ifp may have been modified
after assigning ec by the bridge code.

I haven't looked at other parts of the code for similar errors.

code inspection
not sure. maybe recompute "ec" in the bridge case.