diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -89,6 +89,12 @@
 #include <machine/in_cksum.h>
 #endif
 
+#ifdef __NO_STRICT_ALIGNMENT
+#define VTNET_ETHER_ALIGN 0
+#else /* Strict alignment */
+#define VTNET_ETHER_ALIGN 2
+#endif
+
 static int	vtnet_modevent(module_t, int, void *);
 
 static int	vtnet_probe(device_t);
@@ -1223,15 +1229,13 @@
 	} else
 		framesz = sizeof(struct vtnet_rx_header);
 	framesz += sizeof(struct ether_vlan_header) + mtu;
-#ifndef __NO_STRICT_ALIGNMENT
 	/*
 	 * Account for the offsetting we'll do elsewhere so we allocate the
 	 * right size for the mtu.
 	 */
-	if (sc->vtnet_hdr_size % 4 == 0) {
-		framesz += ETHER_ALIGN;
+	if (VTNET_ETHER_ALIGN != 0 && sc->vtnet_hdr_size % 4 == 0) {
+		framesz += VTNET_ETHER_ALIGN;
 	}
-#endif
 
 	if (framesz <= MCLBYTES)
 		return (MCLBYTES);
@@ -1543,15 +1547,13 @@
 		}
 
 		m->m_len = size;
-#ifndef __NO_STRICT_ALIGNMENT
 		/*
 		 * Need to offset the mbuf if the header we're going to add
 		 * will misalign.
 		 */
-		if (sc->vtnet_hdr_size % 4 == 0) {
-			m_adj(m, ETHER_ALIGN);
+		if (VTNET_ETHER_ALIGN != 0 && sc->vtnet_hdr_size % 4 == 0) {
+			m_adj(m, VTNET_ETHER_ALIGN);
 		}
-#endif
 		if (m_head != NULL) {
 			m_tail->m_next = m;
 			m_tail = m;
@@ -1578,14 +1580,12 @@
 
 	sc = rxq->vtnrx_sc;
 	clustersz = sc->vtnet_rx_clustersz;
-#ifndef __NO_STRICT_ALIGNMENT
 	/*
 	 * Need to offset the mbuf if the header we're going to add will
 	 * misalign, account for that here.
 	 */
-	if (sc->vtnet_hdr_size % 4 == 0)
-		clustersz -= ETHER_ALIGN;
-#endif
+	if (VTNET_ETHER_ALIGN != 0 && sc->vtnet_hdr_size % 4 == 0)
+		clustersz -= VTNET_ETHER_ALIGN;
 
 	m_prev = NULL;
 	m_tail = NULL;