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