route: revert routing message alignment for FreeBSD 386 emulation

CL 139566 changes the alignment of routing messages on FreeBSD 386
11.2-RELEASE and above kernels to 32-bit.

Empirically, freebsd-386 builders are observing 64-bit aligned routing
messages. Change the alignment back to 64-bit.

Adjust the parsing of routing messages on all platforms to return an
error if the total size of the message does not match expectations.

Fixes golang/go#35513

Change-Id: I0809b8c899b5d84cab7bb4451e3074eee81e2904
Reviewed-on: https://go-review.googlesource.com/c/net/+/321869
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/route/address.go b/route/address.go
index 4f6ad96..9edb562 100644
--- a/route/address.go
+++ b/route/address.go
@@ -422,5 +422,11 @@
 			b = b[l:]
 		}
 	}
+	if len(b) > 4 {
+		// If there is more data left over after parsing all addresses
+		// than might be needed for alignment, then we have made a mistake
+		// somewhere.
+		return nil, errInvalidMessage
+	}
 	return as[:], nil
 }
diff --git a/route/message.go b/route/message.go
index d53bb7f..456a836 100644
--- a/route/message.go
+++ b/route/message.go
@@ -53,7 +53,7 @@
 		if w, ok := wireFormats[int(b[3])]; !ok {
 			nskips++
 		} else {
-			m, err := w.parse(typ, b)
+			m, err := w.parse(typ, b[:l])
 			if err != nil {
 				return nil, err
 			}
diff --git a/route/sys_freebsd.go b/route/sys_freebsd.go
index fe91be1..3599601 100644
--- a/route/sys_freebsd.go
+++ b/route/sys_freebsd.go
@@ -134,9 +134,6 @@
 		} else {
 			ifm.bodyOff = sizeofIfMsghdrFreeBSD11
 		}
-		if rel >= 1102000 { // see https://github.com/freebsd/freebsd/commit/027c7f4d66ff8d8c4a46c3665a5ee7d6d8462034#diff-ad4e5b7f1449ea3fc87bc97280de145b
-			align = wordSize
-		}
 	}
 	rtm.parse = rtm.parseRouteMessage
 	ifm.parse = ifm.parseInterfaceMessage