Module Name:    src
Committed By:   christos
Date:           Mon Nov  8 16:50:06 UTC 2021

Modified Files:
        src/sys/net: if_ethersubr.c

Log Message:
Don't classify dropped packets that we don't understand as errors, for
example etype 0x88CA (TIPC (Transparent Inter Process Communication,)
or 0x893A (IEEE 1905).
Classify them as dropped like Linux does (FreeBSD just ignores them). From RVP.


To generate a diff of this commit:
cvs rdiff -u -r1.302 -r1.303 src/sys/net/if_ethersubr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.302 src/sys/net/if_ethersubr.c:1.303
--- src/sys/net/if_ethersubr.c:1.302	Mon Oct 25 13:05:43 2021
+++ src/sys/net/if_ethersubr.c	Mon Nov  8 11:50:05 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.302 2021/10/25 17:05:43 ryo Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.303 2021/11/08 16:50:05 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.302 2021/10/25 17:05:43 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.303 2021/11/08 16:50:05 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -668,8 +668,10 @@ ether_input(struct ifnet *ifp, struct mb
 #endif
 
 	if (__predict_false(m->m_len < sizeof(*eh))) {
-		if ((m = m_pullup(m, sizeof(*eh))) == NULL)
-			goto dropped;
+		if ((m = m_pullup(m, sizeof(*eh))) == NULL) {
+			if_statinc(ifp, if_ierrors);
+			return;
+		}
 	}
 
 	eh = mtod(m, struct ether_header *);
@@ -870,7 +872,7 @@ ether_input(struct ifnet *ifp, struct mb
 		default:
 			if (subtype == 0 || subtype > 10) {
 				/* illegal value */
-				goto drop;
+				goto error;
 			}
 			/* unknown subtype */
 			break;
@@ -895,7 +897,7 @@ ether_input(struct ifnet *ifp, struct mb
 		ether_input_llc(ifp, m, eh);
 		return;
 #else
-		goto drop;
+		goto error;
 #endif
 	}
 
@@ -966,7 +968,7 @@ ether_input(struct ifnet *ifp, struct mb
 
 	if (__predict_false(!inq)) {
 		/* Should not happen. */
-		goto drop;
+		goto error;
 	}
 
 	IFQ_ENQUEUE_ISR(inq, m, isr);
@@ -974,8 +976,12 @@ ether_input(struct ifnet *ifp, struct mb
 
 drop:
 	m_freem(m);
-dropped:
+	if_statinc(ifp, if_iqdrops); /* XXX should have a dedicated counter? */
+	return;
+error:
+	m_freem(m);
 	if_statinc(ifp, if_ierrors); /* XXX should have a dedicated counter? */
+	return;
 }
 
 /*

Reply via email to