Skip to content

Commit e2c42ec

Browse files
parth-opensrcgvisor-bot
authored andcommitted
nftables: Changing HostToNet/NetToHost implementaion.
The previous implementation used the functions in reversed order. They still worked as the overall effect was same. Also, changed buffer allocation from `make` to static allocation. Added some unit tests. PiperOrigin-RevId: 833512485
1 parent acaa5a7 commit e2c42ec

File tree

2 files changed

+109
-18
lines changed

2 files changed

+109
-18
lines changed

pkg/sentry/socket/netlink/nlmsg/message.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -410,49 +410,49 @@ func (v *BytesView) Int32() (int32, bool) {
410410
// NetToHostU16 converts a uint16 in network byte order to
411411
// host byte order value.
412412
func NetToHostU16(v uint16) uint16 {
413-
b := make([]byte, 2)
414-
binary.NativeEndian.PutUint16(b, v)
415-
return binary.BigEndian.Uint16(b)
413+
var b [2]byte
414+
binary.BigEndian.PutUint16(b[:], v)
415+
return binary.NativeEndian.Uint16(b[:])
416416
}
417417

418418
// NetToHostU32 converts a uint32 in network byte order to
419419
// host byte order value.
420420
func NetToHostU32(v uint32) uint32 {
421-
b := make([]byte, 4)
422-
binary.NativeEndian.PutUint32(b, v)
423-
return binary.BigEndian.Uint32(b)
421+
var b [4]byte
422+
binary.BigEndian.PutUint32(b[:], v)
423+
return binary.NativeEndian.Uint32(b[:])
424424
}
425425

426426
// NetToHostU64 converts a uint64 in network byte order to
427427
// host byte order value.
428428
func NetToHostU64(v uint64) uint64 {
429-
b := make([]byte, 8)
430-
binary.NativeEndian.PutUint64(b, v)
431-
return binary.BigEndian.Uint64(b)
429+
var b [8]byte
430+
binary.BigEndian.PutUint64(b[:], v)
431+
return binary.NativeEndian.Uint64(b[:])
432432
}
433433

434434
// HostToNetU16 converts a uint16 in host byte order to
435435
// network byte order value.
436436
func HostToNetU16(v uint16) uint16 {
437-
b := make([]byte, 2)
438-
binary.BigEndian.PutUint16(b, v)
439-
return binary.NativeEndian.Uint16(b)
437+
var b [2]byte
438+
binary.NativeEndian.PutUint16(b[:], v)
439+
return binary.BigEndian.Uint16(b[:])
440440
}
441441

442442
// HostToNetU32 converts a uint32 in host byte order to
443443
// network byte order value.
444444
func HostToNetU32(v uint32) uint32 {
445-
b := make([]byte, 4)
446-
binary.BigEndian.PutUint32(b, v)
447-
return binary.NativeEndian.Uint32(b)
445+
var b [4]byte
446+
binary.NativeEndian.PutUint32(b[:], v)
447+
return binary.BigEndian.Uint32(b[:])
448448
}
449449

450450
// HostToNetU64 converts a uint64 in host byte order to
451451
// network byte order value.
452452
func HostToNetU64(v uint64) uint64 {
453-
b := make([]byte, 8)
454-
binary.BigEndian.PutUint64(b, v)
455-
return binary.NativeEndian.Uint64(b)
453+
var b [8]byte
454+
binary.NativeEndian.PutUint64(b[:], v)
455+
return binary.BigEndian.Uint64(b[:])
456456
}
457457

458458
// PutU16 converts a uint16 to network byte order and returns it as a

pkg/sentry/socket/netlink/nlmsg/message_test.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package message_test
1616

1717
import (
1818
"bytes"
19+
"fmt"
1920
"reflect"
2021
"testing"
2122

@@ -373,3 +374,93 @@ func TestBytesView(t *testing.T) {
373374
}
374375
}
375376
}
377+
378+
func TestHostToNet(t *testing.T) {
379+
tests := []struct {
380+
name string
381+
validate func() error
382+
}{
383+
{
384+
name: "U16",
385+
validate: func() error {
386+
v := uint16(0x1234)
387+
if got, want := nlmsg.HostToNetU16(v), uint16(0x3412); got != want {
388+
return fmt.Errorf("HostToNetU16(0x%x) = 0x%x, want: 0x%x", v, got, want)
389+
}
390+
return nil
391+
},
392+
},
393+
{
394+
name: "U32",
395+
validate: func() error {
396+
v := uint32(0x12345678)
397+
if got, want := nlmsg.HostToNetU32(v), uint32(0x78563412); got != want {
398+
return fmt.Errorf("HostToNetU32(0x%x) = 0x%x, want: 0x%x", v, got, want)
399+
}
400+
return nil
401+
},
402+
},
403+
{
404+
name: "U64",
405+
validate: func() error {
406+
v := uint64(0x123456789abcdef)
407+
if got, want := nlmsg.HostToNetU64(v), uint64(0xefcdab8967452301); got != want {
408+
return fmt.Errorf("HostToNetU64(0x%x) = 0x%x, want: 0x%x", v, got, want)
409+
}
410+
return nil
411+
},
412+
},
413+
}
414+
for _, test := range tests {
415+
t.Run(test.name, func(t *testing.T) {
416+
if err := test.validate(); err != nil {
417+
t.Error(err)
418+
}
419+
})
420+
}
421+
}
422+
423+
func TestNetToHost(t *testing.T) {
424+
tests := []struct {
425+
name string
426+
validate func() error
427+
}{
428+
{
429+
name: "U16",
430+
validate: func() error {
431+
v := uint16(0x1234)
432+
if got, want := nlmsg.NetToHostU16(v), uint16(0x3412); got != want {
433+
return fmt.Errorf("NetToHostU16(0x%x) = 0x%x, want: 0x%x", v, got, want)
434+
}
435+
return nil
436+
},
437+
},
438+
{
439+
name: "U32",
440+
validate: func() error {
441+
v := uint32(0x12345678)
442+
if got, want := nlmsg.NetToHostU32(v), uint32(0x78563412); got != want {
443+
return fmt.Errorf("NetToHostU32(0x%x) = 0x%x, want: 0x%x", v, got, want)
444+
}
445+
return nil
446+
},
447+
},
448+
{
449+
name: "U64",
450+
validate: func() error {
451+
v := uint64(0x123456789abcdef)
452+
if got, want := nlmsg.NetToHostU64(v), uint64(0xefcdab8967452301); got != want {
453+
return fmt.Errorf("NetToHostU64(0x%x) = 0x%x, want: 0x%x", v, got, want)
454+
}
455+
return nil
456+
},
457+
},
458+
}
459+
for _, test := range tests {
460+
t.Run(test.name, func(t *testing.T) {
461+
if err := test.validate(); err != nil {
462+
t.Error(err)
463+
}
464+
})
465+
}
466+
}

0 commit comments

Comments
 (0)