kern/156743: [lagg] [patch] if_lagg should not treat vlan-tagged frames as LACP frames

Dmitrij Tejblum tejblum at
Sat Apr 30 19:20:11 UTC 2011

>Number:         156743
>Category:       kern
>Synopsis:       [lagg] [patch] if_lagg should not treat vlan-tagged frames as LACP frames
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Apr 30 19:20:11 UTC 2011
>Originator:     Dmitrij Tejblum
>Release:        8.2-STABLE
OOO Yandex
When if_lagg check if an input frame is a LACP (slow protocol) frame,  it can treat VLAN-tagged LACP frames as LACP frames, since the NIC could have removed the VLAN tag. Since LACP frames must not be send VLAN-tagged, if_lagg should check for that.

(Some broken switches sometimes incorrectly forward LACP frames to other ports, rather than handle them as LACP. It can result in VLAN-tagged LACP frames. If if_lagg receive such a forwarded LACP packet, it becomes confused. This patch provide some protection against this misbehaviour.)


Patch attached with submission follows:

--- sys/net/if_lagg.c.00	2011-02-25 14:05:35.000000000 +0300
+++ sys/net/if_lagg.c	2011-04-28 15:24:00.000000000 +0400
@@ -1831,11 +1831,11 @@ lagg_lacp_input(struct lagg_softc *sc, s
 	eh = mtod(m, struct ether_header *);
 	etype = ntohs(eh->ether_type);
 	/* Tap off LACP control messages */
-	if (etype == ETHERTYPE_SLOW) {
+	if ((m->m_flags & M_VLANTAG) == 0 && etype == ETHERTYPE_SLOW) {
 		m = lacp_input(lp, m);
 		if (m == NULL)
 			return (NULL);


More information about the freebsd-bugs mailing list