ipv4: work around FreeBSD 12.0 kernel running COMPAT_FREEBSD32

Followup for CL 168297, a fix was released for the kernel bug https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737

https://svnweb.freebsd.org/base?view=revision&revision=345741
https://svnweb.freebsd.org/base?view=revision&revision=346019
https://svnweb.freebsd.org/base?view=revision&revision=346020

Thus the bug won't affect 11.3-RELEASE and 12.1-RELEASE when they are out.

Update adjustFreeBSD32 to handle only FreeBSD 12.0-RELEASE ranges of freebsdVersion.

Updates golang/go#30899

Change-Id: I6beeaa55023dbe86a3d6fd8d6d5094516ec6978a
Reviewed-on: https://go-review.googlesource.com/c/net/+/171937
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Yuval Pavel Zholkover
2019-04-12 12:16:49 +03:00
committed by Tobias Klauser
parent eb5bcb51f2
commit 4a65cf94b6

View File

@@ -24,14 +24,15 @@ var (
errNoSuchMulticastInterface = errors.New("no such multicast interface")
errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
// See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html.
freebsdVersion uint32
compatFreeBSD32 bool // 386 emulation on amd64
)
// See golang.org/issue/30899.
func adjustFreeBSD32(m *socket.Message) {
if freebsdVersion >= 1103000 {
// FreeBSD 12.0-RELEASE is affected by https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737
if freebsdVersion >= 1200086 && freebsdVersion < 1201000 {
l := (m.NN + 4 - 1) &^ (4 - 1)
if m.NN < l && l <= len(m.OOB) {
m.NN = l