ipv4: fix unsafe pointer conversion in parseInterface

Fixes golang/go#35174

Change-Id: I01ae0ec25c90da0d05b1b262b33a32233f88260f
Reviewed-on: https://go-review.googlesource.com/c/net/+/203400
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/ipv4/control_bsd.go b/ipv4/control_bsd.go
index 19845c5..9158daf 100644
--- a/ipv4/control_bsd.go
+++ b/ipv4/control_bsd.go
@@ -35,6 +35,7 @@
 }
 
 func parseInterface(cm *ControlMessage, b []byte) {
-	sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&b[0]))
+	var sadl syscall.SockaddrDatalink
+	copy((*[unsafe.Sizeof(&sadl)]byte)(unsafe.Pointer(&sadl))[:], b)
 	cm.IfIndex = int(sadl.Index)
 }