From eb22c0dfc7d394fc1a172c9457d4d21fd63c3d27 Mon Sep 17 00:00:00 2001 From: Jordan Whited Date: Tue, 3 Oct 2023 13:26:03 -0700 Subject: [PATCH] wgengine/magicsock: use binary.NativeEndian for UDP GSO control data (#9640) Updates #cleanup Signed-off-by: Jordan Whited --- wgengine/magicsock/magicsock_linux.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/wgengine/magicsock/magicsock_linux.go b/wgengine/magicsock/magicsock_linux.go index 7af7b9b03..1f7f5528d 100644 --- a/wgengine/magicsock/magicsock_linux.go +++ b/wgengine/magicsock/magicsock_linux.go @@ -361,10 +361,7 @@ func getGSOSizeFromControl(control []byte) (int, error) { return 0, fmt.Errorf("error parsing socket control message: %w", err) } if hdr.Level == unix.SOL_UDP && hdr.Type == unix.UDP_GRO && len(data) >= 2 { - var gso uint16 - // TODO(jwhited): replace with encoding/binary.NativeEndian when it's available - copy(unsafe.Slice((*byte)(unsafe.Pointer(&gso)), 2), data[:2]) - return int(gso), nil + return int(binary.NativeEndian.Uint16(data[:2])), nil } } return 0, nil @@ -385,8 +382,7 @@ func setGSOSizeInControl(control *[]byte, gsoSize uint16) { hdr.Level = unix.SOL_UDP hdr.Type = unix.UDP_SEGMENT hdr.SetLen(unix.CmsgLen(2)) - // TODO(jwhited): replace with encoding/binary.NativeEndian when it's available - copy((*control)[unix.SizeofCmsghdr:], unsafe.Slice((*byte)(unsafe.Pointer(&gsoSize)), 2)) + binary.NativeEndian.PutUint16((*control)[unix.SizeofCmsghdr:], gsoSize) *control = (*control)[:unix.CmsgSpace(2)] }